色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深入理解MCU啟動原理

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

1、MCU最開始一啟動后去哪里讀代碼?

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

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

當然在一些早期的ARM處理器設計中,如Arm7TDMI,復位后會直接讀取0地址處的代碼進行執行,由軟件初始化棧指針,0地址處存放的直接就是中斷處理函數,而不是函數地址。

所以我們可以有理由推測出,第一個字是棧地址是因為接下來的復位中斷處理函數涉及函數跳轉,可能已經需要存放內容在棧里了。

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

答案是都可以。這其實取決于用戶的代碼是存放在哪里的。

比如說對于一些性能強的MCU(如Cortex-A系列)來說,代碼本身體積比較大,存放在SD卡里或者QSPI/SPI Flash里都有可能,這些MCU啟動一定是先去bootROM執行代碼,因為SD卡、SPI Flash的儲存不在MCU的統一編址空間里,沒初始化這些外設前根本無法訪問,bootROM這塊Nor Flash就一定是可以被MCU直接通過總線地址訪問的,0地址的代碼位于bootROM中。

代碼從bootROM中起來后,通過啟動引腳判斷從哪個外設中搬用戶程序,并去初始化相應外設,將外設中存儲的用戶代碼搬到內部SRAM中執行。后續的啟動流程不贅述。

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

對于一些小容量的MCU來說,比如Cortex-M3/M4,他們的芯片里有內置Flash,這個Flash的特點跟上面說的bootROM很像,是MCU可以直接通過地址總線去訪問到的,不需要進行外設初始化的。

當然,這些MCU內部也是有bootROM的,因此這些MCU一上電可以選擇從bootROM中啟動,也可以選擇從內置Flash中啟動,是通過外部引腳進行選擇的,選擇了誰,就把誰的起始地址映射到0地址處。

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

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

這一點實際是通過編譯的鏈接文件制定的。比如說如下是我截取的IAR的鏈接文件.icf。

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

4. MCU有可能不從0地址開始讀代碼嗎?

M7內核芯片比較靈活了,改變了固定從0x0000 0000地址讀取中斷向量表的問題,以STM32H7為例,可以從 0x0000 0000 到 0x3FFF 0000 所有地址進行啟動。專門安排了個選項字節來配置。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2270

    文章

    10923

    瀏覽量

    357038
  • SD卡
    +關注

    關注

    2

    文章

    566

    瀏覽量

    64042
  • ARM處理器
    +關注

    關注

    6

    文章

    361

    瀏覽量

    41868
  • SRAM芯片
    +關注

    關注

    0

    文章

    65

    瀏覽量

    12145
  • MCU芯片
    +關注

    關注

    3

    文章

    253

    瀏覽量

    11588

原文標題:深入理解MCU啟動原理

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    深入理解SD卡原理和其內部結構總結

    深入理解SD卡原理和其內部結構總結
    發表于 08-18 11:11

    深入理解Android

    深入理解Android
    發表于 08-20 15:30

    深入理解和實現RTOS_連載

    和trcohili的帖子。深入理解和實現RTOS_連載1_RTOS的前生今世今天發布的是第一篇,"RTOS的前生今世"。通過軟件系統結構的比對簡要的介紹rtos為何而生。如果讀者對RTOS
    發表于 05-29 11:20

    深入理解和實現RTOS_連載

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

    深入理解LINUX內存管理》學習筆記

    深入理解LINUX內存管理》學習筆記1
    發表于 11-07 10:20

    深入理解lte-a

    深入理解LTE-A
    發表于 02-26 10:21

    如何深入理解ES6之函數

    深入理解ES6之函數
    發表于 05-22 07:40

    深入理解STM32

    時鐘系統是處理器的核心,所以在學習STM32所有外設之前,認真學習時鐘系統是必要的,有助于深入理解STM32。下面是從網上找的一個STM32時鐘框圖,比《STM32中文參考手冊》里面的是中途看起來清晰一些:重要的時鐘:PLLCLK,SYSCLK,HCKL,PCLK1,...
    發表于 08-12 07:46

    對棧的深入理解

    為什么要深入理解棧?做C語言開發如果棧設置不合理或者使用不對,棧就會溢出,溢出就會遇到無法預測亂飛現象。所以對棧的深入理解是非常重要的。注:動畫如果看不清楚可以電腦看更清晰啥是棧先來看一段動畫:沒有
    發表于 02-15 07:01

    為什么要深入理解

    [導讀] 從這篇文章開始,將會不定期更新關于嵌入式C語言編程相關的個人認為比較重要的知識點,或者踩過的坑。為什么要深入理解棧?做C語言開發如果棧設置不合理或者使用不對,棧就會溢出,溢出就會遇到無法
    發表于 02-15 06:09

    深入理解Android之資源文件

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

    深入理解Android》文前

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

    深入理解Android:卷I》

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

    深入理解Android網絡編程

    深入理解Android網絡編程
    發表于 03-19 11:26 ?1次下載

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

    深入理解MOS管電子版資源下載
    發表于 07-09 09:43 ?0次下載
    主站蜘蛛池模板: 动漫美女被吸奶| 国产麻豆福利AV在线观看| 国内精品久久久久影院老司| 色cccwww| 东京热无码中文字幕av专区| 欧美激情视频二区| 99热免费精品店| 男生插曲女生身全过程| 5G在线观看免费年龄确认18| 免费人成在线观看视频不卡| 97久久超碰中文字幕| 女生下面免费看| 边摸边吃奶边做下面视频| 三级aa久久| 国产午夜精品理论片| 亚洲国产欧美日本大妈| 禁室培欲在线视频免费观看| 曰本少妇高潮久久久久久| 摸老师丝袜小内内摸出水| japonensis护士| 少妇大荫蒂毛多毛大| 国产人人为我我为人人澡| 亚洲色图在线观看视频| 六级黄色片| 草草久久久亚洲AV成人片| 无人区乱码区1卡2卡三卡在线| 國産麻豆AVMDMD0179| 中文字幕免费视频精品一| 免费成年人在线观看视频| 第四色男人天堂| 亚洲 自拍 欧洲 视频二区| 久久精品国产在热亚洲| 99在线这精品视频| 十七岁日本免费完整版BD | 牛牛免费视频| 芳草地在线观看免费观看| 亚洲欧美精品无码大片在线观看| 久久视频这里只精品99re8久 | 国产精品97久久AV色婷婷| 亚洲一区二区影院| 欧美一区二区在线观看|