A. Fig Lee 0 15 июня, 2011 Опубликовано 15 июня, 2011 · Жалоба Дали мне проект на работе под 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 1 15 июня, 2011 Опубликовано 15 июня, 2011 · Жалоба Не факт, что корень проблемы в прерываниях. Это может быть переполнение стека, выход за границы массива, неправильно сконфигурированное железо, помехи в питании и т.д. Мой опыт показывает, что при таких непонятных глюках косвенные факты типа "тут закомментировал - больше не падает" не ведут к правильным выводам. Нужно пытаться собрать более точную информацию, приближающую к корню проблемы. Ну и бывают тяжёлые случаи. Например, глюки компилятора или процессора. Первые ещё можно отловить отладчиком. А со вторыми остаётся только надеяться, что они все описаны в Errata. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
brag 0 15 июня, 2011 Опубликовано 15 июня, 2011 · Жалоба таблицу векторов проверьте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sayberex 0 15 июня, 2011 Опубликовано 15 июня, 2011 · Жалоба И в добавок к сказанному scifi я еще дописал бы неправильные вычисления при работе с указателями когда попадаешь на access violation к примеру ну и еще наверное некорректные математические вычисления результатом коих может быть к примеру деление на ноль. А коли при вычислениях вводятся разные параметры то и ошибка вычисления может вылезать не каждый раз в коде в котором якобы ничего не менялось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 16 июня, 2011 Опубликовано 16 июня, 2011 · Жалоба Спасибо, братцы.. Обрезал почти все до начальной инициализации.. Зову SysTick_Config(), потом SCB->ICSR |= SCB_ICSR_PENDSTSET; - симулирую интеррапт - тут же вылетаю.. Как найду - сообщу результаты Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 16 июня, 2011 Опубликовано 16 июня, 2011 · Жалоба А как обработчики прерываний объявлены, extern "C" не забыли? http://electronix.ru/forum/index.php?showt...st&p=903847 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 16 июня, 2011 Опубликовано 16 июня, 2011 · Жалоба LOL! "Тупой и еще тупее".. :01: Линкер файл. В опчем, проект был из 3х частей, одна часть - бутлоадер 8к, основная часть - 56к. И вот в этой основной части в линкер файле таблица векторов была на 0х8002000 !! "Позор Виктору Перестукину!" (с) :01: brag как в воду глядел.. Первый проект на IAR, вчера только откопал где этот линкер файл лежит и как называется. Уряяяяя!!!!! :) А как обработчики прерываний объявлены, extern "C" не забыли? http://electronix.ru/forum/index.php?showt...st&p=903847 Не, там чистый "С". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться