電子產業(yè)一站式賦能平臺

PCB聯盟網

搜索
查看: 6|回復: 0
收起左側

深扒IAR啟動函數流程及其底層初始化設計

[復制鏈接]

302

主題

307

帖子

1896

積分

三級會員

Rank: 3Rank: 3

積分
1896
跳轉到指定樓層
樓主
發(fā)表于 2021-11-17 21:20:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是IAR啟動函數流程及其__low_level_init設計對函數重定向的影響
; Z  p# p) `1 _上一篇文章 《IAR下RT-Thread工程自定義函數段重定向失效分析》 里我們找出了影響 IAR 鏈接器處理自定義程序段重定向的原因,主要跟 __low_level_init() 函數有關,這個函數屬于 IAR 底層設計,它在 IAR 啟動函數 __iar_program_start() 中會被自動調用。
! J% x, [7 R8 o; h/ u7 E__iar_program_start() 是 IAR 標準啟動函數,也屬于 IDE 底層設計。在任何一個 Cortex-M 廠商芯片的啟動文件里(startup_xxDevice.s)都能看到它的身影,它是復位函數 Reset_Handler() 和 主函數 main() 之間的橋梁,今天我們就仔細說說這個啟動函數以及其中 __low_level_init 設計:2 l# k) W& `# c8 l, L
  • Note 1:閱讀本文前需要對 《IAR鏈接文件(.icf)》、《IAR映射文件(.map)》 這兩種文件有所了解。
  • Note 2:本文使用的 IAR EWARM 軟件版本是 v9.10.2。一、通用芯片上電啟動流程在深入挖掘 IAR 啟動函數源代碼之前,有必要先整體了解一下通用的芯片上電啟動流程,即進入用戶 main 函數之前內核必須要做的事情,注意這里并不包含芯片底層外設的初始化(這是因芯片而異的)。
      _$ s4 o9 m+ e: L通用啟動流程簡單來說分為如下四步:第一步是從 ROM 區(qū)域中斷向量表里獲取入口函數開始執(zhí)行,設置好初始棧指針,有了正確的棧,內核就具備函數跳轉執(zhí)行的能力了。第二步和第三步是全局變量的初始化(將全局變量初值從 ROM 區(qū)域拷貝到變量所鏈接的 RAM 區(qū)域),全局變量初始化完成,應用程序就有了正確的初始態(tài),最后一步就是跳轉到 main 函數。
  • 回復

    使用道具 舉報

    發(fā)表回復

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


    聯系客服 關注微信 下載APP 返回頂部 返回列表