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

PCB聯(lián)盟網(wǎng)

搜索
查看: 7|回復(fù): 0
收起左側(cè)

深扒IAR啟動函數(shù)流程及其底層初始化設(shè)計

[復(fù)制鏈接]

302

主題

307

帖子

1896

積分

三級會員

Rank: 3Rank: 3

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

    使用道具 舉報

    發(fā)表回復(fù)

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

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表