ARM Cortex-M3/M4啟動分析
序:
之前在進行嵌入式開發的時候,並沒有太過於關注ARM芯片的啟動邏輯,現在IMXRT1052的學習過程中,發現了還真的老老實實的回去學習一下關於Cortex-M的啟動邏輯和原理,才能愜意的玩轉IMXRT芯片!此處做個隨筆,主要是方便自己回顧,溫故而知新嘛!
關鍵:
要分析cortex-m的啟動原理需要從兩個方面入手
1、芯片的memory map
2、鏈接文件
Memory Map:
我們用STM32F4XX來分析!The chip memory map has been provided in the following tables.
Figuer 1. Memory map
重要的區域:
Size AddrArea
Block 0 512M 0x0000 0000 ~ 0x1FFF FFFF
內部Flash:存儲程序指令,內核上電后會從0x0800 0000地址取指令運行
注意:大家不都程序要在RAM中運行嗎?為啥在這里從Flash里就可以運行了?這里涉及到XIP的概念,支持XIP的Flash,CPU是可以直接在上面取指,譯碼,執行的,一般的Norflash就有XIP的特性。
你可以吧STM32內部的Flash理解為一個Norflash,上電后內核就可以從0x0800 0000取指,執行。但是數據段必須還是要拷貝到RAM中的運行,應為數據段需要頻繁的讀寫,所以放在RAM里效率會更高。
一般來說,一個系統起碼要搭配一個具有xip功能的芯片,系統從xip芯里只完成SDRAM初始化,然后拷貝Flash中的代碼到SDRAM中,然后內核再跳轉到SDRAM里取運行。在S3C2410中,內核上電后,
會自動讀取NANDFLASH前4K的數據進行初始化然后拷貝代碼到SDRAM,也是同樣的道理!
Block 1 512M 0x2000 0000 ~ 0x3FFF FFFF
內部SRAM:內核的數據區,程序的DATA段在運行的時候需要從Flash拷貝到SRAM運行