Jump to content

    
Sign in to follow this  
jenya7

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

Recommended Posts

Я в режиме 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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this