问题描述
我正在尝试使用usleep写入串行端口,当我在主代码中尝试使用它时,它工作正常:
int set_interface_attribs(int fd,int speed)
{
struct termios my_termios;
memset(&my_termios,sizeof my_termios);
if(tcgetattr(fd,&my_termios) != 0) {
fprintf(stderr,"error %d from tcgetattr",errno);
return -1;
}
cfsetospeed(&my_termios,speed);
cfsetispeed(&my_termios,speed);
my_termios.c_cflag |= CS8;
my_termios.c_cflag |= CREAD;
my_termios.c_iflag = IGNPAR | IGNBRK;
my_termios.c_cflag |= CLOCAL;
my_termios.c_oflag = 0;
my_termios.c_lflag = 0;
my_termios.c_cc[VTIME] = 0;
my_termios.c_cc[VMIN] = 1;
tcflush(fd,TCOFLUSH);
tcflush(fd,TCIFLUSH);
if (tcsetattr(fd,TCSANow,&my_termios) !=0) {
fprintf(stderr,"error %d from tcsetattr",errno);
return -1;
}
return 0;
}
const char *portname = "/dev/ttyUSB1";
int serialFd = -1;
int serial_open(const char* port,int baud) {
serialFd = open(port,O_RDWR | O_NOCTTY);
if (serialFd < 0)
{
fprintf(stderr,"error %d opening %s: %s",errno,port,strerror(errno));
return -1;
}
set_interface_attribs(serialFd,baud);
printf("Port %s opened.\n",port);
return -1;
}
int main(int argc,char *argv[]) {
unsigned char dat1,dat2,dat3,num2;
int val=50,a,num=159;;
serial_open(portname,B19200);
a = float2fix(val);
FFtoF_F_F(val,&c_3,&c_2,&c_1);
num2 = (unsigned char)num;
dat1 = (unsigned char)c_1;
dat2 = (unsigned char)c_2;
dat3 = (unsigned char)c_3;
write(serialFd,&num2,sizeof(num2));
usleep(2000);
write(serialFd,&dat1,sizeof(dat1));
usleep(2000);
write(serialFd,&dat2,sizeof(dat2));
usleep(2000);
write(serialFd,&dat3,sizeof(dat3));
}
我需要使用不同的标志多次调用它,所以我尝试将所有内容都放入函数中,如下所示:
void SetVal(int val){
int c_3,c_2,c_1,num=159;
unsigned char dat1,num2;
FFtoF_F_F(val,&c_1);
num2 = (unsigned char)num;
dat1 = (unsigned char)c_1;
dat2 = (unsigned char)c_2;
dat3 = (unsigned char)c_3;
write(serialFd,sizeof(dat3));
}
但是当我在主要调用此函数(SetVal())时,它无法正常工作。我认为usleep会稍微延长。我该如何解决,这样消息才能正确发送?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)