Jump to content

    

Принять строку

Я в режиме Debbuger->Simulator вывожу информацию наружу  printf ("block = %d \n", block); но окно ''Terninal I\O''.

В этом же окне внизу есть Input. Я пытаюсь принять строку с Input - scanf( "%128[^\r]", input_str); или  chr = getchar(); но это все блокирующие функции.

как можно принять строку в симуляторе?

Share this post


Link to post
Share on other sites

Tools->Options, TerminalIO, Keyboard( Buffer/Direct ) Попробуйте. Может директ скидывает в поток каждый байт, а "буфер" будет ждать строку + \r

Share this post


Link to post
Share on other sites
1 hour ago, k155la3 said:

Tools->Options, TerminalIO, Keyboard( Buffer/Direct ) Попробуйте. Может директ скидывает в поток каждый байт, а "буфер" будет ждать строку + \r

код останавливается и ждет ввода и в Direct и в Buffered. а я хочу чтоб он бежал. пришел чар - положил в буфер и дальше бежит.  эмуляция прерывания как в UART.

Share this post


Link to post
Share on other sites

на PC для консольного "прозрачного" ввода используется kbhit() - наличие в буфере введенного символа. Если да - читаем getch();

Посмотрите в  IAR исходник getchar.c ( да и read.c write.c termio.s43 ).

 

Share this post


Link to post
Share on other sites
1 hour ago, k155la3 said:

на PC для консольного "прозрачного" ввода используется kbhit() - наличие в буфере введенного символа. Если да - читаем getch();

Посмотрите в  IAR исходник getchar.c ( да и read.c write.c termio.s43 ).

 

странно. в исходниках чтение не блокирующее. kbhit() нет в IAR, это как раз то что надо.

Share this post


Link to post
Share on other sites

в getchar.c зовётся _low_level_get() который и блокирует, ищите его исходники, смотрите из какого буфера он берет данные и отдельно проверяйте его на наличие данных перед тем как звать getchar. вот и будет вам kbhit().

Share this post


Link to post
Share on other sites
2 hours ago, jenya7 said:

странно. в исходниках чтение не блокирующее. kbhit() нет в IAR, это как раз то что надо.

Там в getchar() поминается что-то касаемо редактирования (в шапке) и сама ф-я содержит цикл. Проверьте что блокировка не на этом цикле.

в вызове _low_level_get() - проверьте (через disasm) что возвращается именно байт. Если слово - то (могобыть) в старшем байте может быть флаг "поток пуст" и работа без блокировки. Я прототипа ф-ии не нашел, какой формат возврата. 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now