专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VxWorks

串口读取有关问题

发布时间:2010-06-14 16:48:43 文章来源:www.iduyao.cn 采编人员:星星草
串口读取问题
PowerPC的板子,现成的评估板,内核是MPC8260。板子上没有标准的串口,只有一个2X5(10针)的接口,集成了两个SMC(串行管理控制器),针脚定义跟普通串口差不多,使用时只用一个。硬件就是这样,嵌入式系统是VxWorks。
编了一个读串口的小程序,用Select阻塞在板子的串口处,一旦接收到数据就读取并显示出来,主机这边用串口调试助手向串口发数据。按说点了发送之后数据就到板子的串口了,select函数应该有反应,然后触发读取和显示。但是目前的状况是,发送时必须在数据后附一个回车,否则程序没反应。如果连续发送数据都不带回车,那么直到附带回车后之前发送的数据才会被程序读取和显示。
这是什么情况,怎么感觉跟字符串读取似的呢?

PS:板子上的SMC口在手册里是按Monitor Port定义的,也就是对外显示的通道。我需要它只是一个纯粹的数据传输串口,有这方面的影响么?

读取部分的程序如下:
C/C++ code
    ioctl(fd,FIOFLUSH,0);

    FD_ZERO(&saveFds);                  /* 初始化Set,所以位置零 */
    FD_SET(fd,&saveFds);                /* 设置fd对应的位 */

    while(GoOn)
    {
        readFds = saveFds;
        if ((Fdsnum = select(fd+1,&readFds,NULL,NULL,&tv)) == ERROR)
            printf("Error in select.\n"); 
        else
            printf("Number of file descriptors ready for reading = %d\n",Fdsnum);
        if (FD_ISSET(fd,&readFds))       /* fd读数据就绪 */
        {
            bzero(Rbuff,512);
            /*ioctl(fd,FIONREAD,(int) &readCnt);         /* 判断接收数据缓冲区是否有数据到来 */
            if ((readCnt = read(fd,Rbuff,512)) > 0)
                printf("Read : %s .\n",(char *)Rbuff);
            if (strcmp(Rbuff,QUIT) == 0)
                GoOn = FALSE;
        }
    }



------解决方案--------------------
PowerPC本来就是SMC(串行管理控制器),实现UART功能,

帮顶下。
MARK.
------解决方案--------------------
SMC\SCC都是串行控制器,根据不同的配置方式可以用来实现HDLC、UART、以太等功能。
不过大多数的BSP给出的方式都是用SMC来实现UART的。
------解决方案--------------------
scc是高速接口,支持的协议多一些,
smc是低速接口,通常用作uart,但是速率也够用的,
------解决方案--------------------
如果只是看UART的话,指考虑SMC就可以了。
SCC比较典型的是HDLC之类的高速通信信号,感兴趣可以看看。
实际上860、8260这些通信模型都是BD表为核心的,从低速的学起比较利于对其通信方式的理解,I2C之类的总线也可以比较好的促进理解。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: