Linux Reading Data from UART

后端 未结 3 432
一个人的身影
一个人的身影 2021-01-21 16:45

I want to read data from UART, i followed this tutorial, the write function works as expected, however i\'am getting problem with the read function :

This is the uart_in

3条回答
  •  渐次进展
    2021-01-21 17:28

    Your program is hanging in the read() syscall because it is blocked waiting for a line-termination character.
    You tried to configure the port for non-canonical mode with the statement

    SerialPortSettings.c_iflag &= ~(ICANON | ECHO | ECHOE | ISIG);  /* Non Cannonical mode  
    

    but that operation is on the wrong termios element.
    The ICANON attribute is part of the lflag element (and not the iflag). (This error originates from the tutorial you referenced!)
    Therefore your program is performing blocking canonical reads.

    There's a convenient termios function for configuring non-canonical mode:

       cfmakeraw()  sets the terminal to something like the "raw" mode of the old 
       Version 7 terminal driver: input is available character by
       character, echoing is disabled, and all special processing of  
       terminal  input  and  output  characters  is  disabled.   The  terminal
       attributes are set as follows:
    
           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;
    

提交回复
热议问题