免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: wzj071227
打印 上一主题 下一主题

望高人帮我看下这代码(一个读串口程序) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-08-14 16:35 |只看该作者

回复 #9 sep 的帖子

int fd = open( Dev, O_RDWR|O_NOCTTY );
int fd = open( Dev, O_RDWR|O_NOCTTY|O_NONBLOCK );
以上两个模式我都测试了,还是一样,windows发的数据是在缓冲区里,不过我在windows发送数据的时候加个回车符就能实时显示出来了!!望高人怎么解决啊!
我估计是这里 if( write(STDOUT_FILENO,buff,nread) !=nread )
望高人解决一下!

论坛徽章:
0
12 [报告]
发表于 2008-08-14 16:42 |只看该作者
buff[nread]='\0'

论坛徽章:
0
13 [报告]
发表于 2008-08-14 16:49 |只看该作者
行缓冲!!!!!!!!!

论坛徽章:
0
14 [报告]
发表于 2008-08-14 16:51 |只看该作者
在板子端加载一个进程去刷缓冲区!!!

顺便接受pc端发来的数据!!

论坛徽章:
0
15 [报告]
发表于 2008-08-14 16:53 |只看该作者

回复 #12 sep 的帖子

试了你说的方法,还是一样啊,不打回车符,就是不能实时显示,打上回车符就能实时显示了!!
我用的是windows的串口调试助手!

论坛徽章:
0
16 [报告]
发表于 2008-08-14 16:56 |只看该作者

回复 #14 vitoUNIX 的帖子

还要加一个进程专门去刷缓冲区啊,有没有简单点啊,修改上面的程序一下可否能解决啊,要是能解决,具体说一下怎么修改

论坛徽章:
0
17 [报告]
发表于 2008-08-14 16:57 |只看该作者
原帖由 wzj071227 于 2008-8-14 16:53 发表
试了你说的方法,还是一样啊,不打回车符,就是不能实时显示,打上回车符就能实时显示了!!
我用的是windows的串口调试助手!

那没法了,只知道是缓冲的问题
不然令buff[nread]的值等于回车符试下

论坛徽章:
0
18 [报告]
发表于 2008-08-14 17:09 |只看该作者
加个进程很简单的

程序又不复杂!!

其实你PC向板子发数据 板子这端你怎么也要有个接受程序吧。正好直接实现个简单的为以后做点准备

论坛徽章:
0
19 [报告]
发表于 2008-08-15 09:09 |只看该作者
fd = open(devicename, O_RDWR | O_NOCTTY | O_NONBLOCK);

注意O_NONBLOCK

论坛徽章:
0
20 [报告]
发表于 2008-08-15 09:17 |只看该作者
http://www.comptechdoc.org/os/li ... inux_pgcserial.html

// after receiving SIGIO, wait_flag = FALSE, input is available and can be read
         if (wait_flag==FALSE)  //if input is available
         {
            res = read(fd,buf,255);
            if (resɬ
            {
               for (i=0; i<res; i++)  //for all chars in string
               {
                  In1 = buf;
                  switch (Format)
                  {
                     case 1:         //hex
                        sprintf(message,"%x ",In1);
                        fputs(message,output);
                        break;
                     case 2:         //decimal
                        sprintf(message,"%d ",In1);
                        fputs(message,output);
                        break;
                     case 3:         //hex and asc
                        if ((In1ថ || (In1)
                        {
                           sprintf(message,"%x",In1);
                           fputs(message,output);
                        }
                        else fputc ((int) In1, output);
                        break;
                     case 4:         //decimal and asc
                     default:
                        if ((In1ថ || (In1)
                        {
                           sprintf(message,"%d",In1);
                           fputs(message,output);
                        }
                        else fputc ((int) In1, output);
                        break;
                     case 5:         //asc
                        fputc ((int) In1, output);
                        break;
                  }  //end of switch format
               }  //end of for all chars in string
            }  //end if resɘ
//            buf[res]=0;
//            printf(":%s:%d\n", buf, res);
//            if (res==1) STOP=TRUE; /* stop loop if only a CR was input */
            wait_flag = TRUE;      /* wait for new input */
         }  //end if wait flag == FALSE
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP