|
USART - Прерывание раньше времени? |
|
|
|
Aug 4 2008, 02:42
|
Участник

Группа: Новичок
Сообщений: 47
Регистрация: 26-05-08
Пользователь №: 37 825

|
Код bit sf=0; Код interrupt [USART_RXC] void usart_rx_isr(void) { char status,data; status=UCSRA; data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) { rx_buffer[rx_wr_index]=data; if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=0; rx_buffer_overflow=1; }; }; sf=1; } Код void check(void) { if (sf!=0) { char c; c=getchar(); if (c!="") { PORTA=0x07; } else { PORTA=0x0B; } } } При запуске я получаю результат проверки условия в функции check, т. е. sf==1, и по идее было вызвано прерывание по приему символа, это как так, у меня нога RXD в воздухе весит...
Сообщение отредактировал Anub - Aug 4 2008, 02:42
|
|
|
|
|
 |
Ответов
|
Aug 5 2008, 11:39
|

Знающий
   
Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768

|
Цитата(=GM= @ Aug 4 2008, 20:03)  То есть, по-вашему, если функция находится в стандартной библиотеке, то это не стандартная и не библиотечная функция? А какая тогда?
С самим кодом вроде бы понятно (getchar() имею в виду), но зачем автор писал своё прерывание, когда можно было бы использовать getchar(), а визард сам бы подключил п/п обработки прерывания? И что такое визард cvavr, по-вашему? а getchar() в CV по поллингу работает,что из кода наблюдается-запрет прерываний при модификации индекса.И ихмо,собственный обработчик-верное решение,вопрос в реализации.
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Aug 5 2008, 11:53
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(WHALE @ Aug 5 2008, 10:39)  а getchar() в CV по поллингу работает,что из кода наблюдается-запрет прерываний при модификации индекса. И имхо, собственный обработчик -верное решение, вопрос в реализации Никак не хотят отвечать на поставленные вопросы(:-). 1) Понятно, что по прерыванию кладётся в циклический буфер, понятно, что по поллингу берётся из него. Как разработчик узнает, что надо использовать имена переменных, которые вписаны в getchar()? Если бы компилятор всё (и getchar, и прерывание) писал, то понятно, а если только getchar, а разработчик программу прерываний, то как они договорились? 2) Если функция находится в стандартной библиотеке, то это не стандартная и не библиотечная функция? А какая тогда?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Aug 5 2008, 15:15
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата(=GM= @ Aug 5 2008, 16:33)  Что, и оператор sf=1; он сам вписал? Нет, это правки автора. Цитата(=GM= @ Aug 5 2008, 16:33)  Вы на вопрос-то ответите? Нет, не отвечу, ибо я такого не писал, это ваши домыслы.
|
|
|
|
Сообщений в этой теме
Anub USART - Прерывание раньше времени? Aug 4 2008, 02:42 haker_fox Цитата(Anub @ Aug 4 2008, 11:42) При запу... Aug 4 2008, 03:20 defunct Цитата(haker_fox @ Aug 4 2008, 06:20) if ... Aug 4 2008, 10:37  777777 Цитата(defunct @ Aug 4 2008, 14:37) ... Aug 4 2008, 11:34   defunct Цитата(777777 @ Aug 4 2008, 14:34) if (c ... Aug 4 2008, 13:16 =GM= Цитата(Anub @ Aug 4 2008, 01:42) При запу... Aug 4 2008, 13:16 SysRq Обьявить sf как volatile, RXD завести куда следует... Aug 4 2008, 14:37 =GM= Цитата(SysRq @ Aug 4 2008, 13:37) Остальн... Aug 4 2008, 15:14 SysRq А std* это по-вашему что? Стандартная библиотека... Aug 4 2008, 15:29 =GM= То есть, по-вашему, если функция находится в станд... Aug 4 2008, 16:03     =GM= Цитата(SysRq @ Aug 5 2008, 14:15) Нет, эт... Aug 5 2008, 16:02      SysRq Цитата(=GM= @ Aug 5 2008, 20:02) Ну как ж... Aug 5 2008, 17:23       =GM= Ну и кто тут флеймит?
Модераторы, нельзя ли убрат... Aug 5 2008, 19:28
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|