我基本上按每个线程执行以下操作:
除了我的控制器注释0714
我的代码
if ( 0x5 != systemREG1->BMMCR1) {
// extern tgt size, addr
memcpy( (void*)addr, APP_START_ADDRESS, size);
systemREG1->BMMCR1 = 0x5;
systemREG1->CPURSTCR = ~(systemREG1->CPURSTCR); //bye bye
while(1);
}
//resets & shouldnt be here
通过调试器、我验证我的应用_di_是否已复制到我需要的位置(我在 RAM 中看到了所有汇编语句、从0x08000000开始)、 BMMCR1从0xA 交换到0x5。
然而、一旦 CPU 复位、它就会返回到我看到的启动位置-来自闪存的同一中断矢量、而不是 RAM。 BMMCR1值是正确的-交换/0x5 -复位后,查看 这两个值的起始值- 0x00000000 (现在假设为 RAM)或0x08000000 (现在假设为闪存 )-我只看到旧代码/旧复位矢量。 就好像我的复制从未发生过一样。
此代码根本没有启用 RAM 上的 MPU 或 ECC。
有什么想法吗? (帮助!)
