PowerPC的板子,现成的评估板,内核是MPC8260。板子上没有标准的串口,只有一个2X5(10针)的接口,集成了两个SMC(串行管理控制器),针脚定义跟普通串口差不多,使用时只用一个。硬件就是这样,嵌入式系统是VxWorks。
编了一个读串口的小程序,用Select阻塞在板子的串口处,一旦接收到数据就读取并显示出来,主机这边用串口调试助手向串口发数据。按说点了发送之后数据就到板子的串口了,select函数应该有反应,然后触发读取和显示。但是目前的状况是,发送时必须在数据后附一个回车,否则程序没反应。如果连续发送数据都不带回车,那么直到附带回车后之前发送的数据才会被程序读取和显示。
这是什么情况,怎么感觉跟字符串读取似的呢?
PS:板子上的SMC口在手册里是按Monitor Port定义的,也就是对外显示的通道。我需要它只是一个纯粹的数据传输串口,有这方面的影响么?
读取部分的程序如下:
- 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;
- }
- }