как это не 100%, что он может не сбросится? или потом не загрузится?
Некоторые несознательные товарищи (речь не о Вас) любят сувать сброс собаки в прерывания. Тогда вполне вероятна ситуация когда основная программа висит (обычно из-за ошибки программиста, не аппаратной, вечный цикл без выхода), а прерывания щёлкают нормально и сбрасывают собаку. Или не висит, а выполняет произвольный код (сбой счётчика команд или векторный переход не туда или возврат с испорченным стеком), но в этом случайном потоке команд не попадается недопустимая команда (приводящая к останову или сбросу), а прерывания щёлкают и сбрасывают собаку ... Менее вероятно, но тоже в принципе возможна ситуация когда сброс собаки в основной программе, но происходит сбой (уже по любой причине) и программу уносит в произвольную область (где и кода может не быть, данные) и выполняет случайные команды, но теперь среди них достаточно часто попадается команда сброса собаки ...
В более продвинутых МК бывает делают достаточно узкое "окно" для сброса собаки, не просто "не реже", но и "не чаще". Программисту мороки жуть, так и хочется в прерывание поставить ... и налетают на вышесказанное.
В AVR (да и во многих других) можно включить вариант когда собака вызывает сброс лишь при втором срабатывании, а первое вызывает её родное прерывание. Типа последний шанс программе одуматься. И если в этом прерывании поставить сброс собаки ... Ну понятно, да. Правда для AVR для этого там надо ставить не просто сброс, а перенастройку собаки обратно на прерывание, это вряд ли кто додумается сделать, так что это маловероятно (кто понимает что надо перенастроить собаку тот обычно уже понимает что и зачем делает).
Ну и плюс бывают столь страшные глюки когда и собака сбивается (например сбой тактирования именно того генератора что работает и на собаку). Поэтому кстати для собаки обычно делают отдельный генератор, не отключаемый пока включена собака. И затрудняют процедуру отключения собаки (а иногда и вообще запрещают до следующего сброса, однажды включил и привет, не заткнёшь). Но ведь аппаратные глюки бывают разные ... Может и собачий RC генератор заткнуться, и собака сброситься сама по себе, и период измениться, и ... Весьма маловероятно, но полностью не исключено.
По хорошему собака,
при аккуратном применении (например не в прерывании), это лишь гарантия выхода из вечного цикла, куда программа попала по ошибке программиста. От других ошибок она защищает хуже, хотя обычно и защищает.
И да, внешняя собака заметно надёжнее. Но опять же, если её правильно сделать и правильно ей управлять (сбрасывать). Например собака в виде одновибратора (RC плюс компаратор) ненадёжна: она или вообще не сработает (если вывод МК её сброса залипнет) или поставит МК под вечный ресет и не снимет его, либо выдаст всего один импульс сброса, который может и не сбросить МК (схемотехник ошибся и поставил не тот номинал, или ошибся пайщик и впаял не то, тесты выходного ОТК ведь редко проверяют срабатывание собаки). Надёжнее делать генератор, заторможенный пока программа (самый внешний цикл в main) работает.
По встроенной собаке МК разумеется перезапустится (если собака не в режиме прерываний), с этим проблем нет.
Единственная проблема может быть если программист
чрезмерно умный и сделал определение причины сброса
и что-то напортачил со сбросом от собаки ... Бывает. МК то сбросится, не вопрос, но дальше вотчина программиста, а он ... На это чаще налетают продвинутые начинающие, которые типа "уже всё знают", но реального опыта мало. Пытаются сделать круто, но недостаток опыта мешает помнить все возможные засады и в результате ... как раз и нарабатывается нужный опыт, разной ценой.
По выводам. В AVR выводы встают в z состояние под ресетом. Исключения если и есть, то редки (и возможно лишь на отдельных старых и больших кристаллах, с 64+ ногами, их много, все не помню, но там точно были самые разные странности). Лучше конечно свериться с докой на конкретный МК (раздел IO Ports, там смотреть альтернативные функции, там есть таблицы с логическими функциями всех управляющих выводом сигналов).
Если используется программный загрузчик (как в той же ардуино или свой), то он может настраивать выводы под себя, это надо учитывать.
-- 07.12.2024, 05:28 --По встроенной собаке МК разумеется перезапустится (если собака не в режиме прерываний), с этим проблем нет.
Хотя ... Можно придумать ситуацию, вполне кстати реальную, когда и не запустится. Например с управляемой внешней кренкой (стабилизатором), которая отключается при уходе программы в спячку, для экономии тока потребления (от батареи/аккумулятора). В AVR есть такое понятие как ток потребления под ресетом и он в разы выше тока в глубокой спячке и если напортачить (схемотехнику), то может оказаться что выключенная кренка не обеспечивает достаточно тока под ресетом (и для начала работы программы) и МК из спячки от собаки свалится в brownout (вероятно навсегда, до снятия питания). И если от внешнего сброса ещё можно аппаратно включить кренку, то от внутреннего (собаки) нельзя, его снаружи не видно (без специальных мер типа выделения специального вывода под это). Проще всего лечится второй маломощной кренкой (или неким её аналогом на рассыпухе) на чуть меньшее напряжение, работающей когда выключена основная. Решение в виде увеличения кондёров по питанию чтобы их типа хватило на старт программы ненадёжно (вдруг не хватит, ёмкость упала, или это уже не первый сброс подряд или температура экстремальна). Представляете сколько всего надо помнить чтобы предусмотреть такой вариант и ещё и не забыть вписать его в контрольные тесты на производстве ...
-- 07.12.2024, 05:37 --И да, извините что лезу в дебри, тем более с серийным производством, пока оно у себя любимого на столе и управляет не пуском баллистической ракеты, можно и наплевать, а вот когда оно клепается серийно на продажу ... мороки на порядки больше. У меня бывало что контрольные тесты занимали больше времени чем пайка (и прошивка). А иногда ещё и калибровка плюсом нужна (потому что сильно дешевле схемного решения).