реклама на сайте
подробности

 
 
> scanf + колцевой буфер (WinAVR), результат такого скрещивания неудовлетворительный
ARV
сообщение Jul 20 2010, 06:23
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



вот, решил задействовать функции ввода высокого уровня, а именно scanf.
сделал кольцевой буфер, в который складываются принимаемые по прерываниям из UART байты. создал стандартный поток ввода, как и нужно для реализации WinAVR, функция чтения символа возвращает _FDEV_EOF, если в кольцевом буфере "голова" совпадает с "хвостом", т.е. нет новых данных.

и вот что получается: буфер заполняется довольно медленно, а scanf пытается вычитывать данные быстро, в итоге после вычитывания первого же символа она получает EOF и, естественно, заканчивает ввод... то есть как ни крути, вводится 1 или (редко) два байта, и точка.

почему лыжи не едут?

что-то у меня не очень укладывается в голове, как организовать ввод данных так, чтобы использовать scanf и при этом не попадать в долгие ожидания поступления очередного символа...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ReAl
сообщение Jul 20 2010, 14:52
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(ARV @ Jul 20 2010, 09:23) *
что-то у меня не очень укладывается в голове, как организовать ввод данных так, чтобы использовать scanf и при этом не попадать в долгие ожидания поступления очередного символа...
Почти никак.
EOF для scanf означает, что файл закончился, приплыли. Соответственно, он прекращает сканировать и вываливается.
Так что или в getchar ждать до посинения, или в нём же пользоваться сервисом вытесняющей ОС по ожиданию события поступления символа.

Ну или в шаге кооперативки набирать посимвольно в буфер до упомянутого выше разделителя (т.е. "по месту" реализованный gets() с отдачей управления) а потом вызывать sscanf.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
klen
сообщение Jul 20 2010, 16:47
Сообщение #3


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



а мож ненада..... scanf использовать - вещ то жутковатя
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016