Многие примеры программ для MSP430 имеют первую строку:
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
Почему они это делают?
Сторожевой таймер (WDT) включен по умолчанию, его полезно иметь в более сложных приложениях, но он сбивает с толку новых людей. Они часто не будут обслуживать WDT в своем коде или включать в себя процедуру обработки прерываний (ISR) для обработки события WDT, поэтому, когда их чип продолжает сбрасываться, они очень расстраиваются. Кроме того, примеры программ, по большей части, не пытаются продемонстрировать WDT, поэтому он отключен.
Редактировать: сторожевой таймер можно было бы назвать «переключатель мертвецов». По умолчанию он сбрасывает микроконтроллер, если только прошивка периодически не сообщает, что все работает нормально. Это называется «кормить собаку» или «пнуть собаку». Таким образом, если ваша прошивка застрянет в цикле или иным образом перестанет работать должным образом, сторожевой таймер не будет питаться и сбросит микросхему (надеюсь, в свежее рабочее состояние).
Вы также можете использовать WDT как периодическое прерывание для выполнения других задач, что вы только можете себе представить. Вам просто нужно написать соответствующий ISR.
В дополнение к замечанию Сэмюэля о людях, случайно отключивших WDT, существует еще одна важная причина, по которой он должен быть отключен изначально.
Даже если ваше приложение обычно способно правильно сбросить таймер, оно может не справиться с этим во время кода инициализации по двум причинам:
В результате рекомендуется отключить WDT как первое, что вы делаете, даже если вы никогда его не включали .
Если вы хотите использовать его, вы можете снова включить его непосредственно перед включением прерываний, как последний шаг вашего кода инициализации.
источник
int _system_pre_init(void)
функцию, которая выполняется раньшеmain