Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум разработчиков электроники ELECTRONIX.ru _ IAR _ Код работает только с дебагером

Автор: Jenya7 Jun 21 2018, 05:53

Подключаю J-LINK. Нажал Download and Debug - все бежит, все работает. Остановливаю дебагер. Выключил - включил напряжение - запускаю без дебагера - плата мертвая.Я даже не могу понять в чем проблема - плата не реагирует на команды с терминала, не высвечивает инфу на дисплее.Как с этой бедой бороться?

Автор: Pat Jun 21 2018, 06:59

Цитата(Jenya7 @ Jun 21 2018, 07:53) *
Подключаю J-LINK. Нажал Download and Debug - все бежит, все работает. Остановливаю дебагер. Выключил - включил напряжение - запускаю без дебагера - плата мертвая.Я даже не могу понять в чем проблема - плата не реагирует на команды с терминала, не высвечивает инфу на дисплее.Как с этой бедой бороться?


А Вы установили в Options->Debugger->Setup->Driver=J-Link/J-Trace ?просто легко можно код в симуляции запустить

Автор: Jenya7 Jun 21 2018, 08:06

Цитата(Pat @ Jun 21 2018, 11:59) *
А Вы установили в Options->Debugger->Setup->Driver=J-Link/J-Trace ?просто легко можно код в симуляции запустить

установил конечно. в симуляции он падает на обращениях к аппаратной периферии.

Автор: Pat Jun 21 2018, 08:58

Цитата(Jenya7 @ Jun 21 2018, 10:06) *
установил конечно. в симуляции он падает на обращениях к аппаратной периферии.


Тогда нужно искать.Проверьте откуда стартует программа в файле *.icf там же проверьте область векторов прерывания.
Далее для проверок нужен свободный вывод микроконтроллера который будет ваши монитором(Можно светодиодом моргать)
Его настраиваем как выход и пишем макросы что бы этим выводом можно было дергать.Еще нужен хотя бы осцил или простой логический анализатор тип Saleae

Я не знаю какой тип процессора используете но подозреваю что на ядре Cortex-xx.
Если так то первое, что нужно проверить это не влетает ли софт в исключения.Устанавливаем наш монитор в исключениях загружаем запускаем смотрит.
Далее есть ли фаулты или нет алгоритм отладки примерно такой.Отключаем все модули оставляем один main.Последовательно подключаем модули, мониторим на предмет работоспособности.
Где то так, но подозреваю что где то банально память переполняется и прога влетает в хард-фаулт.
Часто так бывает под дебагером все работает самостоятельно нет.



Автор: Nixon Jun 21 2018, 09:14

http://electronix.ru/redirect.php?https://www.iar.com/support/tech-notes/debugger/application-does-not-run-stand-alone/

Автор: Jenya7 Jun 21 2018, 09:41

Цитата(Pat @ Jun 21 2018, 13:58) *
Тогда нужно искать.Проверьте откуда стартует программа в файле *.icf там же проверьте область векторов прерывания.
Далее для проверок нужен свободный вывод микроконтроллера который будет ваши монитором(Можно светодиодом моргать)
Его настраиваем как выход и пишем макросы что бы этим выводом можно было дергать.Еще нужен хотя бы осцил или простой логический анализатор тип Saleae

Я не знаю какой тип процессора используете но подозреваю что на ядре Cortex-xx.
Если так то первое, что нужно проверить это не влетает ли софт в исключения.Устанавливаем наш монитор в исключениях загружаем запускаем смотрит.
Далее есть ли фаулты или нет алгоритм отладки примерно такой.Отключаем все модули оставляем один main.Последовательно подключаем модули, мониторим на предмет работоспособности.
Где то так, но подозреваю что где то банально память переполняется и прога влетает в хард-фаулт.
Часто так бывает под дебагером все работает самостоятельно нет.

у меня Кортекс-М4
Когда бежит с дебагером все работает прекрасно - никаких исключений. А как диагностировать без дебагера на мертвой плате?


Цитата(Nixon @ Jun 21 2018, 14:14) *
http://electronix.ru/redirect.php?https://www.iar.com/support/tech-notes/debugger/application-does-not-run-stand-alone/

спасибо. изучаю.

Все работало прекрасно. Вдруг произошла такая беда.
Я думал из за того что перевел формирование задержек с таймера на DWT
Код
void Delay_us(uint32_t us)
{
    uint32_t ticks = 120 * us;  //freq = 120Mhz
    DWT->CYCCNT = 0;
    DWT->CTRL = 1;
    while (DWT->CYCCNT < ticks);
    DWT->CTRL = 0;    
}

Но у меня вначале есть
Код
//enable debug timer for delay function
   CoreDebug->_DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;

так что проблем быть не должно

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)