99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

如何編寫ARM處理器的Bootloader

工程師 ? 來源:strongerHuang ? 作者:strongerHuang ? 2020-10-27 11:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者 | strongerHuang

微信公眾號(hào) | strongerHuang

之前從應(yīng)用的角度給大家分享過Bootloader相關(guān)的文章,今天從底層原理來給大家描述ARM處理器如何編寫B(tài)ootloader。

1關(guān)于Bootloader

Bootloader顧名思義就是引導(dǎo)加載程序,是在操作系統(tǒng)或應(yīng)用程序運(yùn)行之前的一段程序,是在系統(tǒng)上電后執(zhí)行的一段程序代碼。

BootLoader是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的,特別是在嵌入式平臺(tái)。因此,在嵌入式平臺(tái)里建立一個(gè)通用的BootLoader幾乎是不可能的。盡管如此,我們?nèi)匀豢梢詫?duì)bootloader歸納出一些通用的概念來,以指導(dǎo)用戶特定的BootLoader設(shè)計(jì)與實(shí)現(xiàn)。

---來源百度百科

Bootloader在手機(jī)、電腦、眾多嵌入式系統(tǒng)中都存在,它的作用有很多,比如:初始化底層應(yīng)用驅(qū)動(dòng)、加載應(yīng)用程序、更新應(yīng)用程序等。

不同的設(shè)備,Bootloader可能差異很大,通常來說Bootloader比較依賴底層硬件和實(shí)際項(xiàng)目需求。

2如何編寫bootloader

bootloader是一段引導(dǎo)加載程序代碼,它更新用戶的應(yīng)用程序代碼,可以使用很多硬件下載通道(例如USB、網(wǎng)絡(luò)端口)獲得新代碼。

在執(zhí)行引導(dǎo)ROM之后,將執(zhí)行bootloader程序,并在需要時(shí)進(jìn)行更新,然后執(zhí)行最終用戶應(yīng)用程序。

引導(dǎo)加載程序和用戶應(yīng)用程序應(yīng)作為兩個(gè)獨(dú)立的Project或Object進(jìn)行編寫和編譯,從而產(chǎn)生兩個(gè)獨(dú)立且可執(zhí)行的(bin/hex)文件。

引導(dǎo)加載程序的主要任務(wù)是在必要時(shí)對(duì)用戶應(yīng)用程序進(jìn)行重新編程/替換,并跳轉(zhuǎn)至用戶應(yīng)用程序以執(zhí)行該程序,應(yīng)用程序不一定需要知道引導(dǎo)加載程序的存在。

引導(dǎo)加載程序通常位于芯片閃存基址,下面通過一張圖來描述內(nèi)存和Flash代碼映射關(guān)系:

有很多方法可以引導(dǎo)bootloader進(jìn)入編程模式,以將用戶應(yīng)用程序重新編程到Flash中,或者直接跳轉(zhuǎn)到現(xiàn)有的用戶應(yīng)用程序來執(zhí)行。最簡單的方法是檢查GPIO引腳以確定是否應(yīng)進(jìn)入編程模式。

大多數(shù)芯片供應(yīng)商為用戶提供了一種方便的方式,例如 ISP 和 IAP 接口,bootloader將使用它們來更新閃存內(nèi)容。

當(dāng)Flash內(nèi)容已更新或已經(jīng)是最新時(shí),引導(dǎo)加載程序?qū)⑻D(zhuǎn)到用戶應(yīng)用程序。在執(zhí)行用戶應(yīng)用程序之前,這需要許多步驟:

1.確保CPU處于特權(quán)模式。

2.禁用NVIC中所有啟用的中斷。

3.禁用所有可能產(chǎn)生中斷請(qǐng)求的使能外設(shè),并清除這些外設(shè)中的所有未使用中斷標(biāo)志。

4.清除NVIC中所有未使用的中斷請(qǐng)求。

5.禁用SysTick并清除其異常掛起位。

6.如果引導(dǎo)加載程序使用了單個(gè)故障處理程序,請(qǐng)禁用它們。

7.如果發(fā)現(xiàn)內(nèi)核當(dāng)前與PSP一起運(yùn)行,則激活MSP(由于編譯器可能仍在使用堆棧,因此在此之前需要將PSP復(fù)制到MSP)。

8.將用戶應(yīng)用程序的向量表地址加載到SCB-》 VTOR寄存器中。確保地址符合對(duì)齊要求。

9.最后一部分是將MSP設(shè)置為用戶應(yīng)用程序向量表中找到的值,然后將用戶應(yīng)用程序的重置向量值加載到PC中,也就是跳轉(zhuǎn)功能。

比如通過調(diào)用下面的示例BootJump()這樣的函數(shù)來完成此操作:

static void BootJump(uint32_t *Address){ //1.確保CPU處于特權(quán)模式。 if( CONTROL_nPRIV_Msk & __get_CONTROL()) { /* not in privileged mode */ EnablePrivilegedMode() ; } //2.禁用NVIC中所有啟用的中斷。 Disable_All_Peripherals(); //3.禁用所有可能產(chǎn)生中斷請(qǐng)求的使能外設(shè),并清除這些外設(shè)中的所有未使用中斷標(biāo)志。 NVIC-》ICER[ 0 ] = 0xFFFFFFFF; NVIC-》ICER[ 1 ] = 0xFFFFFFFF; NVIC-》ICER[ 2 ] = 0xFFFFFFFF; NVIC-》ICER[ 3 ] = 0xFFFFFFFF; NVIC-》ICER[ 4 ] = 0xFFFFFFFF; NVIC-》ICER[ 5 ] = 0xFFFFFFFF; NVIC-》ICER[ 6 ] = 0xFFFFFFFF; NVIC-》ICER[ 7 ] = 0xFFFFFFFF; //4.清除NVIC中所有未使用的中斷請(qǐng)求。 NVIC-》ICPR[ 0 ] = 0xFFFFFFFF; NVIC-》ICPR[ 1 ] = 0xFFFFFFFF; NVIC-》ICPR[ 2 ] = 0xFFFFFFFF; NVIC-》ICPR[ 3 ] = 0xFFFFFFFF; NVIC-》ICPR[ 4 ] = 0xFFFFFFFF; NVIC-》ICPR[ 5 ] = 0xFFFFFFFF; NVIC-》ICPR[ 6 ] = 0xFFFFFFFF; NVIC-》ICPR[ 7 ] = 0xFFFFFFFF; //5.禁用SysTick并清除其異常掛起位。 SysTick-》CTRL = 0; SCB-》ICSR |= SCB_ICSR_PENDSTCLR_Msk; //

6.如果引導(dǎo)加載程序使用了單個(gè)故障處理程序,請(qǐng)禁用它們。 SCB-》SHCSR &= ~( SCB_SHCSR_USGFAULTENA_Msk | \ SCB_SHCSR_BUSFAULTENA_Msk | \ SCB_SHCSR_MEMFAULTENA_Msk ) ; //7.如果發(fā)現(xiàn)內(nèi)核當(dāng)前與PSP一起運(yùn)行,則激活MSP if( CONTROL_SPSEL_Msk & __get_CONTROL()) { /* MSP is not active */ __set_MSP( __get_PSP()) ; __set_CONTROL( __get_CONTROL() & ~CONTROL_SPSEL_Msk); } //8.將用戶應(yīng)用程序的向量表地址加載到SCB-》 VTOR寄存器中。 SCB-》VTOR = ( uint32_t )Address ; //9.跳轉(zhuǎn) BootJumpASM( Address[ 0 ], Address[ 1 ]);}

再次說明bootloader與底層硬件和實(shí)際需求有關(guān),以上代碼僅供參考,主要是提供思路,方便大家理解。

責(zé)任編輯:haq

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

    關(guān)注

    460

    文章

    52520

    瀏覽量

    441103
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9353

    瀏覽量

    377657
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3826

    瀏覽量

    83005
  • keil
    +關(guān)注

    關(guān)注

    69

    文章

    1223

    瀏覽量

    169624
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    EE-218:為ADSP-TS201 TigerSHARC處理器編寫高效浮點(diǎn)FFT

    電子發(fā)燒友網(wǎng)站提供《EE-218:為ADSP-TS201 TigerSHARC處理器編寫高效浮點(diǎn)FFT.pdf》資料免費(fèi)下載
    發(fā)表于 01-14 16:46 ?0次下載
    EE-218:為ADSP-TS201 TigerSHARC<b class='flag-5'>處理器</b><b class='flag-5'>編寫</b>高效浮點(diǎn)FFT

    ARM處理器的尋址方式

    ARM處理器的尋址方式是處理器在執(zhí)行指令時(shí),根據(jù)指令中給出的地址信息來尋找物理地址的方法。ARM處理器支持多種尋址方式,以滿足不同的編程需求
    的頭像 發(fā)表于 10-05 17:08 ?812次閱讀

    AM57XX處理器平臺(tái)ARM和DSP通信的實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《AM57XX處理器平臺(tái)ARM和DSP通信的實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 09-30 11:50 ?0次下載
    AM57XX<b class='flag-5'>處理器</b>平臺(tái)<b class='flag-5'>ARM</b>和DSP通信的實(shí)現(xiàn)

    ARM處理器和CPU有什么區(qū)別

    ARM處理器和CPU(中央處理器)之間的關(guān)系及區(qū)別,可以從多個(gè)維度進(jìn)行深入探討。首先,需要明確的是,ARM處理器并非一種獨(dú)立的CPU類型,而
    的頭像 發(fā)表于 09-10 11:24 ?3324次閱讀

    ARM處理器的工作模式和特點(diǎn)

    ARM處理器具有多種工作模式,這些模式根據(jù)處理器執(zhí)行的任務(wù)和當(dāng)前的狀態(tài)進(jìn)行劃分。常見的ARM處理器工作模式包括用戶模式(User Mode)
    的頭像 發(fā)表于 09-10 11:22 ?2325次閱讀

    ARM處理器的異常中斷響應(yīng)過程

    ARM處理器的異常中斷響應(yīng)是嵌入式系統(tǒng)設(shè)計(jì)中一個(gè)至關(guān)重要的環(huán)節(jié),它確保了系統(tǒng)在面對(duì)內(nèi)部或外部事件時(shí)能夠穩(wěn)定、可靠地運(yùn)行。
    的頭像 發(fā)表于 09-10 11:18 ?2016次閱讀

    ARM處理器的指令集包括哪些

    ARM處理器的指令集是一個(gè)龐大而復(fù)雜的系統(tǒng),它涵蓋了多種類型的指令,用于實(shí)現(xiàn)數(shù)據(jù)處理、程序控制、內(nèi)存訪問等多種功能。
    的頭像 發(fā)表于 09-10 11:15 ?1550次閱讀

    ARM處理器的寄存組織及功能

    ARM處理器的寄存組織是其核心架構(gòu)的重要組成部分,對(duì)于理解ARM處理器的運(yùn)行機(jī)制和性能特點(diǎn)具有重要意義。以下是對(duì)
    的頭像 發(fā)表于 09-10 11:11 ?2738次閱讀

    ARM處理器和CISC處理器的區(qū)別

    ARM處理器和CISC(復(fù)雜指令集計(jì)算機(jī))處理器在多個(gè)方面存在顯著的區(qū)別。這些區(qū)別主要體現(xiàn)在架構(gòu)原理、性能與功耗、設(shè)計(jì)目標(biāo)、應(yīng)用領(lǐng)域以及市場生態(tài)等方面。
    的頭像 發(fā)表于 09-10 11:10 ?976次閱讀

    ARM處理器的結(jié)構(gòu)和特點(diǎn)

    ARM處理器,全稱Advanced RISC Machines,是一種基于精簡指令集(RISC)架構(gòu)的微處理器。其結(jié)構(gòu)和特點(diǎn)在嵌入式系統(tǒng)、移動(dòng)設(shè)備、物聯(lián)網(wǎng)等多個(gè)領(lǐng)域具有顯著優(yōu)勢。以下將詳細(xì)闡述
    的頭像 發(fā)表于 09-10 11:09 ?3452次閱讀

    ARM處理器概述和發(fā)展歷程

    ARM處理器是一種基于RISC(精簡指令集計(jì)算機(jī))架構(gòu)的高性能微處理器,由英國公司ARM(Advanced RISC Machines)開發(fā)和授權(quán)。它以其低功耗、低成本和高性能的特點(diǎn),
    的頭像 發(fā)表于 09-10 11:07 ?2006次閱讀

    用于PROFIBUS的AM1810 ARM處理器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《用于PROFIBUS的AM1810 ARM處理器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-08 12:57 ?0次下載
    用于PROFIBUS的AM1810 <b class='flag-5'>ARM</b>微<b class='flag-5'>處理器</b>數(shù)據(jù)表

    AM1802 ARM處理器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《AM1802 ARM處理器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-08 12:50 ?0次下載
    AM1802 <b class='flag-5'>ARM</b>微<b class='flag-5'>處理器</b>數(shù)據(jù)表

    AM1705 ARM處理器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《AM1705 ARM處理器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-08 11:50 ?0次下載
    AM1705 <b class='flag-5'>ARM</b>微<b class='flag-5'>處理器</b>數(shù)據(jù)表

    AM1707 ARM處理器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《AM1707 ARM處理器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-07 11:21 ?0次下載
    AM1707 <b class='flag-5'>ARM</b>微<b class='flag-5'>處理器</b>數(shù)據(jù)表