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

 
 
 
Reply to this topicStart new topic
> Обработчики прерывания EWARM STM32
MiG-3
сообщение Aug 21 2012, 05:21
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 23-01-12
Пользователь №: 69 823



Здравствуйте! Не сталкивался ли кто со следующей проблемой: проект под EWARM 6.21 target STM32F207. Не генерится код обработчиков прерывания, т.е. при уходе в прерывание проц. упирается в соответствующий вектор и там висит. Смотрим инфу по компиляции - ф-ции обработчики не имеют кода, размера и т.д., т.е. их нет. Это происходит, если в настройках проекта указать тип языка C++. Если ставим язык С, то эти функции появляются в коде и в них передаеться управлении при соответствующем событии. Вопрос: как при использовании С++ тогда определять вектора прерывания? Где какую галку кликнуть в пректе?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 21 2012, 05:25
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (MiG-3 @ Aug 21 2012, 08:21) *
Где какую галку кликнуть в пректе?
Не в проекте - в исходнике все обработчики должны иметь квалификатор extern "C". И не только в ИАРе.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MiG-3
сообщение Aug 22 2012, 07:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 23-01-12
Пользователь №: 69 823



Спасибо, Сергей, помогло. А я вот глядя на примеры в стандартной библиотеки периферии от ST и не стал этого делать, а зря. Теперь найти осталось, что он при старте лезет один раз в это прерывание, хотя события еще нет подходящего wacko.gif
Go to the top of the page
 
+Quote Post
stas00n
сообщение Sep 9 2016, 10:37
Сообщение #4


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

Группа: Участник
Сообщений: 181
Регистрация: 26-11-10
Пользователь №: 61 198



Коллеги, у меня та же проблема - компоновщик вместо моего обработчика подсовывает дефолтный из startup_stm32f0xx.s. Причем не находит только мой обработчик ADC1_COMP_IRQHandler(), другие обработчики в этом же проекте (USART1_IRQHandler, TIM14_IRQHandler) компонуются нормально. Ошибок при компиляции и компоновке не выдает. В настройках компилятора стоит С (не С++). Для эксперимента включил С++, перестали работать обработчики USART1 и TIM14, точнее стали дефолтными из стартапа, после добавления extern "C" в определении обработчиков заработали нормально, а ADC1_COMP_IRQHandler так и остался пустым... пробовал на IAR 7.2 и 7.5
Код
void ADC1_COMP_IRQHandler() // Этот обработчик не линкуется
{
  ADC1->ISR |= (ADC_ISR_EOSEQ | ADC_ISR_EOC);
}

void TIM14_IRQHandler()        // А этот линкуется
{  
  ledBlinkTimer += TIM14_PERIOD_MS;
  
  flags.displayNext = 1;

  time_ms += TIM14_PERIOD_MS;
  if((time_ms % 1000) == 0)
  {
    flags.tx = 1;
    flags.adc = 1;
  }
  
  TIM14->SR = (uint16_t)~TIM_FLAG_Update;
}


Сообщение отредактировал stas00n - Sep 9 2016, 10:38
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 9 2016, 11:37
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (stas00n @ Sep 9 2016, 13:37) *
Причем не находит только мой обработчик ADC1_COMP_IRQHandler()
А в его название, случайно, не попала одна из кириллических букв А, С, О, М, Р, Н, а, е?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
stas00n
сообщение Sep 9 2016, 11:44
Сообщение #6


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

Группа: Участник
Сообщений: 181
Регистрация: 26-11-10
Пользователь №: 61 198



Цитата(Сергей Борщ @ Sep 9 2016, 13:37) *
А в его название, случайно, не попала одна из кириллических букв А, С, О, М, Р, Н, а, е?


исключено, copy-paste делал и стартап-файла..
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 9 2016, 12:48
Сообщение #7


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Тогда остаётся косяк стартапа: возможно в нём этот обработчик не отмечен как weak.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
stas00n
сообщение Sep 9 2016, 13:03
Сообщение #8


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

Группа: Участник
Сообщений: 181
Регистрация: 26-11-10
Пользователь №: 61 198



Исключил из дерева проекта startup_stm32f0xx.s и подключил startup_stm32f030.s - у меня 030 камень. Все заработало. Причем тут этот обработчик объявлен как ADC1_IRQHandler, но работает также и если объявить в майне ADC1_COMP_IRQHandler()...
Не один проект работал с тем стартапом, пока не понадобилось прерывание от АЦП.

прикрепил файлы стартапа

+

Сообщение отредактировал stas00n - Sep 9 2016, 12:59
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  startup.zip ( 4.89 килобайт ) Кол-во скачиваний: 7
 
Go to the top of the page
 
+Quote Post
x893
сообщение Sep 9 2016, 13:05
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Можно открыть Reference Manual, посмотреть номер нужного прерывания, и по номеру посмортеть как его назвали в файле .s (или другом где описаны прерывания).
Go to the top of the page
 
+Quote Post

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

 


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


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