最近、ARM7コントローラーで実行されるいくつかのCコードをクリーンアップしています。状況によっては(アップグレード、致命的なエラーなど)、プログラムはリセットを実行します。現在、0にジャンプし、起動コードがすべてを正しく再初期化すると想定しています。ARMをリセットするための「LeaveNoTrace」の最良の手順は何かを考えるようになりました。これが私の最初の亀裂です:
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)();
}
このコードは、IARARMコンパイラとAt91Libを想定しています。私が考慮していないことはありますか?