Перейти к содержанию
    

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, k155la3 said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, k155la3 said:

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, jenya7 said:

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...