吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

硬件攻城獅 ? 來(lái)源:嵌入式電子 ? 2023-06-06 09:29 ? 次閱讀

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

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

68139b5a-03e6-11ee-90ce-dac502259ad0.png681d2418-03e6-11ee-90ce-dac502259ad0.png

當(dāng)然在一些早期的ARM處理器設(shè)計(jì)中,如Arm7TDMI,復(fù)位后會(huì)直接讀取0地址處的代碼進(jìn)行執(zhí)行,由軟件初始化棧指針,0地址處存放的直接就是中斷處理函數(shù),而不是函數(shù)地址。

所以我們可以有理由推測(cè)出,第一個(gè)字是棧地址是因?yàn)榻酉聛?lái)的復(fù)位中斷處理函數(shù)涉及函數(shù)跳轉(zhuǎn),可能已經(jīng)需要存放內(nèi)容在棧里了。

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

答案是都可以。這其實(shí)取決于用戶(hù)的代碼是存放在哪里的。

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

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

68280afe-03e6-11ee-90ce-dac502259ad0.png

對(duì)于一些小容量的MCU來(lái)說(shuō),比如Cortex-M3/M4,他們的芯片里有內(nèi)置Flash,這個(gè)Flash的特點(diǎn)跟上面說(shuō)的bootROM很像,是MCU可以直接通過(guò)地址總線去訪問(wèn)到的,不需要進(jìn)行外設(shè)初始化的。

當(dāng)然,這些MCU內(nèi)部也是有bootROM的,因此這些MCU一上電可以選擇從bootROM中啟動(dòng),也可以選擇從內(nèi)置Flash中啟動(dòng),是通過(guò)外部引腳進(jìn)行選擇的,選擇了誰(shuí),就把誰(shuí)的起始地址映射到0地址處。

68314ccc-03e6-11ee-90ce-dac502259ad0.png

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

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

683e9be8-03e6-11ee-90ce-dac502259ad0.png

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

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





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2272

    文章

    10924

    瀏覽量

    357608
  • SD卡
    +關(guān)注

    關(guān)注

    2

    文章

    566

    瀏覽量

    64118
  • ARM處理器
    +關(guān)注

    關(guān)注

    6

    文章

    361

    瀏覽量

    41942
  • SRAM芯片
    +關(guān)注

    關(guān)注

    0

    文章

    65

    瀏覽量

    12162
  • MCU芯片
    +關(guān)注

    關(guān)注

    3

    文章

    253

    瀏覽量

    11635

原文標(biāo)題:深入理解MCU啟動(dòng)原理

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    深入理解SD卡原理和其內(nèi)部結(jié)構(gòu)總結(jié)

    深入理解SD卡原理和其內(nèi)部結(jié)構(gòu)總結(jié)
    發(fā)表于 08-18 11:11

    深入理解Android

    深入理解Android
    發(fā)表于 08-20 15:30

    深入理解和實(shí)現(xiàn)RTOS_連載

    和trcohili的帖子。深入理解和實(shí)現(xiàn)RTOS_連載1_RTOS的前生今世今天發(fā)布的是第一篇,"RTOS的前生今世"。通過(guò)軟件系統(tǒng)結(jié)構(gòu)的比對(duì)簡(jiǎn)要的介紹rtos為何而生。如果讀者對(duì)RTOS
    發(fā)表于 05-29 11:20

    深入理解和實(shí)現(xiàn)RTOS_連載

    和trcohili的帖子。trochili rtos完全是作者興趣所在,且行且堅(jiān)持,比沒(méi)有duo。深入理解和實(shí)現(xiàn)RTOS_連載1_RTOS的前生今世今天發(fā)布的是第一篇,"RTOS的前生今世"
    發(fā)表于 05-30 01:02

    深入理解Linux網(wǎng)絡(luò)技術(shù)內(nèi)幕》(EN)

    深入理解Linux網(wǎng)絡(luò)技術(shù)內(nèi)幕》(EN)
    發(fā)表于 02-06 15:17

    深入理解lte-a

    深入理解LTE-A
    發(fā)表于 02-26 10:21

    如何深入理解ES6之函數(shù)

    深入理解ES6之函數(shù)
    發(fā)表于 05-22 07:40

    深入理解STM32

    時(shí)鐘系統(tǒng)是處理器的核心,所以在學(xué)習(xí)STM32所有外設(shè)之前,認(rèn)真學(xué)習(xí)時(shí)鐘系統(tǒng)是必要的,有助于深入理解STM32。下面是從網(wǎng)上找的一個(gè)STM32時(shí)鐘框圖,比《STM32中文參考手冊(cè)》里面的是中途看起來(lái)清晰一些:重要的時(shí)鐘:PLLCLK,SYSCLK,HCKL,PCLK1,...
    發(fā)表于 08-12 07:46

    對(duì)棧的深入理解

    為什么要深入理解棧?做C語(yǔ)言開(kāi)發(fā)如果棧設(shè)置不合理或者使用不對(duì),棧就會(huì)溢出,溢出就會(huì)遇到無(wú)法預(yù)測(cè)亂飛現(xiàn)象。所以對(duì)棧的深入理解是非常重要的。注:動(dòng)畫(huà)如果看不清楚可以電腦看更清晰啥是棧先來(lái)看一段動(dòng)畫(huà):沒(méi)有
    發(fā)表于 02-15 07:01

    為什么要深入理解

    [導(dǎo)讀] 從這篇文章開(kāi)始,將會(huì)不定期更新關(guān)于嵌入式C語(yǔ)言編程相關(guān)的個(gè)人認(rèn)為比較重要的知識(shí)點(diǎn),或者踩過(guò)的坑。為什么要深入理解棧?做C語(yǔ)言開(kāi)發(fā)如果棧設(shè)置不合理或者使用不對(duì),棧就會(huì)溢出,溢出就會(huì)遇到無(wú)法
    發(fā)表于 02-15 06:09

    深入理解Android之資源文件

    深入理解Android之資源文件
    發(fā)表于 01-22 21:11 ?22次下載

    深入理解Android》文前

    深入理解Android》文前
    發(fā)表于 03-19 11:23 ?0次下載

    深入理解Android:卷I》

    深入理解Android:卷I》
    發(fā)表于 03-19 11:23 ?0次下載

    深入理解Android網(wǎng)絡(luò)編程

    深入理解Android網(wǎng)絡(luò)編程
    發(fā)表于 03-19 11:26 ?1次下載

    深入理解MOS管電子版資源下載

    深入理解MOS管電子版資源下載
    發(fā)表于 07-09 09:43 ?0次下載
    太阳城百家乐官网群| 百家乐官网赢得秘诀| 百家乐平台信誉| 百家乐官网纯数字玩法| 大发888娱乐场and| 百家乐赌博机假在哪里| 百家乐官网科学打法| 利好国际| 大发888大家赢娱乐| 百家乐薯片| 肯博百家乐游戏| 永利百家乐官网娱乐场| 老虎机 | 大发888是什么| 网上的百家乐怎么才能赚钱| 做生意的风水摆件| 百家乐官网龙虎台布价格| 大发百家乐官网游戏| 十三张娱乐城开户| 威尼斯人娱乐城网址| 澳门百家乐娱乐城送体验金| 龙博百家乐官网的玩法技巧和规则 | 免邮百家乐布桌| 百家乐桌子| 网页百家乐官网游戏下载| 百家乐官网路单| 上海玩百家乐官网算不算违法| 娱乐城注册送钱| 大发888官网注册送58| 高尔夫百家乐的玩法技巧和规则| 线上百家乐信誉| 真人百家乐软件博彩吧| 自贡百家乐官网赌| 乐天堂百家乐官网娱乐城| 金龍百家乐官网的玩法技巧和规则| 网络百家乐官网真人游戏| 百家乐官网概率怎么算| 皇冠足球网| 澳门百家乐官网论谈| 12倍百家乐官网秘籍| 百家乐官网必胜软件下载|