<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 設計應用 > 深入理解MCU啟動(dòng)原理

深入理解MCU啟動(dòng)原理

作者: 時(shí)間:2025-01-23 來(lái)源: 收藏

最開(kāi)始一啟動(dòng)后去哪里讀代碼?

本文引用地址:http://dyxdggzs.com/article/202501/466577.htm

CPU上電啟動(dòng)后被設計為去地址0x00000000位置處讀取代碼;首先會(huì )連續讀取兩個(gè)字,分別是棧指針初始值和復位異常處理函數的地址;然后跳去執行復位異常處理函數。

640-3.png

640-4.png

當然在一些早期的ARM處理器設計中,如Arm7TDMI,復位后會(huì )直接讀取0地址處的代碼進(jìn)行執行,由軟件初始化棧指針,0地址處存放的直接就是中斷處理函數,而不是函數地址。所以我們可以有理由推測出,第一個(gè)字是棧地址是因為接下來(lái)的復位中斷處理函數涉及函數跳轉,可能已經(jīng)需要存放內容在棧里了。

0x0地址處是bootROM代碼嗎,還是用戶(hù)bootloader代碼?

答案是都可以,這其實(shí)取決于用戶(hù)的代碼是存放在哪里的。比如說(shuō)對于一些性能強的(如Cortex-A系列)來(lái)說(shuō),代碼本身體積比較大,存放在SD卡里或者QSPI/SPI Flash里都有可能,這些啟動(dòng)一定是先去bootROM執行代碼,因為SD卡、SPI Flash的儲存不在MCU的統一編址空間里,沒(méi)初始化這些外設前根本無(wú)法訪(fǎng)問(wèn),bootROM這塊Nor Flash就一定是可以被MCU直接通過(guò)總線(xiàn)地址訪(fǎng)問(wèn)的,0地址的代碼位于bootROM中。

代碼從bootROM中起來(lái)后,通過(guò)啟動(dòng)引腳判斷從哪個(gè)外設中搬用戶(hù)程序,并去初始化相應外設,將外設中存儲的用戶(hù)代碼搬到內部SRAM中執行。后續的啟動(dòng)流程不贅述。

640-5.png

對于一些小容量的MCU來(lái)說(shuō),比如Cortex-M3/M4,他們的芯片里有內置Flash,這個(gè)Flash的特點(diǎn)跟上面說(shuō)的bootROM很像,是MCU可以直接通過(guò)地址總線(xiàn)去訪(fǎng)問(wèn)到的,不需要進(jìn)行外設初始化的。當然,這些MCU內部也是有bootROM的,因此這些MCU一上電可以選擇從bootROM中啟動(dòng),也可以選擇從內置Flash中啟動(dòng),是通過(guò)外部引腳進(jìn)行選擇的,選擇了誰(shuí),就把誰(shuí)的起始地址映射到0地址處。

640-6.png

類(lèi)似Cortex-M3/M4是如何保證Flash起始地址是棧指針和復位異常處理函數指針的?

這一點(diǎn)實(shí)際是通過(guò)編譯的鏈接文件制定的。比如說(shuō)如下是我截取的IAR的鏈接文件.icf。

640-7.png

MCU有可能不從0地址開(kāi)始讀代碼嗎?

M7內核芯片比較靈活了,改變了固定從0x0000 0000地址讀取中斷向量表的問(wèn)題,以STM32H7為例,可以從0x0000 0000到0x3FFF 0000所有地址進(jìn)行啟動(dòng)。專(zhuān)門(mén)安排了個(gè)選項字節來(lái)配置。



關(guān)鍵詞: MCU

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>