上一周已经确定供应商给提供的程序不是在Linux下台下的,所以底层的通讯函数都不能用,需要全部重写。
花了好长时间研究了串口的相关设置,由于今天刚始没有摆正心态认真对待该问题,所以在最初写串口程序的时候走了一些弯路,导致效率低下和时间的浪费。在重复尝试多次失败生决定全部重写串口通讯函数,结果没有用半天的时间就把机器调通了。
由此产生一点感悟:做一件事情能不能做好,可能不是由自己的能力决定的,而是由心态决定的,只有端正了心态,全心全意的去做,最终都会收到一个满意的结果。以后做事要么不做,要么就踏踏实实的把事情做好,这样才会效率最高。
下面附上这次任务中串口设置的函数:
int SetUart( void )
{
int ret;
struct termios opt,oldopt;
fcntl(ttyfd,F_SETFL,0); /*恢复串口为阻塞状态*/
if(isatty(STDIN_FILENO)==0)
printf("fcntl failed!\n");
else
printf("isatty success!\n");
tcgetattr(ttyfd,&oldopt);
bzero(&opt,sizeof(opt));
opt.c_cflag |= CLOCAL |CREAD;
opt.c_cflag &= ~CSIZE;
opt.c_cflag |= CS8;
opt.c_cflag &= ~PARENB;
opt.c_cflag &= ~CSTOPB; /* stop bits = 1 */
cfsetispeed(&opt,B115200);
cfsetospeed(&opt,B115200);
tcsetattr(ttyfd,TCSANOW,&opt);
opt.c_iflag &= ~INPCK;
opt.c_cc[VTIME]= 10;
opt.c_cc[VMIN] = 0 ;
tcflush(ttyfd,TCIFLUSH);
if(tcsetattr(ttyfd,TCSANOW,&opt) != 0)
{
perror("SetupSerial2");
return -1;
}
return 0;
}