我正在使用mbed的LPC 1768開發板(與cortex M3 cpu),我正試圖在這裏實現某些功能,主要是從SD卡升級用戶應用程序,我正在編寫兩個程序,第一個引導程序/納米內核和用戶應用程序(的HelloWorld一開始會做):Cortex M3的引導加載程序
- 的Bootloader /納米內核在爲0x00地址運行時,它會做一些檢查,並最終搶在SD二進制文件卡
- 引導加載程序/納米內核將複製此地址爲0x9000的二進制文件(稍後可能需要更改,但該空間不能被引導加載程序/納米內核使用,因此應該可以)
- 引導加載程序跳轉到用戶應用程序0x9000 + 4
Sd卡很容易解決,我遇到了跳轉部分的問題。這裏是跳轉功能的代碼。
void run(void) {
void (*user_code_entry)(void);
unsigned *p;
SCB->VTOR = (USER_FLASH_START & 0x1FFFFF80);
// Load contents of second word of user flash - the reset handler address
// in the applications vector table
p = (unsigned *)(USER_FLASH_START +4); // USER_FLASH_START is 0x9000
user_code_entry = (void (*)(void))p;
// Jump to user application
user_code_entry();
}
所以我編了(我用的Keil uvision4)的用戶應用程序改變起始地址0×9000。如果我編寫我的主板(使用flashmagictool),然後手動跳轉(仍使用flashmagictool)到0x9004(0x9000 + 4),用戶應用程序將運行,所以我相信編譯工作正常,所以用戶應用程序可以運行在0x9000。
但是,如果我運行bootloader /納米內核,這一個不會跳轉到用戶應用程序,不幸的是,因爲我無法調試,我不知道發生了什麼...我也試圖不要使用SD複製部分,所以我首先編程bootloader,基本上只跳轉到0x9004。然後,我編寫將位於0x9000的用戶應用程序。如果我重新啓動主板,bootloader會運行但不會跳轉到用戶應用程序。我檢查了內存,看起來這兩個程序(引導程序+用戶應用程序)都是正確的,並且位置正確。
我相信我在這裏錯過了一些東西,有沒有我應該看的低級代碼?我已經閱讀過在線文檔的語調,並且從我發現的例子中,他們跳轉到用戶代碼的方式與我一樣...非常感謝您的幫助。
這應該工作在PC上非常相似了,但是有虛擬地址,而不是物理 - 嘗試一下,看看它是否工作,然後將代碼移至Keil – Ulterior
Cortex M3沒有MMU,因此沒有虛擬地址。 –