как реализовать самодиагностику

vde69
Offline
Зарегистрирован: 10.01.2016

в инете полно примеров когда контроллер вешается из-за проблем с i2c (и не только),

Какие вообще есть подходы к самодиагностики?

Мне на ум приходит только такой: выводим диод и он должен моргать когда программа работает в цикле, в паралель с диодом может стоять например NANO и она отслеживает, если она видит, что цикл не работает - то например отключает какое-то реле, или включает зуммер и т.д.

 

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

я везде леплю alive светодиод, который коротко моргает(50мс) с периодом 5 секунд 

inspiritus
Offline
Зарегистрирован: 17.12.2012

У меня радом с основным мк живет тинька, которая моргает при каждом ресете, а если ее не отресетить, то через 5 минут она ресетит основной мк , ну и саморесетится тоже.

оказалось проще и дешевле, чем 555.

sadman41
Offline
Зарегистрирован: 19.10.2016

По ватчдогу, вроде как, не только можно ребутить МК, но и ногой дёрнуть.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Смотря по чьему вачдогу. На есп собака ващще никакая.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Предложу идейку: на любом свободном векторе прерывания от любого таймера делаешь простейшую процедуру анализа стэка. Напомню, кто не знает, при входе в прерывание на верхушке стэка находится адрес возврата из вектора прерывания. При зависании программы и, если разрешены прерывания, вектор возврата будет находится в примерно одной локации. Это просто пример а не руководство к действию.

 

Ну и WDT - если с ним уметь работать - можно прямо в векторе RESET (естественно, перехватив его) анализировать, откуда пришёл сигнал и делать соответствующие действия.    (если "уметь" - то можно сделать так, что при нажатии на кнопку ресет ВООБЩЕ ничего меняться, визуально, не будет)

Всё зависит от "умения" )))

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

-NMi- а если зациклится предварительно запретив прерывания ?

-NMi-
Offline
Зарегистрирован: 20.08.2018

Komandir пишет:

-NMi- а если зациклится предварительно запретив прерывания ?

Хороший вопрос !

Вот, жеж, специально жеж написал про прерывания и вот-те-нате-вынЪте :))

СМОТРИ, если это AVR - тогда только WDT тебе в помощь (штука оОочень сильная) ,,, А ежли это STM32 - то там уже всё гораздо интереснее, втч. связанное и с моим ником :))

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

inspiritus пишет:

Смотря по чьему вачдогу. На есп собака ващще никакая.

Уточняйте на какой ESP. Если 32, то собака там всем собакам собака, кроме того можно запустить пару процесов на разных ядрах, которые будут проверять друг друга и ресетить если что не так. Причем в этом случае можно и данные в RTC сохранять.  

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

brokly пишет:

inspiritus пишет:

Смотря по чьему вачдогу. На есп собака ващще никакая.

Уточняйте на какой ESP. Если 32, то собака там всем собакам собака, кроме того можно запустить пару процесов на разных ядрах, которые будут проверять друг друга и ресетить если что не так. Причем в этом случае можно и данные в RTC сохранять.  

а вот если бы озвучил эту тему более подробно, с примерами, народ был бы благодарен... как минимум я )))

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

ua6em пишет:

а вот если бы озвучил эту тему более подробно, с примерами, народ был бы благодарен... как минимум я )))

+1

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Из меня учитель никакой :( Вся информация доступна. На конкретные вопросы готов ответить. Я с глубоким уважением отношусь к коллегам которые могут позволить себе учить других, я не считаю себя вправе этим заниматься, ну не педогог :(

-NMi-
Offline
Зарегистрирован: 20.08.2018

brokly пишет:

На конкретные вопросы готов ответить.

Мошт запилим канал в постограмм/ваццйопт/зелло/выйбер(нихачу)

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Зачем ? Здесь и отвечу. Или в любом другом месте форума.

rkit
Offline
Зарегистрирован: 23.11.2016

А развести i2c так, чтобы проблем не было - не вариант совсем? Или, может быть, написать код, который корректно обрабатывает ошибки i2c вместо кривой ардуино-реализации?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Не думаю что проблема именно с i2c - у меня в авто круиз-контроль сделан и там два i2c одновременно работают (один к OLED на 50 см проводах без экрана, второй к ЦАП (рядом с МК, но от цап 70 см до педали акселератора ). Ни разу не было зависаний тьфу тьфу тьфу.

Надо делать надежное питание !

vde69
Offline
Зарегистрирован: 10.01.2016

Проблемы могут возникнуть неожиданно, например сдохший жучек. Или капля конденсата...
Да мало ли чего...

К примеру если i2s контакт просто замкнуть на землю