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

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

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

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

[復(fù)制鏈接]

302

主題

307

帖子

1896

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

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

    本版積分規(guī)則


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