ARM处理器最干净的重置

waf*_*man 3 c arm processor reset

最近,我一直在清理一些在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)();
}
Run Code Online (Sandbox Code Playgroud)

此代码假定IAR ARM编译器和At91Lib.还有什么我没想过的?

Dan*_*Dan 8

实现"硬复位"的最佳解决方案,就是简单地跳过复位向量,是强制看门狗定时器复位 - 如果你有一个,那就是.

由于你的头衔是"最干净的重置",这是我的建议.如果您只是"跳转到复位向量",系统可能处于任意数量的状态(外设仍处于活动状态,正在进行ADC转换等...)