stm32f4 ,log odd , read seems nonblocked<br/>---原始邮件---<br/>发件人:"joel"<joel@rtems.org><br/>发送时间:2019年3月26日 星期二 下午8:39<br/>收件人:"787562067"<googcheng@qq.com><br/>抄送:"rtems-users@rtems.org"<users@rtems.org><br/>主题:Re: uart does not work<br/><div dir="auto">Which bsp? Does the console driver have a set_attributes handler? Does it return false?</div><br/><div class="gmail_quote"><div class="gmail_attr" dir="ltr">On Tue, Mar 26, 2019, 7:08 AM 787562067 <<a href="mailto:googcheng@qq.com">googcheng@qq.com</a>> wrote:<br/></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>HI, ALL!</div><div><br/></div><div><b><font color="#ff6600">when i run fileio test case, i got nothing;</font></b></div><div><br/></div><div>when i run example from here&#xA0;<a href="http://zhgyuan.cn/downloads/uploads-file/201707/myapp.tar.gz" rel="noreferrer" target="_blank">http://zhgyuan.cn/downloads/uploads-file/201707/myapp.tar.gz</a>&#xA0;</div><div><br/></div><div><div><span style="font-size:14px">[19:51:16.847]收←◆hello,this is my print task test!</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">RTEMS Shell on /dev/console. Use 'help' to list commands.</span></div><div><span style="font-size:14px">[/] #&#xA0;</span></div><div><span style="font-size:14px">[19:51:17.177]收←◆hello,this is my print task test!</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">RTEMS Shell on /dev/console. Use 'help' to list commands.</span></div><div><span style="font-size:14px">[/] #&#xA0;</span></div><div><span style="font-size:14px">[19:51:18.020]收←◆hello,this is my print task test!</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">RTEMS Shell on /dev/console. Use 'help' to list commands.</span></div><div><span style="font-size:14px">[/] #&#xA0;</span></div><div><span style="font-size:14px">[19:51:19.306]收←◆hello,this is my print task test!</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">RTEMS Shell on /dev/console. Use 'help' to list commands.</span></div><div><span style="font-size:14px">[/] #&#xA0;</span></div><div><span style="font-size:14px">[19:51:20.589]收←◆hello,this is my print task test!</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">RTEMS Shell on /dev/console. Use 'help' to list commands.</span></div><div><span style="font-size:14px">[/] #&#xA0;</span></div><div><span style="font-size:14px">[19:56:17.932]TX→◇help</span></div><div><span style="font-size:14px">□</span></div><div><span style="font-size:14px">[19:56:17.941]RX←◆h</span></div><div><br/></div><div><br/></div><div>i dont know why. the uart read also does not work for me&#xA0;</div><div><br/></div><div><div><span style="font-size:14px">void testCom1(void) {</span></div><div><span style="font-size:14px">&#xA0; char buffer[256] = {0};</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0; printf("*** Simple COM1 Test ***\n");</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0; //int fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY | _FNDELAY);</span></div><div><span style="font-size:14px">&#xA0; 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">&#xA0; printf("\nOpened COM1, fd=%d\n\n", fd);</span></div><div><span style="font-size:14px">&#xA0; if(fd < 0)</span></div><div><span style="font-size:14px">&#xA0; &#xA0; &#xA0; printf("open error\n");</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0; #if 0</span></div><div><span style="font-size:14px">&#xA0; if(fcntl(fd, F_SETFL, 0) < 0)&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; {&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; &#xA0; printf("fcntl failed!\n");&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; &#xA0; return;&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; }&#xA0; &#xA0; &#xA0; &#xA0;</span></div><div><span style="font-size:14px">&#xA0; else&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; {&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; &#xA0; &#xA0; printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; }</span></div><div><span style="font-size:14px">&#xA0; #endif</span></div><div><span style="font-size:14px">&#xA0; //fcntl(fd, F_SETFL, 0); // set blocked</span></div><div><span style="font-size:14px">&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; struct termios options;</span></div><div><span style="font-size:14px">&#xA0; tcgetattr(fd, &options);</span></div><div><span style="font-size:14px">&#xA0; bzero(&options, sizeof(options));</span></div><div><span style="font-size:14px"><span style="white-space:pre-wrap"></span>/* setting the baud rate */</span></div><div><span style="font-size:14px">&#xA0; cfsetispeed(&options, B115200);</span></div><div><span style="font-size:14px">&#xA0; cfsetospeed(&options, B115200);</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="white-space:pre-wrap;font-size:14px"></span></div><div><span style="font-size:14px">&#xA0; options.c_cflag |= (CLOCAL | CREAD);</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0; //options.c_cflag &= ~PARENB;</span></div><div><span style="font-size:14px">&#xA0; //options.c_cflag &= ~CSTOPB;</span></div><div><span style="font-size:14px">&#xA0; //options.c_cflag &= ~CSIZE;</span></div><div><span style="font-size:14px">&#xA0; options.c_cflag |= (CS8 | CRTSCTS);</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0; options.c_iflag = IGNPAR| ICRNL;</span></div><div><span style="font-size:14px">&#xA0; options.c_oflag = 0;</span></div><div><span style="font-size:14px">&#xA0; options.c_lflag = ICANON;</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0; options.c_cc[VEOF] = 4;</span></div><div><span style="font-size:14px">&#xA0; options.c_cc[VMIN] = 1;</span></div><div><span style="font-size:14px">&#xA0; options.c_cc[VTIME] = 0;</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0; tcflush(fd, TCIFLUSH);</span></div><div><span style="font-size:14px">&#xA0; tcsetattr(fd, TCSANOW, &options);&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; &#xA0; &#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; if(0 == isatty(fd))&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; {&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; &#xA0; &#xA0; printf("input is not a terminal device\n");&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; &#xA0; &#xA0; //return;&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; }</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0; 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">&#xA0; if (numBytes < 0) {</span></div><div><span style="font-size:14px">&#xA0; &#xA0; printf("\nFailed to send from COM1!\n");</span></div><div><span style="font-size:14px">&#xA0; }</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0;&#xA0;</span></div><div><span style="font-size:14px">&#xA0; //wait input&#xA0;</span></div><div><span style="font-size:14px">&#xA0; printf("wait 5s \n");</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0; #if 1</span></div><div><span style="font-size:14px">&#xA0; //(void) rtems_task_wake_after( 5 * rtems_clock_get_ticks_per_second() );</span></div><div><span style="font-size:14px">&#xA0; numBytes = read(fd, buffer, 20);</span></div><div><span style="font-size:14px">&#xA0; printf("read bytes %d\n", numBytes);</span></div><div><span style="font-size:14px">&#xA0; strerror(errno);</span></div><div><span style="font-size:14px">&#xA0; if (numBytes < 0) {</span></div><div><span style="font-size:14px">&#xA0; &#xA0; printf("\nFailed to read from COM1!\n");</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0; }</span></div><div><span style="font-size:14px">&#xA0; else if(numBytes == 0)</span></div><div><span style="font-size:14px">&#xA0; {</span></div><div><span style="font-size:14px">&#xA0; &#xA0; printf("read error return 0\n");</span></div><div><span style="font-size:14px">&#xA0; }</span></div><div><span style="font-size:14px">&#xA0; else</span></div><div><span style="font-size:14px">&#xA0; {</span></div><div><span style="font-size:14px">&#xA0; &#xA0; //buffer[numBytes] = 0; // terminate</span></div><div><span style="font-size:14px">&#xA0; &#xA0; printf("rev: %s\n", buffer);</span></div><div><span style="font-size:14px">&#xA0; }</span></div><div><span style="font-size:14px">&#xA0; #endif</span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">&#xA0; //int read_cnt = uart_recv(fd, buffer, 20);</span></div><div><span style="font-size:14px">&#xA0; //printf("rev: %s\n", buffer);</span></div><div><span style="font-size:14px">&#xA0; //printf("read_cnt: %d\n", read_cnt);</span></div><div><span style="font-size:14px">&#xA0; close(fd);</span></div><div><span style="font-size:14px">&#xA0; rtems_task_delete(RTEMS_SELF);</span></div><div><span style="font-size:14px">}</span></div></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px"><br/></span></div><div><span style="font-size:14px">hope you could help me check it , thx!</span></div><div><span style="font-size:14px"></span></div></div>_______________________________________________<br/>users mailing list<br/><a href="mailto:users@rtems.org" rel="noreferrer" target="_blank">users@rtems.org</a><br/><a href="http://lists.rtems.org/mailman/listinfo/users" rel="noreferrer noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/users</a></blockquote></div>