这是一个简易的嵌入式linux对多单片机的测试程序:
下位机如下工作:接收到正确的地址码,返回#? OKv否则什么也不返回
教训:上一个程序VMIN设置成6,当只有上下位机的时候,地址码错误,程序就会阻塞在那里。
一对多通信,VMIN必须为0,VTIME的单位是百毫秒,这里30就代表3秒。表示上位机最多等待三秒。若无任何响应,则返回。
如同http://bbs.csdn.net/topics/320133315这里所讲 我自己测试下来发现设置c_cc[VMIN] > 0后,不管open的时候带不带O_NODELY/O_NOBLOCK ,都为阻塞型了
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #include <stdio.h> #include <unistd.h> #define DEVICE "/dev/ttyS1" /****globals****/ struct termios opt; void OptTermi(struct termios*); int fd, c ,res; struct termios old; char buf[7]; char sent; char STOP =0; /******************/ int main() { fd =open(DEVICE,O_RDWR|O_NDELAY); if(fd>0) printf("Device Opened Successfully!\n"); tcgetattr(fd,&old); bzero(&opt,sizeof(opt)); OptTermi(&opt); fcntl(fd,F_SETFL,0); tcflush(fd,TCIFLUSH); if(tcsetattr(fd,TCSANOW,&opt)==0) printf("Init done......\n"); do{ memset(buf,0,7); printf("enter a char:\n"); scanf("%c",&sent); if('q'==sent) STOP=1; write(fd,&sent,1); res =read(fd,buf,6); if(buf[5]=='v') { printf("incoming...\n"); buf[6]=0; printf("%d\n",res); printf(":%s\n",buf); } if(buf[5]!='v') printf("NO device available.\n"); tcflush(fd,TCIFLUSH); }while(STOP==0); tcsetattr(fd,TCSANOW,&old); close(fd); } void OptTermi(struct termios* termios_p) { //set to RAW mode ,according to man page termios_p->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); termios_p->c_oflag &= ~OPOST; termios_p->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); termios_p->c_cflag &= ~(CSIZE | PARENB); termios_p->c_cflag |= CS8; //plus termios_p->c_iflag &= ~(IXON | IXOFF | IXANY); //parity setting: operations above has done something ,more to go //no input parity checking termios_p->c_iflag &=~INPCK; //1 stop bit termios_p->c_cflag &=~CSTOPB; /* Enable the receiver and set local mode...*/ termios_p->c_cflag |= (CLOCAL | CREAD); //set standard speed cfsetispeed(termios_p,B9600); cfsetospeed(termios_p,B9600); // termios_p->c_cc[VTIME]=30; termios_p->c_cc[VMIN]=0; }
http://bbs.ednchina.com/BLOG_ARTICLE_1809186.HTM
http://wenku.baidu.com/view/56467805cc175527072208bc.html
http://blog.csdn.net/wushihua/article/details/5733790