adnega 11 7 июня, 2019 Опубликовано 7 июня, 2019 · Жалоба 1 час назад, haker_fox сказал: Который, скажем из-за выхода из строя какой-то периферии, стал циклически перезагружаться вотчдогом. У МК есть статусный регистр с указанием источника перезагрузки. Если у вас 10 перезагрузок от IWDT, то это можно программно определить. Есть флаги перезагрузки по пину RESET и подаче питания POR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 7 июня, 2019 Опубликовано 7 июня, 2019 · Жалоба 3 часа назад, haker_fox сказал: Я имел в виду не отладку на столе, а прибор. Который, скажем из-за выхода из строя какой-то периферии, стал циклически перезагружаться вотчдогом. Т.е. запускается, делает какие-то действия, перезагружается, снова выполяет действия и т.д. Т.е. цикл "старт устройства, перезагрузка" и так до бесконечности может быть нежелателен. Ведь до перезагрузки прибор может начать выполнять какие-то действия, например, закрывать задвижку на газопроводе. Так если работа программы возможна без этой периферии, то пишите её драйвер так, чтобы программа не висла. Ведь WDT срабатывает при зависании ПО, а не периферии. PS: Мне в одном из устройств по ТЗ необходима была замена LCD на "горячую". При том что LCD был подключен по I2C и всё время обновлялся. И ничего - реализовал. И даже можно менять на LCD другого типа (сегментного на графический и наоборот) на ходу и без перезагрузки. И ничего не виснет. В другом девайсе вис кодек, подключенный по I2C и I2S. Вис изредка, из-за воздействия помех. Схемотехнически побороть не удалось. Тоже сделал периодический опрос состояния и сброс через ключ на питание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Baranov 1 7 июня, 2019 Опубликовано 7 июня, 2019 · Жалоба 3 hours ago, haker_fox said: ... а прибор. Который, скажем из-за выхода из строя какой-то периферии, стал циклически перезагружаться вотчдогом. IMHO, так не должно быть. Никакой выход из строя периферии не должен приводить к таким последствиям. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 7 июня, 2019 Опубликовано 7 июня, 2019 · Жалоба 4 часа назад, haker_fox сказал: Написать программу "маэйнлупом", без прерываний по поллингу, и, я думаю, будет работать... Гы У меня самописный кооперативный планировщик, который я однажды уже представлял на обзор любым заинтересованным Глюков замечено не было... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 7 июня, 2019 Опубликовано 7 июня, 2019 · Жалоба 5 hours ago, aaarrr said: Сохраняйте состояние в RAM, принимайте решение по восстановлению после сброса. Да, точно! А ведь простое решение я сразу и не увидел. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 7 июня, 2019 Опубликовано 7 июня, 2019 · Жалоба 2 hours ago, Aleksandr Baranov said: IMHO, так не должно быть. Никакой выход из строя периферии не должен приводить к таким последствиям. Ну "не должен" это в теории. На практике я наблюдал совершенно иные результаты. Конечно они были из-за некачественно написанного ПО. Но всё же. Суть-то вопроса не в этом. 1 hour ago, Arlleex said: Глюков замечено не было... Тем более! Тогда вместо какой-нить pca9543 самое милое дело поставить маленький cortex-m0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 173 7 июня, 2019 Опубликовано 7 июня, 2019 · Жалоба 3 часа назад, jcxz сказал: PS: Мне в одном из устройств по ТЗ необходима была замена LCD на "горячую"... Просто интереса ради - а чего за девайс такой, что вандально дисплей приходилось отдирать? Могу предположить только, что это был некий стенд для проверки тех самых дисплеев. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 7 июня, 2019 Опубликовано 7 июня, 2019 · Жалоба 29 минут назад, Arlleex сказал: Просто интереса ради - а чего за девайс такой, что вандально дисплей приходилось отдирать? Могу предположить только, что это был некий стенд для проверки тех самых дисплеев. Нет. Счётчик электроэнергии. Но Вы были близки к истине: На сколько помню - это было нужно для технологического прогона счётчиков на стенде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 48 7 июня, 2019 Опубликовано 7 июня, 2019 · Жалоба 7 часов назад, haker_fox сказал: Написать программу "маэйнлупом", без прерываний по поллингу, и, я думаю, будет работать. Единственное, нужно тщательно тестировать. Но и, на всякий случай, завести ножки программирования этого простого МК к "большому брату". чтобы иметь возможность перепрограммировать его. Никогда не делал никаких удаленных обновлений и не буду, ибо стараюсь разделить задачи для МК, которые не надо будет никогда обновлять (тривиальные операции, расширители портов и стандартные интерфейсы) и основной МК, который грузится с СД карты и прошивка и вспомогательные файлы - все на карте. Обновить ПО простым копированием на любом компе, и бэкап сделать можно аналогично... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 7 июня, 2019 Опубликовано 7 июня, 2019 · Жалоба 4 часа назад, haker_fox сказал: Да, точно! А ведь простое решение я сразу и не увидел. Спасибо! А можете описать это решение? По-моему, ОЗУ никак не поможет определить был это сброс по питанию, внешнему сигналу RESET или watchdog`у. Чем биты регистра RCC->CSR не угодили? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 8 июня, 2019 Опубликовано 8 июня, 2019 · Жалоба 6 hours ago, adnega said: А можете описать это решение? В устройствах, которыми я занимаюсь, есть часы реального времени и немного байт ОЗУ, которое питается от батарейки. Мы можем в регистрах МК узнать причину сброса и записать эту причину с отметкой времени. Если с момента времени предыдущей загрузки прошло менее, чем N сек, то можно заблокировать себя в вечном чикле. Или поступить более сурово: запустить схему crowbar, которая пережгёт предохранитель и обесточит нас гарантированно. Алгоритм можно усложнить, и анализировать, к примеру, не только время от предыдущей загрузки но и то, была ли она успешной, сколько раз мы уже перезагрузились на отрезке времени K сек и т.д. и т.п. Тут, естественно, есть нюансы. Если это часы на шине I2C, то нужно на момент загрузки иметь рабочий драйвер. Если это МК типа LPC4337, то пара сотен байт у нус висит прямо на внутренней шине, и сразу готова к использованию. В принципе, если это только перезагрузка, то мы можем использовать обычную ОЗУ внутри МК. Её значение не измениться, если это будет секция __no_init. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 48 8 июня, 2019 Опубликовано 8 июня, 2019 · Жалоба 4 часа назад, haker_fox сказал: Или поступить более сурово: запустить схему crowbar, которая пережгёт предохранитель и обесточит нас гарантированно. Алгоритм можно усложнить, и анализировать, к... Да, действительно сурово... Неужели проблема с этими перезагрузками так актуальна и требуется такое "оперативное вмешательство"?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 8 июня, 2019 Опубликовано 8 июня, 2019 · Жалоба Just now, mantech said: Да, действительно сурово... Неужели проблема с этими перезагрузками так актуальна и требуется такое "оперативное вмешательство"?? Нет, я это уже в качестве примера привёл))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Михась 2 10 июня, 2019 Опубликовано 10 июня, 2019 · Жалоба Сейчас понял что этим двуядерникам нехватает - еще одного ядра М0! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 10 июня, 2019 Опубликовано 10 июня, 2019 · Жалоба 8 minutes ago, Михась said: Сейчас понял что этим двуядерникам нехватает - еще одного ядра М0! Всегда говорил, и буду говорить: не хватает маленькой cpld на этом же кристалле, абсолютно независимой от МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться