ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
467177 Топик полностью
fk0, легенда (25.11.2013 13:43 - 13:56, просмотров: 389) ответил koyodza на на телесистемах когда-то обсуждали удобство сброса wdt в прерываниях. Может кто-то из местных наоутсорсил :=)
Искусство сброса WDT... Где его сбрасывать? Я пришёл к тому, что нужно два WDT. Один софтовый. Сбрасывается как обычный (из некого "процесса" работающего на равне с остальными, сброс через заданные промежутки времени). И сам сбрасывает уже аппаратный WDT при каждом сбросе. Причём последний сбрасывается с условием "не чаще чем" (иначе сразу abort) и не напрямую, а с выставлением флажка, который проверяется в idle-функции, где засыпает cpu, если ему нечего делать. И тут же проверяется WDT overflow флаг (аппаратный) при пробуждении (pic18, pic24). Смысл в том, что софтовый WDT даёт распечатку стека, где зависли. А остальное -- единственный более-менее приемлемый вариант, остальные имеют недостатки позволяющие зависнуть. Варианты: 1) запретил прерывания (программа работает, wdt сбрасывается, но на самом деле ничего не работает и время не идёт); 2) while (!ready) clear_wdt(); 3) while (!ready) sleep();
[ZX]