Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программа работает. Секунд 5.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
VictorR
С новым годом!

Код
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 официальный с ограничением по коду. Оптимизация выключена
gazpar
Цитата(VictorR @ Jan 7 2017, 13:09) *


Гляньте в ассемблер (во что там раскатался ваш код).

И вас с новым годом!
prottoss
Цитата(VictorR @ Jan 7 2017, 16:09) *
Программа работает. Секунд 5.
И что потом? Зависает, вылетает в аварийное прерывание или еще что то?

Сам работаю на версии 7.80.02. Сейчас занимаюсь относительно большим проектом - USB, CAN, USART на STM32F407 - вообще ни каких проблем. Библиотеками сторонними, правда не пользуюсь. Весь проект с нуля написан ручками.
VictorR
К сожалению, работаю без отладчика, так что ответить на Ваш вопрос не могу.
gerber
После
Цитата(VictorR @ Jan 7 2017, 13:09) *
USART1_DR=dat[n];

прерывание TXE считается обработанным, и ничто не мешает процессору осуществить повторный вход в USART1_IRQHandler, например, сразу после n++;
Потому и работает, секунд 5, пока не исчерпается стек...
Потому и работает при unsigned char, так как индекс ограничен хотя бы числом 255, и не улетает в неведомые адресные пространства...
adnega
Цитата(gerber @ Jan 7 2017, 16:13) *
и ничто не мешает процессору осуществить повторный вход в

Если это Cortex-M, то мешает архитектура.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.