ReAl (06.02.2008 15:22, просмотров: 69) ответил AMD на Еще проблема в том, что 128КБ кода построено так, что необходимо восстановление регистров, стеков (RSTACK, CSTACK) и счетчика комманд, т.е. состояние один в один как было при потере питания(но разве что обмен по I2C,Uart, SPI не восстановить)
"построено так" :-( ... Плохо. Ну сохранили/восстановили всё, включая 4К внутренней памяти и продолжаем, например, ждать конца перезаписи блока из массива в буфер ОЗУ во внешней АТ45ДБ. А она "уже готова" (BUSY неактивен). Но в буфере мусор. Или тот же обмен по SPI - восстанавливаем на точку где-то в середине записи в буфер той же AT45DB. Откуда программа, состояние которой восстановили 1:1 вообще узнает, что ей надо заново опустить CS, подать команду и заново начать писать весь буфер?
На мой взгляд, если программа должна восстанавливать работу при сбоях питания когда ни попадя, "построено так" не годится, надо её перестроить. Порезать на автоматы/шаги, писать в eeprom/fram отмашку о прохождении ключевых точек алгоритма и при пропаже/восстановлении питания восстанавливаться из этих точек и продолжать.
Возможно ввести местами подсостояния, которые и не нужны для работы в условиях "питание есть", но уменьшают объём повторной работы при восстановлении.