реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Код работает только с дебагером
Jenya7
сообщение Jun 21 2018, 05:53
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Подключаю J-LINK. Нажал Download and Debug - все бежит, все работает. Остановливаю дебагер. Выключил - включил напряжение - запускаю без дебагера - плата мертвая.Я даже не могу понять в чем проблема - плата не реагирует на команды с терминала, не высвечивает инфу на дисплее.Как с этой бедой бороться?
Go to the top of the page
 
+Quote Post
Pat
сообщение Jun 21 2018, 06:59
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



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


А Вы установили в Options->Debugger->Setup->Driver=J-Link/J-Trace ?просто легко можно код в симуляции запустить
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 21 2018, 08:06
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



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

установил конечно. в симуляции он падает на обращениях к аппаратной периферии.
Go to the top of the page
 
+Quote Post
Pat
сообщение Jun 21 2018, 08:58
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



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


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

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


Go to the top of the page
 
+Quote Post
Nixon
сообщение Jun 21 2018, 09:14
Сообщение #5


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



https://www.iar.com/support/tech-notes/debu...un-stand-alone/


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 21 2018, 09:41
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



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

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

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


Цитата(Nixon @ Jun 21 2018, 14:14) *

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

Все работало прекрасно. Вдруг произошла такая беда.
Я думал из за того что перевел формирование задержек с таймера на 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;

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

Сообщение отредактировал Jenya7 - Jun 21 2018, 09:46
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 12:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01453 секунд с 7
ELECTRONIX ©2004-2016