Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F - проблема с блоком прерываний
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
A. Fig Lee
Дали мне проект на работе под 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(), которая тоже не вызовется - все работает..

Никто не пхнет в правильном направлении?
scifi
Не факт, что корень проблемы в прерываниях. Это может быть переполнение стека, выход за границы массива, неправильно сконфигурированное железо, помехи в питании и т.д.
Мой опыт показывает, что при таких непонятных глюках косвенные факты типа "тут закомментировал - больше не падает" не ведут к правильным выводам. Нужно пытаться собрать более точную информацию, приближающую к корню проблемы.
Ну и бывают тяжёлые случаи. Например, глюки компилятора или процессора. Первые ещё можно отловить отладчиком. А со вторыми остаётся только надеяться, что они все описаны в Errata.
brag
таблицу векторов проверьте
sayberex
И в добавок к сказанному scifi я еще дописал бы неправильные вычисления при работе с указателями когда попадаешь на access violation к примеру ну и еще наверное некорректные математические вычисления результатом коих может быть к примеру деление на ноль. А коли при вычислениях вводятся разные параметры то и ошибка вычисления может вылезать не каждый раз в коде в котором якобы ничего не менялось.
A. Fig Lee
Спасибо, братцы..
Обрезал почти все до начальной инициализации..
Зову SysTick_Config(), потом
SCB->ICSR |= SCB_ICSR_PENDSTSET; - симулирую интеррапт - тут же вылетаю..

Как найду - сообщу результаты
SSerge
А как обработчики прерываний объявлены, extern "C" не забыли?
http://electronix.ru/forum/index.php?showt...st&p=903847
A. Fig Lee
LOL!
"Тупой и еще тупее".. 01.gif
Линкер файл. В опчем, проект был из 3х частей,
одна часть - бутлоадер 8к, основная часть - 56к.
И вот в этой основной части в линкер файле
таблица векторов была на 0х8002000 !!

"Позор Виктору Перестукину!" (с) 01.gif
brag как в воду глядел..
Первый проект на IAR, вчера только откопал где этот линкер файл лежит и как называется.

Уряяяяя!!!!! sm.gif


Цитата(SSerge @ Jun 16 2011, 09:15) *
А как обработчики прерываний объявлены, extern "C" не забыли?
http://electronix.ru/forum/index.php?showt...st&p=903847


Не, там чистый "С".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.