Linux下利用串口收发数据,向串口写数据没有问题,就是读串口,总是不对,不知道问题出在哪了?大家看一下我的主程序,第一次往串口发送6个字节没问题,通过串口助手可以接受到,然后按照主从协议格式回答一个指令(也是6个字节,我利用串口助手在PC机端发送的),需要程序读出来,然后继续向下执行。要是读出来了就应该由串口发送buff25个字节的指令,可是为什么在串口助手接收端会出现[root@FriendlyARM/]#,有时 也会出现[root@FriendlyARM/]#ls Please press enter to active this console.,我在串口设置中已经将串口作为非终端打开了,这是为什么呢?请大家给我点意见!

int main(void)
145 {
146 int fd;
147 int nwrite,sread,i;
148 unsigned char buffa[6]={0x10,0x02,0x00,0x49,0x4B,0x16};
149 unsigned char stra[6]={0x10,0x00,0x02,0x00,0x02,0x16};
150 unsigned char buff[25]={0x68,0x1D,0x68,0x02,0x00,0x7C,0x32,0x01,0x00,0x10,0x00,0x00,0x29,0x00,0x00,0x00,0x00,0x00,0x09,0x4F,0x47,0x52,0x41,0x4D,0xBD,0x16};
151 unsigned char str[6];
152 memset(str,'\0',6);
153 if((fd=open_port(fd,1))<0){
154 perror("open_port error");
155 return;
156 }
157 if((i=set_opt(fd,9600,8,'E',1))<0){
158 perror("set_opt error");
159 return;
160 }
161 nwrite=write(fd,buffa,6);
162 tcflush(fd,TCIFLUSH);
163 if(nwrite<0)
164 perror("write port error");
165
sread=saferead(fd,&str,6); //读串口数据,利用串口调试助手发送的166 if(sread==6)
169 nwrite=write(fd,buff,35);
170 else
171 perror("连接失败!");
172 close(fd);
}
这个saferead函数我是参考的顶嵌出的一本C语言编程书上的串口程序
int saferead(int fd,void *vptr,int nbytes)
123 {
124 int nleft;
125 int nread;
126 int *ptr=NULL;
127 ptr=vptr;
128 nleft=nbytes;
129 while(nleft>0)
130 {
131 if((nread=read(fd,ptr,nleft))<0){
132 if(errno==EINTR)
133 nread=0;
134 else
135 return -1;
136 }else if(nread=0)
137 break;
138 nleft-=nread;
139 ptr+=nread;
140 }