ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1433971 Топик полностью
Nikolay_Po (09.05.2024 19:16, просмотров: 154) ответил Mty1 на Коллеги, у меня вопрос по обработке ошибок в приборе на stm32f4. Есть DMA i2c UART ADC плюс обработка ошибок от внешних стробов. Как грамотно построить обработчик ошибок, чтобы отслеживать проблемы скажем с записью в eeprom, инициализацию DMA и UART итп. Плюс при штатной работе программы обрабатывать ошибки от внешних сигналов - нештатная работа управляемого оборудования. Возможно писать проблемы в небольшой лог в eeprom - пока думаю над этим. Не могу понять как это
Есть две функции, ErrorSet() и ErrorClear(). По обнаружению ошибки, вызывается функция установки сигнала ошибки, которая взводит бит этой ошибки в общем регистре (слове, массиве) зафиксированных ошибок и снимает бит в регистре сброшенных ошибок. 

По устранению аварийного состояния, вызов функции ErrorClear() не трогает бит ошибки в регистре зафиксированных, но взводит бит в той же позиции, в регистре сброшенных ошибок.

А в фоне, допустим, в цикле конечного автомата EEPROM, крутится обработчик сообщений об ошибках, который начинает проверку изменений с самых приоритетных ошибок (с края регистра). Если есть бит фиксации, то производится запись сообщения об ошибке. Если есть бит сброса ошибки, и появление ошибки уже записано, то в журнал записывается факт отмены ошибки и оба бита в регистрах фиксации и отмены - сбрасываются.

Датировка ошибок, доступ на чтение - по вкусу.

P.S. Функции ErrorSet и ErrorClear должны быть защищены от прерываний и, в идеале, многовходовыми (как будет re-entrable по-русски?).