-
- Есть две функции, ErrorSet() и ErrorClear(). По обнаружению ошибки,
вызывается функция установки сигнала ошибки, которая взводит бит
этой ошибки в общем регистре (слове, массиве) зафиксированных
ошибок и снимает бит в регистре сброшенных ошибок. Nikolay_Po(768 знак., 09.05.2024 19:16)
- Спасибо, отличный алгоритм, обдумаю! А что прописать в
Error_Handler() для ошибок которые не должны возникать, но вдруг в
железе пойдет что то не так? - Mty1(09.05.2024 20:55)
- В принципе, в журнал можно писать просто порядковый номер, время изменения состояния и значения обоих регистра ошибок - установки и снятия. Так можно будет восстановить хронологию всех ошибок разом. - Nikolay_Po(09.05.2024 22:17)
- Писать в журнал "Generic hardware error". Если прямо совсем-совсем
не должны - то сброс по сторожевому таймеру делать. ХЗ, что
случилось и, для надёжности, лучше перезапуститься. - Nikolay_Po(09.05.2024 22:10)
- Да. точно, лучше перезапуститься. Еще разберуть с функцией
assert_failed() - чтобы номер строки и файла писать, прада не
уверен что в рабочей прошивке стоит это использовать. - Mty1(11.05.2024 09:43)
- Я видел, многие серьёзные продукты - пишут. Это не слишком опасно,
исходники всё равно ведь не публикуете. В худшем случае узнают, что
у вас в проекте была пара файлов с такими-то именами. И что размер
у них не менее zzz строк. Зато при пусконаладках и в период
излечения "детских болезней", поддержка сможет получить
исчерпывающую информацию об источнике ошибки. - Nikolay_Po(13.05.2024 15:34)
- Благодарю. надеюсь это не сильно раздует код (и не замедлит). Включу на обкатке. - Mty1(13.05.2024 18:16)
- Я видел, многие серьёзные продукты - пишут. Это не слишком опасно,
исходники всё равно ведь не публикуете. В худшем случае узнают, что
у вас в проекте была пара файлов с такими-то именами. И что размер
у них не менее zzz строк. Зато при пусконаладках и в период
излечения "детских болезней", поддержка сможет получить
исчерпывающую информацию об источнике ошибки. - Nikolay_Po(13.05.2024 15:34)
- Да. точно, лучше перезапуститься. Еще разберуть с функцией
assert_failed() - чтобы номер строки и файла писать, прада не
уверен что в рабочей прошивке стоит это использовать. - Mty1(11.05.2024 09:43)
- Спасибо, отличный алгоритм, обдумаю! А что прописать в
Error_Handler() для ошибок которые не должны возникать, но вдруг в
железе пойдет что то не так? - Mty1(09.05.2024 20:55)
- Ковыряю дизасм от небольшой автомобильной прошивки. Там запись
критичных значений в eeprom происходит с резервированием в три
копии. При записи - проверяется корректность записи, при чтении -
поиск и восстановление одиночного сбоя. Программа ведет постоянную
проверку на наличие сбоев. Постоянно идет вычитывание "троек" из
EEPROM, постоянно идет пересчет КС прошивки, постоянно идет
тестирование RAM (гасим прерывания, проверяем корректность
резервной области памяти путем pavel2000(703 знак., 09.05.2024 17:27)
- А EEPROM при этом один? - RxTx(09.05.2024 19:16)
- Встроенный в STM8AF6266. Как я понимаю прошивку, запись туда
происходит на каждый чих. ) - pavel2000(09.05.2024 19:42)
- Может быть. А оно чем управляет? Дворниками или опуском стекла? :-) - RxTx(09.05.2024 19:52)
- Замком механической блокировки руля в бесключевой машине (с кнопкой "старт-стоп"). - pavel2000(09.05.2024 21:00)
- Может быть. А оно чем управляет? Дворниками или опуском стекла? :-) - RxTx(09.05.2024 19:52)
- Встроенный в STM8AF6266. Как я понимаю прошивку, запись туда
происходит на каждый чих. ) - pavel2000(09.05.2024 19:42)
- У Микрочипа есть АН с описанием такого стандарта. Реальность жестче, приходит сокурсник с полностью выгоревшей платой, у него автосервис, и говорит, а здесь управление каром полностью поменять можно? Ну пару раз сделал на ПИК, потом и ему и мне это надоело. Там еще и с батареями прикол, у одного 60 В, у другого 90 В. - Visitor(09.05.2024 17:50)
- А EEPROM при этом один? - RxTx(09.05.2024 19:16)
- Вы определитесь, вам нужен журнал ошибок на время отладки ПО или
это штатный инструмент в вашем firmware будет? Второе лично мне не
совсем понятно - зачем выпускать ПО с ошибками? - reZident(09.05.2024 16:33)
- Это штатный инструмент в процессе работы. Думаете стоит забить на
все коды возвратов от HAL вызовов ? - Mty1(09.05.2024 16:36)
- Ответьте для себя на пару вопросов: 1. Что должно произойти (с
программой, с прибором) при обнаружении ошибки? 2. Как запись об
ошибке повлияет на функционирование прибора? Если ответ: "никак"
(не повлияет, это чисто информационная запись), то пишите так, как
вам удобнее. Например, в микрокомпьютерах типа Raspberry Pi, Banana
Pi под консоль просто выделен один UART, куда выводится вся
отладочная информация. - reZident(09.05.2024 17:37)
- Да, вариант. Но счет отдельного UART интересно. - Mty1(09.05.2024 21:46)
- Ответьте для себя на пару вопросов: 1. Что должно произойти (с
программой, с прибором) при обнаружении ошибки? 2. Как запись об
ошибке повлияет на функционирование прибора? Если ответ: "никак"
(не повлияет, это чисто информационная запись), то пишите так, как
вам удобнее. Например, в микрокомпьютерах типа Raspberry Pi, Banana
Pi под консоль просто выделен один UART, куда выводится вся
отладочная информация. - reZident(09.05.2024 17:37)
- Это штатный инструмент в процессе работы. Думаете стоит забить на
все коды возвратов от HAL вызовов ? - Mty1(09.05.2024 16:36)
- Есть две функции, ErrorSet() и ErrorClear(). По обнаружению ошибки,
вызывается функция установки сигнала ошибки, которая взводит бит
этой ошибки в общем регистре (слове, массиве) зафиксированных
ошибок и снимает бит в регистре сброшенных ошибок. Nikolay_Po(768 знак., 09.05.2024 19:16)