Перейти к содержанию
    

Обработчики прерывания EWARM STM32

Здравствуйте! Не сталкивался ли кто со следующей проблемой: проект под EWARM 6.21 target STM32F207. Не генерится код обработчиков прерывания, т.е. при уходе в прерывание проц. упирается в соответствующий вектор и там висит. Смотрим инфу по компиляции - ф-ции обработчики не имеют кода, размера и т.д., т.е. их нет. Это происходит, если в настройках проекта указать тип языка C++. Если ставим язык С, то эти функции появляются в коде и в них передаеться управлении при соответствующем событии. Вопрос: как при использовании С++ тогда определять вектора прерывания? Где какую галку кликнуть в пректе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где какую галку кликнуть в пректе?
Не в проекте - в исходнике все обработчики должны иметь квалификатор extern "C". И не только в ИАРе.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, Сергей, помогло. А я вот глядя на примеры в стандартной библиотеки периферии от ST и не стал этого делать, а зря. Теперь найти осталось, что он при старте лезет один раз в это прерывание, хотя события еще нет подходящего :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Коллеги, у меня та же проблема - компоновщик вместо моего обработчика подсовывает дефолтный из 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;
}

post-61198-1473417481_thumb.png

Изменено пользователем stas00n

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Причем не находит только мой обработчик ADC1_COMP_IRQHandler()
А в его название, случайно, не попала одна из кириллических букв А, С, О, М, Р, Н, а, е?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в его название, случайно, не попала одна из кириллических букв А, С, О, М, Р, Н, а, е?

 

исключено, copy-paste делал и стартап-файла..

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Не один проект работал с тем стартапом, пока не понадобилось прерывание от АЦП.

 

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

 

+

startup.zip

post-61198-1473426156_thumb.png

Изменено пользователем stas00n

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно открыть Reference Manual, посмотреть номер нужного прерывания, и по номеру посмортеть как его назвали в файле .s (или другом где описаны прерывания).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...