-
- Процессор "зависнуть" НЕ МОЖЕТ. Он всё время исполняет инструкции одну за одной. Или выполняет специальную инструкцию HALT и ждёт прерывания. Соответственно нужен ватчдог, срабатывающий с прерыванием и распечатка (например в UART) стек (и fk0(87 знак., 09.08.2019 22:26)
- Оно понятно, я забыл спрятать в кавычки "зависло", подключен отладчик через JTAG. Вчера попал в ловушку по HardFault, еще не анализировали. - Make_Pic(10.08.2019 07:13)
- В "HardFault" должна быть не "ловушка", а минимальный обработчик способный выдать куда-то (записать в память, передать по каналу связи) диагностическую информацию и ПЕРЕЗАПУСТИТЬ программу. Если у тебя этого не сделано -- то не морочьте голову, fk0(99 знак., 10.08.2019 12:36)
- Ловушкой я назвал установленный брейк в HardFault_Handler. А отладчика мало(сеггеровский J-Link)? - Make_Pic(10.08.2019 15:58 - 16:04)
- В "HardFault" должна быть не "ловушка", а минимальный обработчик способный выдать куда-то (записать в память, передать по каналу связи) диагностическую информацию и ПЕРЕЗАПУСТИТЬ программу. Если у тебя этого не сделано -- то не морочьте голову, fk0(99 знак., 10.08.2019 12:36)
- Оно понятно, я забыл спрятать в кавычки "зависло", подключен отладчик через JTAG. Вчера попал в ловушку по HardFault, еще не анализировали. - Make_Pic(10.08.2019 07:13)
- Использую UART если имеется свободный. Если нет, то встроенный в JLink. И в каждой функции выводишь в UART название этой функции или порядковый номер. В результате на PC в терминале всё видно - бомж(09.08.2019 22:14)
- Спасибо! Это мысль... - Make_Pic(10.08.2019 07:25)
- Стыдно признаться, но однажды вываливался в Hardfault когда обращался к неинициализированому указателю. Типа: бомж(83 знак., 10.08.2019 13:34)
- Ну раз все решили каяться. То я тоже покаюсь. Грешен. Когда для подпрограммы обработки прерывания не был указан вектор. - Sl(10.08.2019 17:35)
- У меня исключительно от космических лучей. - SciFi(10.08.2019 17:48)
- Хуже, когда наоборот - вектор указан, а обработчика нет :)) - MBedder(10.08.2019 17:47)
- Вот вектор у меня и жил своей собственной насыщенной жизнью а подпрограмма своей :) - Sl(10.08.2019 18:59)
- А мне не стыдно признаться, что типичной ошибкой является обращение к невключенной периферии. - VLLV(10.08.2019 13:40)
- Ну раз все решили каяться. То я тоже покаюсь. Грешен. Когда для подпрограммы обработки прерывания не был указан вектор. - Sl(10.08.2019 17:35)
- Стыдно признаться, но однажды вываливался в Hardfault когда обращался к неинициализированому указателю. Типа: бомж(83 знак., 10.08.2019 13:34)
- Спасибо! Это мысль... - Make_Pic(10.08.2019 07:25)
- Включен ли watchdog? Виснет на столе или "в полях"? Если "в полях", то имеется ли свободный флеш? Что понапихано в неиспользуемые вектора прерываний и исключений? Эффективно поставить заглушку прерываний/исключений, которая будет сохранять fault LightElf(278 знак., 09.08.2019 19:05)
- Началось все с того, что поставили в надежность на испытания, там и заметили сброс по WDT, потом его отключили для поиска петли. Выяснилось, что "на столе" виснет, но значительно реже. Вроде бы аппаратная природа зависона, но дальнейшее Make_Pic(68 знак., 10.08.2019 07:24)
- Моя практика говорит, что глючит питание. Symbions(374 знак., 11.08.2019 09:14)
- Ну тады надо начать с того, что именно у вас прописано в вектора исключений и в неиспользуемые вектора прерываний. Туда часто впихивают что-то типа LightElf(1536 знак., 10.08.2019 14:28 - 14:31)
- Началось все с того, что поставили в надежность на испытания, там и заметили сброс по WDT, потом его отключили для поиска петли. Выяснилось, что "на столе" виснет, но значительно реже. Вроде бы аппаратная природа зависона, но дальнейшее Make_Pic(68 знак., 10.08.2019 07:24)
- Нужно бы указать "вид" зависания. misyachniy(419 знак., 09.08.2019 16:36)
- Вид зависания невозможно определить. Очень редкий, вот и хотелось добавить какой то свой обработчик в код, чтобы определить вид и причину. - Make_Pic(09.08.2019 16:47)
- Помимо прочего при нормальном программировании всегда делается какой-то "логгер" ведущий протокол работы программы. Потому, что когда она грохнется не всегда уже можно понять почему. И этот протокол должен выводиться или в какой-либо интерфейс fk0(863 знак., 10.08.2019 12:43)
- Ну есть же примеры разбора регистров в прерывании по hard fault, в результате можно найти кокретный адрес сбоя. Не привожу, потому что ни разу не использовал, хотя в коде есть. - VLLV(10.08.2019 11:15)
- Гораздо приятнее с внутрисхемным отладчиком. Собрать прошивку без оптимизации, там будут видны все переменные. - SciFi(10.08.2019 11:40)
- Под отладчиком и стек вызовов виден. - VLLV(10.08.2019 12:49)
- Но без оптимизации она и работать может без сбоев. - fk0(10.08.2019 12:37)
- "> Optimization OFF". There, I fixed it! - SciFi(10.08.2019 13:50)
- Гораздо приятнее с внутрисхемным отладчиком. Собрать прошивку без оптимизации, там будут видны все переменные. - SciFi(10.08.2019 11:40)
- Можно попытаться нащупать факторы, увеличивающие частоту сбоев. Если удаётся воспроизводить глюк быстро - полдела сделано. - SciFi(09.08.2019 16:48)
- Пока это не удается. :( - Make_Pic(10.08.2019 07:26)
- Может, банально железо? Рашпиль пробовали? - VLLV(10.08.2019 11:17)
- Первоисточник --> fk0(10.08.2019 13:08)
- Батарея - это для слабаков. 230! - VLLV(10.08.2019 13:19)
- Первоисточник --> fk0(10.08.2019 13:08)
- Может, банально железо? Рашпиль пробовали? - VLLV(10.08.2019 11:17)
- Пока это не удается. :( - Make_Pic(10.08.2019 07:26)
- Вид зависания невозможно определить. Очень редкий, вот и хотелось добавить какой то свой обработчик в код, чтобы определить вид и причину. - Make_Pic(09.08.2019 16:47)
- Внутрисхемный отладчик. Ещё обработчики всяких fault, ещё assert(). Достигшие просветления могут просто посмотреть на код, потом хлопнуть себя ладонью по лбу "Семён Семёныч!" SciFi(198 знак., 09.08.2019 15:32 - 15:35)
- Не понял где эту ловушку ставить? - Make_Pic(09.08.2019 15:53)
- Я сам формирую таблицу векторов, поэтому просто втыкаю туда. Я так понимаю, обычно люди делают так: SciFi(85 знак., 09.08.2019 16:09)
- В качестве обработчика прерывания Hard Fault - AlexG(09.08.2019 16:07)
- Хотя бы так: evgeniy1294(1376 знак., 10.08.2019 12:49 - 12:55)
- Не понял где эту ловушку ставить? - Make_Pic(09.08.2019 15:53)
- Процессор "зависнуть" НЕ МОЖЕТ. Он всё время исполняет инструкции одну за одной. Или выполняет специальную инструкцию HALT и ждёт прерывания. Соответственно нужен ватчдог, срабатывающий с прерыванием и распечатка (например в UART) стек (и fk0(87 знак., 09.08.2019 22:26)