<div>HI, ALL!</div><div>  I am new to rtems. now write the usart application by usart3 (PD8 PD9 pin)</div><div>when i input a string "qqw" by port tool Hercules,  i only get one char 'q' returned ,  so i think the read here is not</div><div>like the linux read function,  i dont know how to handle it, hope you could give some hints!</div><div><br></div><div><br></div><div>code output log:</div><div><br></div><div><div><span style="font-size: 14px;">Serial port COM2 opened</span></div><div><span style="font-size: 14px;">*** Simple COM1 Test ***</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Opened COM1, fd=3</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Hello, I'm waiting for input..</span></div><div><span style="font-size: 14px;">wait 5s </span></div><div><span style="font-size: 14px;">*** Simple COM1 Test ***</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Opened COM1, fd=3</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Hello, I'm waiting for input..</span></div><div><span style="font-size: 14px;">wait 5s </span></div><div><span style="font-size: 14px;">*** Simple COM1 Test ***</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Opened COM1, fd=3</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Hello, I'm waiting for input..</span></div><div><span style="font-size: 14px;">wait 5s </span></div><div><span style="font-size: 14px;">*** Simple COM1 Test ***</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Opened COM1, fd=3</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">Hello, I'm waiting for input..</span></div><div><span style="font-size: 14px;">wait 5s </span></div><div><span style="font-size: 14px;">qww<b>q</b></span></div></div><div><br></div><div><br></div><div>==================================</div><div><div><span style="font-size: 14px;">void testCom1(void);</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">void testCom1(void) {</span></div><div><span style="font-size: 14px;">  char buffer[256] = {0};</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  printf("*** Simple COM1 Test ***\n");</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  //int fd = open("/dev/ttyS2", O_RDWR | O_NOCTTY | _FNDELAY);</span></div><div><span style="font-size: 14px;">  int fd = open("/dev/ttyS2", O_RDWR | O_NOCTTY);</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  printf("\nOpened COM1, fd=%d\n\n", fd);</span></div><div><span style="font-size: 14px;">  if(fd < 0)</span></div><div><span style="font-size: 14px;">      printf("open error\n");</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  #if 0</span></div><div><span style="font-size: 14px;">  if(fcntl(fd, F_SETFL, 0) < 0)  </span></div><div><span style="font-size: 14px;">  {  </span></div><div><span style="font-size: 14px;">    printf("fcntl failed!\n");  </span></div><div><span style="font-size: 14px;">    return;  </span></div><div><span style="font-size: 14px;">  }       </span></div><div><span style="font-size: 14px;">  else  </span></div><div><span style="font-size: 14px;">  {  </span></div><div><span style="font-size: 14px;">      printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));  </span></div><div><span style="font-size: 14px;">  }</span></div><div><span style="font-size: 14px;">  #endif</span></div><div><span style="font-size: 14px;">  fcntl(fd, F_SETFL, 0); // set blocked</span></div><div><span style="font-size: 14px;">  </span></div><div><span style="font-size: 14px;">  struct termios options;</span></div><div><span style="font-size: 14px;">  tcgetattr(fd, &options);</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;"><span style="white-space:pre">       </span>/* setting the baud rate */</span></div><div><span style="font-size: 14px;">  cfsetispeed(&options, B115200);</span></div><div><span style="font-size: 14px;">  cfsetospeed(&options, B115200);</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="white-space: pre; font-size: 14px;">    </span></div><div><span style="font-size: 14px;">  options.c_cflag |= (CLOCAL | CREAD);</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  options.c_cflag &= ~PARENB;</span></div><div><span style="font-size: 14px;">  options.c_cflag &= ~CSTOPB;</span></div><div><span style="font-size: 14px;">  options.c_cflag &= ~CSIZE;</span></div><div><span style="font-size: 14px;">  options.c_cflag |= CS8;</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  options.c_cc[VMIN] = 0;</span></div><div><span style="font-size: 14px;">  options.c_cc[VTIME] = 15;</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  tcsetattr(fd, TCSANOW, &options);  </span></div><div><span style="font-size: 14px;">      </span></div><div><span style="font-size: 14px;">  if(0 == isatty(fd))  </span></div><div><span style="font-size: 14px;">  {  </span></div><div><span style="font-size: 14px;">      printf("input is not a terminal device\n");  </span></div><div><span style="font-size: 14px;">      //return;  </span></div><div><span style="font-size: 14px;">  }</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  int numBytes = write(fd, "Hello, I'm waiting for input..\r\n", 33);</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  if (numBytes < 0) {</span></div><div><span style="font-size: 14px;">    printf("\nFailed to send from COM1!\n");</span></div><div><span style="font-size: 14px;">  }</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  //wait input </span></div><div><span style="font-size: 14px;">  printf("wait 5s \n");</span></div><div><span style="font-size: 14px;">  (void) rtems_task_wake_after( 5 * rtems_clock_get_ticks_per_second() );</span></div><div><span style="font-size: 14px;">  numBytes = read(fd, buffer, 20);</span></div><div><span style="font-size: 14px;">  printf("read bytes %d\n", numBytes);</span></div><div><span style="font-size: 14px;">  strerror(errno);</span></div><div><span style="font-size: 14px;">  if (numBytes < 0) {</span></div><div><span style="font-size: 14px;">    printf("\nFailed to read from COM1!\n");</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  }</span></div><div><span style="font-size: 14px;">  else if(numBytes == 0)</span></div><div><span style="font-size: 14px;">  {</span></div><div><span style="font-size: 14px;">    printf("read error return 0\n");</span></div><div><span style="font-size: 14px;">  }</span></div><div><span style="font-size: 14px;">  else</span></div><div><span style="font-size: 14px;">  {</span></div><div><span style="font-size: 14px;">    //buffer[numBytes] = 0; // terminate</span></div><div><span style="font-size: 14px;">    printf("rev: %s\n", buffer);</span></div><div><span style="font-size: 14px;">  }</span></div><div><span style="font-size: 14px;"><br></span></div><div><span style="font-size: 14px;">  close(fd);</span></div><div><span style="font-size: 14px;">}</span></div></div>