как реализовать самодиагностику
- Войдите на сайт для отправки комментариев
Сб, 13/03/2021 - 09:40
в инете полно примеров когда контроллер вешается из-за проблем с i2c (и не только),
Какие вообще есть подходы к самодиагностики?
Мне на ум приходит только такой: выводим диод и он должен моргать когда программа работает в цикле, в паралель с диодом может стоять например NANO и она отслеживает, если она видит, что цикл не работает - то например отключает какое-то реле, или включает зуммер и т.д.
я везде леплю alive светодиод, который коротко моргает(50мс) с периодом 5 секунд
У меня радом с основным мк живет тинька, которая моргает при каждом ресете, а если ее не отресетить, то через 5 минут она ресетит основной мк , ну и саморесетится тоже.
оказалось проще и дешевле, чем 555.
По ватчдогу, вроде как, не только можно ребутить МК, но и ногой дёрнуть.
Смотря по чьему вачдогу. На есп собака ващще никакая.
Предложу идейку: на любом свободном векторе прерывания от любого таймера делаешь простейшую процедуру анализа стэка. Напомню, кто не знает, при входе в прерывание на верхушке стэка находится адрес возврата из вектора прерывания. При зависании программы и, если разрешены прерывания, вектор возврата будет находится в примерно одной локации. Это просто пример а не руководство к действию.
Ну и WDT - если с ним уметь работать - можно прямо в векторе RESET (естественно, перехватив его) анализировать, откуда пришёл сигнал и делать соответствующие действия. (если "уметь" - то можно сделать так, что при нажатии на кнопку ресет ВООБЩЕ ничего меняться, визуально, не будет)
Всё зависит от "умения" )))
-NMi- а если зациклится предварительно запретив прерывания ?
-NMi- а если зациклится предварительно запретив прерывания ?
Хороший вопрос !
Вот, жеж, специально жеж написал про прерывания и вот-те-нате-вынЪте :))
СМОТРИ, если это AVR - тогда только WDT тебе в помощь (штука оОочень сильная) ,,, А ежли это STM32 - то там уже всё гораздо интереснее, втч. связанное и с моим ником :))
Смотря по чьему вачдогу. На есп собака ващще никакая.
Уточняйте на какой ESP. Если 32, то собака там всем собакам собака, кроме того можно запустить пару процесов на разных ядрах, которые будут проверять друг друга и ресетить если что не так. Причем в этом случае можно и данные в RTC сохранять.
Смотря по чьему вачдогу. На есп собака ващще никакая.
Уточняйте на какой ESP. Если 32, то собака там всем собакам собака, кроме того можно запустить пару процесов на разных ядрах, которые будут проверять друг друга и ресетить если что не так. Причем в этом случае можно и данные в RTC сохранять.
а вот если бы озвучил эту тему более подробно, с примерами, народ был бы благодарен... как минимум я )))
а вот если бы озвучил эту тему более подробно, с примерами, народ был бы благодарен... как минимум я )))
+1
Из меня учитель никакой :( Вся информация доступна. На конкретные вопросы готов ответить. Я с глубоким уважением отношусь к коллегам которые могут позволить себе учить других, я не считаю себя вправе этим заниматься, ну не педогог :(
На конкретные вопросы готов ответить.
Мошт запилим канал в постограмм/ваццйопт/зелло/выйбер(нихачу)
Зачем ? Здесь и отвечу. Или в любом другом месте форума.
А развести i2c так, чтобы проблем не было - не вариант совсем? Или, может быть, написать код, который корректно обрабатывает ошибки i2c вместо кривой ардуино-реализации?
Не думаю что проблема именно с i2c - у меня в авто круиз-контроль сделан и там два i2c одновременно работают (один к OLED на 50 см проводах без экрана, второй к ЦАП (рядом с МК, но от цап 70 см до педали акселератора ). Ни разу не было зависаний тьфу тьфу тьфу.
Надо делать надежное питание !
Проблемы могут возникнуть неожиданно, например сдохший жучек. Или капля конденсата...
Да мало ли чего...
К примеру если i2s контакт просто замкнуть на землю