Цитата(prottoss @ Jan 24 2007, 10:12)

Цитата(Сергей Борщ @ Jan 24 2007, 14:41)

Цитата(SasaVitebsk @ Jan 24 2007, 01:37)

я пробую так
А что мешает засыпать прямо в прерывании?
Интересно, а если заснуть в прерывании, разве может МК проснуться???
Хм. В остальных встречавшихся мне процессорах мог. Причем в зависимости от того запрещены или разрешены прерывания глобально он после выхода из спячки либо выполнял обработчик прерывания либо просто продолжал выполнение с команды после sleep. В доке на мегу8 об этом ничего не нашел кроме фразы
Цитата
If an enabled interrupt occurs while the MCU is in a sleep mode, the MCU wakes up. The MCU is then halted for four cycles in addition to the start-up time, it executes the interrupt routine, and resumes execution from the instruction following SLEEP
И если понятие "enabled interrupt" выводить как противоположность от
Цитата
If the Global Interrupt Enable bit is cleared, none of the interrupts are enabled
то выходит что при глобально запрещенных прерываниях не проснется никогда, что само по себе странно и неестественно. Надо будет проверить это на живом проце.
Однако даже это не мешает перед засыпанием запретить прерывание, в обработчике которого находимся и глобально разрешить прерывания. После выхода из спячки и исполнения разбудившего обработчика делаем обратное - запрещаем глобально и разрешаем текущее прерывание. Не забыть только что стека потребуется для обоих обработчиков - текущего и будильника.