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.还有什么我没想过的?
实现"硬复位"的最佳解决方案,就是简单地跳过复位向量,是强制看门狗定时器复位 - 如果你有一个,那就是.
由于你的头衔是"最干净的重置",这是我的建议.如果您只是"跳转到复位向量",系统可能处于任意数量的状态(外设仍处于活动状态,正在进行ADC转换等...)