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

 
 
> USART - Прерывание раньше времени?
Anub
сообщение Aug 4 2008, 02:42
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
WHALE
сообщение Aug 5 2008, 11:39
Сообщение #2


Знающий
****

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



Цитата(=GM= @ Aug 4 2008, 20:03) *
То есть, по-вашему, если функция находится в стандартной библиотеке, то это не стандартная и не библиотечная функция? А какая тогда?

С самим кодом вроде бы понятно (getchar() имею в виду), но зачем автор писал своё прерывание, когда можно было бы использовать getchar(), а визард сам бы подключил п/п обработки прерывания? И что такое визард cvavr, по-вашему?

а getchar() в CV по поллингу работает,что из кода наблюдается-запрет прерываний при модификации индекса.И ихмо,собственный обработчик-верное решение,вопрос в реализации.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 5 2008, 11:53
Сообщение #3


Ambidexter
*****

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



Цитата(WHALE @ Aug 5 2008, 10:39) *
а getchar() в CV по поллингу работает,что из кода наблюдается-запрет прерываний при модификации индекса. И имхо, собственный обработчик -верное решение, вопрос в реализации

Никак не хотят отвечать на поставленные вопросы(:-).

1) Понятно, что по прерыванию кладётся в циклический буфер, понятно, что по поллингу берётся из него. Как разработчик узнает, что надо использовать имена переменных, которые вписаны в getchar()? Если бы компилятор всё (и getchar, и прерывание) писал, то понятно, а если только getchar, а разработчик программу прерываний, то как они договорились?

2) Если функция находится в стандартной библиотеке, то это не стандартная и не библиотечная функция? А какая тогда?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
SysRq
сообщение Aug 5 2008, 12:27
Сообщение #4


Чайник, 1 литр
****

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



Цитата(=GM= @ Aug 5 2008, 15:53) *
Если бы компилятор всё (и getchar, и прерывание) писал...

А он так и делает biggrin.gif
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 5 2008, 12:33
Сообщение #5


Ambidexter
*****

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



Цитата(SysRq @ Aug 5 2008, 11:27) *
А он так и делает

Что, и оператор sf=1; он сам вписал?

Вы на вопрос-то ответите? Вы считаете, что если функция находится в стандартной библиотеке, то это не стандартная и не библиотечная функция? А какая тогда?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
SysRq
сообщение Aug 5 2008, 15:15
Сообщение #6


Чайник, 1 литр
****

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



Цитата(=GM= @ Aug 5 2008, 16:33) *
Что, и оператор sf=1; он сам вписал?

Нет, это правки автора.

Цитата(=GM= @ Aug 5 2008, 16:33) *
Вы на вопрос-то ответите?

Нет, не отвечу, ибо я такого не писал, это ваши домыслы.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 03:47
Рейтинг@Mail.ru


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