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

STM32F - проблема с блоком прерываний

Дали мне проект на работе под STM32 Cortex M3.

Надо готовый проект - 56 килобайт обрезать, выбросить не нужное

и загнать в 32 килобайта для более дешевого чипа.

Я его пообрезал, скомпилил и запустил.

 

Запустил на STM32F10xB-EVAL плате.

В IAR смог пройти несколько шагов - вылетел на 0хFFFFFFFFE - "CPU halted"

Закоментировал USB, RTC - заработало, в смысле луп крутится в айдле.

Добавил прерывание на SysTick - вылетел.

Закоментировал луп - сделал пустой - работает.

Интересная особенность - код

if (function_return_false()) {
   call_big_function();
}

в лупе крашится (вылетает на 0х00000), хотя на call_big_function() попасть не может.

Если я меняю call_big_function() на коротенькую функцию

kick_watch_dog(), которая тоже не вызовется - все работает..

 

Никто не пхнет в правильном направлении?

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


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

Не факт, что корень проблемы в прерываниях. Это может быть переполнение стека, выход за границы массива, неправильно сконфигурированное железо, помехи в питании и т.д.

Мой опыт показывает, что при таких непонятных глюках косвенные факты типа "тут закомментировал - больше не падает" не ведут к правильным выводам. Нужно пытаться собрать более точную информацию, приближающую к корню проблемы.

Ну и бывают тяжёлые случаи. Например, глюки компилятора или процессора. Первые ещё можно отловить отладчиком. А со вторыми остаётся только надеяться, что они все описаны в Errata.

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


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

И в добавок к сказанному scifi я еще дописал бы неправильные вычисления при работе с указателями когда попадаешь на access violation к примеру ну и еще наверное некорректные математические вычисления результатом коих может быть к примеру деление на ноль. А коли при вычислениях вводятся разные параметры то и ошибка вычисления может вылезать не каждый раз в коде в котором якобы ничего не менялось.

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


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

Спасибо, братцы..

Обрезал почти все до начальной инициализации..

Зову SysTick_Config(), потом

SCB->ICSR |= SCB_ICSR_PENDSTSET; - симулирую интеррапт - тут же вылетаю..

 

Как найду - сообщу результаты

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


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

А как обработчики прерываний объявлены, extern "C" не забыли?

http://electronix.ru/forum/index.php?showt...st&p=903847

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


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

LOL!

"Тупой и еще тупее".. :01:

Линкер файл. В опчем, проект был из 3х частей,

одна часть - бутлоадер 8к, основная часть - 56к.

И вот в этой основной части в линкер файле

таблица векторов была на 0х8002000 !!

 

"Позор Виктору Перестукину!" (с) :01:

brag как в воду глядел..

Первый проект на IAR, вчера только откопал где этот линкер файл лежит и как называется.

 

Уряяяяя!!!!! :)

 

 

А как обработчики прерываний объявлены, extern "C" не забыли?

http://electronix.ru/forum/index.php?showt...st&p=903847

 

Не, там чистый "С".

 

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


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

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

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

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

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

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

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

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

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

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