Программирование ARM: решение проблем, FAQ Как найти ошибку в программе? Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Как найти ошибку в программе? Печать
Добавил(а) microsin   

Отладка... вечная тема, никогда не теряющая актуальности.

Arthur Gyumushyan (5:01):

Есть устройство на АТ91SAM7X128, работает с компьютером по USB. Для USB написан свой драйвер, все работает нормально. Питание тоже от USB. Проблема в том, что у микроконтроллера иногда что-то портится, и система перестает его распознавать. Он начинает определяться как Unknown Device. Помогает только Erase и перепрошивка, и то опять на некоторое время. Может есть идеи, в чем может быть проблема?

microsin (10:23):

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

1. Проверьте качество питания в системе.
2. Если используете динамическое выделение / освобождение памяти, сделайте периодическую проверку количества свободной памяти в системе и вывод этой информации (например, в DBGU, или в USB).
3. Запрограммируйте контроллер памяти на запрет модификации FLASH.
4. Запрограммируйте watchdog так, чтобы можно было определить место зависания в программе (выведите адрес зависания в DBGU).
5. Просмотрите ERRATA на Вашу версию чипа, возможно в нем есть неисправленная ошибка, на которую Вы напарываетесь. В errata часто приведены способы обхода ошибки.
6. Вычислите контрольную сумму как всего кода программы во FLASH в целом, так и поблочно. Например, блоками по 1 килобайт. При старте программы проверяйте контрольные суммы, и если они не совпадают, то выводите в диагностику, где испортилась память. Когда получите эти данные, они могут помочь понять, в чем ошибка. Вы используете память FLASH для хранения энергонезависимых данных приложения? Т. е. программа пишет во FLASH что-нибудь?

[Ссылки]

1FreeRTOS: базовые техники отладки и поиска ошибок (FAQ).
2AVR: отладочный вывод через UART (RS232 debug).
3nRF5x: отладка с помощью RTT.
4. EE-307: советы по отладке для Blackfin.
5. Keil: уровни оптимизации компилятора и отладка.
6. lwIP: вывод отладочных сообщений.

 

Добавить комментарий


Защитный код
Обновить

Top of Page