免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1498 | 回复: 1
打印 上一主题 下一主题

[C] 关于串口的奇葩事件,都来探讨探讨 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-15 16:57 |只看该作者 |倒序浏览
最近做了一款SPI转UART的驱动,在对驱动进行测试时,遇到了如下的奇葩情况

两个应用程序其它部分完全一样,不一样的如下:

程序1:
  1. while(1)
  2.         {
  3.             memset(buff, 0, sizeof(buff));
  4.             ret = read(comfd, buff, sizeof(buff));
  5.             if (ret < 0)
  6.             {
  7.                 perror("read:\n");
  8.             }
  9.             else
  10.             {
  11.                 int i = ret;
  12.                 while(i)
  13.                 {
  14.                     printf("read:0x%2x\n", buff[ret - i]);
  15.                     i--;
  16.                 }
  17.             }
  18.         }
复制代码
程序2:
  1. while(1)
  2. {
  3.     memset(buff, 0, sizeof(buff));
  4.     ret = read(comfd, buff, sizeof(buff));
  5.     if (ret < 0)
  6.     {
  7.         perror("read com:\n");
  8.     }
  9.     else
  10.     {
  11.         printf("read data ret = %d, count = %d\n", ret, count);
  12.     }
  13. }
复制代码
现在遇到的情况是:
程序1阻塞在read,直到串口有数据过来

程序2不阻塞,一直打印read data ret = 0, count = 0

我就奇怪了,难道read还可以自动变成不阻塞???
各位如果也遇到过这个情况,还望指导。
没遇到过,也一起探讨探讨

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2012-11-15 17:18 |只看该作者
回复 1# lucif0908


   

READ阻塞与否要看驱动程序实现
没有规定READ必须阻塞
非阻塞的驱动很好写,简单轮询就是了
阻塞驱动要涉及中断、调度等麻烦事
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP