Я согласен с @Dan, что если в вашей системе имеется сторожевой таймер, это должно обеспечить самый чистый сброс всей платы.НО ... Если ваш процессор имеет архитектуру ARMv7-M (например, Cortex-M3 и т. Д.), Вы можете сделать следующее, даже если у вас нет сторожевого таймера, в зависимости от вашей конкретной реализации:
#define SYSRESETREQ (1<<2)
#define VECTKEY (0x05fa0000UL)
#define VECTKEY_MASK (0x0000ffffUL)
#define AIRCR (*(uint32_t*)0xe000ed0cUL) // fixed arch-defined address
#define REQUEST_EXTERNAL_RESET (AIRCR=(AIRCR&VECTKEY_MASK)|VECTKEY|SYSRESETREQ)
printf("\nRequesting an external reset...\n");
fflush(stdout);
REQUEST_EXTERNAL_RESET;
printf("\nIt doesn't seem to have worked.\n");
fflush(stdout);
См. Справочное руководство по архитектуре ARMv7-M, выполните поиск AIRCR и SYSRESETREQ.
Это может фактически быть тем же решением, что и сообщение, опубликованное «Судьей Мейгарден», но появляются идентификаторы, использованные в его сообщении.быть специфичными для Atmel, в то время как регистр AIRCR и биты SYSRESETREQ определяются базовой архитектурой ARMv7-M, а не Atmel.