最近,我一直在清理一些在 ARM7 控制器上运行的 C 代码。在某些情况下(升级、致命错误等),程序将执行重置。目前它只是跳转到 0 并假设启动代码将正确地重新初始化所有内容。这让我开始思考什么是 ARM 重置的最佳程序,例如“不留痕迹”。这是我的第一次破解:
void Reset(void)
{
/* Disable interrupts */
__disable_interrupts();
/* Reset peripherals, externals and processor */
AT91C_BASE_RSTC->RSTC_RCR = AT91C_RSTC_KEY | AT91C_RSTC_PERRST | AT91C_RSTC_EXTRST| AT91C_RSTC_PROCRST;
while(AT91C_BASE_RSTC->RSTC_RSR & AT91C_RSTC_SRCMP);
/* Jump to the reset vector */
(*(void(*)())0)();
}
此代码假定使用 IAR ARM 编译器和 At91Lib。有什么我没有考虑过的吗?