Цитата(dxp @ Feb 13 2006, 15:51)

Не понял - если выключили дивайс, то при включении проц все равно будет начинать с вектора сброса независимо от того, в какой точке находился в момент выключения. Другое дело, если, к примеру, при выключении какой-то внешний датчик сигнализирует, что питание пропало и у проца есть время зафиксировать место выполнения программы в энергонезависимой памяти. Но и тут не все просто - контекст программы все равно пропадет. Или что-то я не понял в условиях?
Все верно понимаете:
1. при выключении "запоминаем" какую критическую секцию выполняли и выполняли ее вообще.
2. По ключению разумеется "с вектора сброса независимо от того, в какой точке находился в момент выключения".
3. После начальной инициализации анализируем то, что сохранили в энергонезависимой памяти и в зависимости от того, была ли "свертка" (к примеру вырубили питание на печати документа) - идем снова на выполнение данной критической секции (печать документа с номером X) или штатный старт девайса
Еще дополнительная информация, которую мне немешало бы указать еще в начальном посте.
1. Проц MSP430F449
2. "Выключение" питания по кнопке - просто уход проца в LPM3. Соответсвенно при рестарте содержимое переменных в ОЗУ в сегменте DATA16_N не теряется от предыдущего сеанса работы.
Просто нужно корректно вернуться даже не точно в ту ассемблерную команду, на которую указывал SP перед срабатыванием перерывания по кнопке, а на начало критической секции, начинающейся к примеру с метки GLOBAL_LABEL в func1