На форуме caxapа.ru был такой
вопрос и ответ.
Процитирую здесь.
Цитата(VAI)
#define soft_reset() ( *( void( ** )()) 0xfffe )() // "мягкая" перезагрузка - переход по вектору в адресе 0xfffe
А где надо, пишете
soft_reset();
можно конечно написать сразу
( *( void( ** )()) 0xfffe )();
но, мое ИМХО, так не очень красиво...
Только советую учитывать, что при таком способе сброса (переход по вектору сброса) нужно (ну или очень желательно) самостоятельно в программе инициализировать ВСЕ регистры периферии, которые автоматически сбрасываются лишь при PUC или POR условиях.