[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Например имеем С51 типа T89C51RD2, 2 уровня и надцать приоритетов прерываний, большая прога (скажем кило так 47), внешнее ОЗУ и часы-календарь, внешний сторож 1 с. Допустим, спим (айдл), ждём прерывания по часам, по питанию бежит крутая помеха и портит внешнее ОЗУ, сбивает часы и всем становится хорошо;) Соответственно, сторож нас дёрнет, если раньше не дёрнет календарь. Пусть дёрнул календарь, обработчик от великого удовольствия сбрОсил сторож, проверил какие-то (явно не все) переменные и с чувством выполненного долга увёл нас в айдл. Когда прошло заданное время, начинаем, например, делать (якобы) выпав в основное тело какие-нибудь дела, но счётчик адреса команд слететь тоже успел и в теле висим в невообразимом цикле. И тут откуда ни возьмись появилось прерывание часов - влетаем, сбрасываем сторож и уходим в айдл. Психоз налицо. С прерыванием по внутреннему таймеру и внутреннему сторожу аналогичная ситуация, только снаружи не очень заметишь;-) Приходится не ставить в обработчики прерываний сброс сторожа, и это правильно;-)
E-mail: info@telesys.ru