2017年5月24日 星期三

[IAR] In Application Programming

Jump_To_Application();我用串口在之前輸出flag的。 
然後JumpAddress = *(__IO uint32_t*) (high+4);中為什麼要在跳轉的地址上+4呢?

+4是因為最開始的4個字節是用來記錄堆棧地址的,而隨後的4個字節才是PC指針

因為CM3不同於ARM7等
並不是從入口地址開始指行第一條指令

而是從地址為0x00取出MSP的初始值
再從地址0×04取出PC的初始值

然後從PC處開始執行第一條指令


PC = 0x20000000;
有誤,因為CM3不同於ARM7等
並不是從入口地址開始指行第一條指令
而是從地址0x00取出MSP的初始值
再從地址0x04取出PC的初始值
然後從PC處開始執行第一條指令
所以應該是:

SP = _RDWORD(RAM地地址);

PC = _RDWORD(RAM地地址+0x04);

示例:(STM32 lib3.0.3 Examples)

FUNC void Setup (void)
SP = _RDWORD(0x20000000) ; // Setup Stack Pointer
PC = _RDWORD(0x20000004); // Setup Program Counter
_WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register非必要

}



沒有留言:

張貼留言