毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 嵌入式 >> 正文

linux,printf会导致线程阻塞吗

更新时间:2013-3-17:  来源:毕业论文

在项目开发时碰到这样一个比较奇怪的问题:应用的某个子线程中调用printf向debug串口输出log,当串口连接到PC的时候,没有问题,一旦串口线与PC串口断开,则在一定时间内,该子线程会阻塞,但只要串口线一连接上PC,阻塞解除。初步估计可能是因为printf导致buffer满了以后阻塞此调用,因为printf输出内容很多时,很快就阻塞,而printf内容较少时,这个时间要长一些。 这里我只是猜测,请教下论坛里的达人,有谁知道原因

是不是判断有误。
没有串口连接只会造成数据丢失,不会阻塞。

不可能,系统不可能知道你插没插串口线。另外,你怎么知道阻塞了?

你确定printf会造成堆溢出?

本质上和printf函数没有任何关系,从上面你描述的现象来看,应该是串口的驱动有问题,linux下所有的东西都被抽象为文件,我初步怀疑是当只有写操作而没有读导致文件满了,当接上串口线此时有了读操作就不会有向你上面所说的阻塞了。对于当连接上串口线,打印的全是乱码,这个没研究过,估计与通讯机制有关,这个不影响工作的,关掉串口重新打开就好了,如果你很有钻研精神不妨研究一下分享到这来

连上串口后,你的接收程序就能正常工作了。而如果断开串口,就只是发送数据,看一看你的软件是查询式发送还是中断发送数据。另外,你可以用条件编译将printf全部ommit掉,看看断开串口是否阻塞;当然,printf本身还具有延时功能。 毕业论文 

大概串口打开时,配置了硬件流控,导致通信时必须检测RTS之类的信号。你查一下串口的配置看看,去掉硬件流控试试。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。