Цитата(SasaVitebsk @ Dec 21 2006, 07:24)

При программировании однокристалок иногда приходится обрабатывать глобальные ошибки. Или, к примеру, реагировать на существенное изменение конфигурации.
В этом случае самый простой а чаще и найболее надёжный способ, - это рестарт программы. Во всяком случае я пользовался таким способом под ASM и, несмотря на "некрасивость", не хочу обходится без этого и на СИ.
На Си я делаю это так:
asm("jmp 0"); // Начать сначала
У меня это единственный оператор ASM на всё прогу. Может существует специальный вызов для IAR, что-то вроде __restart(); ?
И ещё один вопрос. Компилятор вопреки моему мнению скомпилировал его не в jmp. Это зачем?
В бутлоадере исплользовал такое объявление функции:
Код
void (*start_application)( void ) = 0x0000; //pointer to application
//at flash start
Далее, в произвольном месте программы, мы можем ее вызвать и соответственно перейти по адресу 0.
З.Ы. Работает. Использую компилятор GCC.
Выбор.