写入带有usleep问题的串行端口

问题描述

我正在尝试使用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 (将#修改为@)