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

 
 
> Программа работает. Секунд 5.
VictorR
сообщение Jan 7 2017, 10:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 28-03-05
Пользователь №: 3 738



С новым годом!

Код
unsigned char n=0;
unsigned char dat[10];

***
void main(void)
{
***
установки портов и прерываний
***

  while(1);
}

**
void USART1_IRQHandler(void)
{
  USART1_DR=dat[n];

  n++;
  if(n>3)
    n=0;
}

Программа работает. Секунд 5.
А если unsigned char n; заменить на unsigned int n; не работает вообще!
А если вместо USART1_DR=dat[n]; написать USART1_DR=dat[2]; (например), то все работает нормально

Ну не е-мое?

PS IAR 7.8 официальный с ограничением по коду. Оптимизация выключена

Сообщение отредактировал IgorKossak - Jan 7 2017, 14:35
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gerber
сообщение Jan 7 2017, 13:13
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



После
Цитата(VictorR @ Jan 7 2017, 13:09) *
USART1_DR=dat[n];

прерывание TXE считается обработанным, и ничто не мешает процессору осуществить повторный вход в USART1_IRQHandler, например, сразу после n++;
Потому и работает, секунд 5, пока не исчерпается стек...
Потому и работает при unsigned char, так как индекс ограничен хотя бы числом 255, и не улетает в неведомые адресные пространства...


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 17:04
Рейтинг@Mail.ru


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