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

 
 
 
Reply to this topicStart new topic
> Программа работает. Секунд 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
gazpar
сообщение Jan 7 2017, 10:51
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 9-01-14
Пользователь №: 79 952



Цитата(VictorR @ Jan 7 2017, 13:09) *


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

И вас с новым годом!
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 7 2017, 11:38
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



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

Сам работаю на версии 7.80.02. Сейчас занимаюсь относительно большим проектом - USB, CAN, USART на STM32F407 - вообще ни каких проблем. Библиотеками сторонними, правда не пользуюсь. Весь проект с нуля написан ручками.


--------------------
Go to the top of the page
 
+Quote Post
VictorR
сообщение Jan 7 2017, 12:19
Сообщение #4


Участник
*

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



К сожалению, работаю без отладчика, так что ответить на Ваш вопрос не могу.
Go to the top of the page
 
+Quote Post
gerber
сообщение Jan 7 2017, 13:13
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 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
adnega
сообщение Jan 7 2017, 19:20
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(gerber @ Jan 7 2017, 16:13) *
и ничто не мешает процессору осуществить повторный вход в

Если это Cortex-M, то мешает архитектура.
Go to the top of the page
 
+Quote Post

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

 


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


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