After reset, The bootloader's startup routine is called,
startup routine 將 RAM 的位址 remap 至 0xF000 ~ 0xFFFF (4KB).
原先在該範圍的 Flash 便無法使用。
所參考的中斷向量便是存放 RAM 中, 而不是在 Flash.
Bootloader 可正常的使用中斷, 但需注意的是在程式中的宣告,
不可使用 constant 來宣告中斷向量表。
const INT16U INTsTable[] @ 0xFF00 = {.....}; (X)
INT16U INTsTable[] @ 0xFF00 = {.......}; (O)
如此一來 startup routine 在執行初始化全域變數時才會將 Interrupt vectors 填入.
不然中斷向量會被當成常數存在放 Flash 裡。
Bootloader 更新 Application Interrupt table 時, 因為中斷向量表位在: 0xFF00 ~ 0xFFFF
, 和目前的 RAM 位址重疊。要如何才能將中斷向量燒錄至 Flash 位於 0xFF00 ~ 0xFFFF 的位址?
Flash: 0xC000 ~ 0xFFFF == 0x3F8000 ~ 0x3FBFFF (Banked memory)
燒錄時可將位址作上述的轉換應該可以解上述的問題。(不過我還沒試過)
Reference
No comments:
Post a Comment