chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

掃碼添加小助手

加入工程師交流群

作者 | strongerHuang

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

之前從應(yīng)用的角度給大家分享過Bootloader相關(guān)的文章,今天從底層原理來(lái)給大家描述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歸納出一些通用的概念來(lái),以指導(dǎo)用戶特定的BootLoader設(shè)計(jì)與實(shí)現(xiàn)。

---來(lái)源百度百科

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

不同的設(shè)備,Bootloader可能差異很大,通常來(lái)說(shuō)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)加載程序通常位于芯片閃存基址,下面通過一張圖來(lái)描述內(nèi)存和Flash代碼映射關(guān)系:

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

大多數(shù)芯片供應(yīng)商為用戶提供了一種方便的方式,例如 ISP 和 IAP 接口,bootloader將使用它們來(lái)更新閃存內(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ù)來(lái)完成此操作:

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 ]);}

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

責(zé)任編輯:haq

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

    關(guān)注

    463

    文章

    53866

    瀏覽量

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

    關(guān)注

    135

    文章

    9538

    瀏覽量

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

    關(guān)注

    117

    文章

    3838

    瀏覽量

    85063
  • keil
    +關(guān)注

    關(guān)注

    69

    文章

    1228

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Cortex-M0 處理器介紹

    Cortex-M0 處理器簡(jiǎn)介ARM公司的Cortex-M0應(yīng)用于各種微控制(MCU)中,并可讓研發(fā)工程師以8位的價(jià)位創(chuàng)造32位的的效能,并將傳統(tǒng)的8位和16位的處理器升級(jí)到更高效、
    發(fā)表于 01-16 08:04

    基于E203 NICE協(xié)處理器擴(kuò)展指令

    (memory response channel) Nice 反饋通道(response channel) 調(diào)用協(xié)處理器的方法:擴(kuò)展一個(gè)用RTL級(jí)代碼編寫的協(xié)處理器,想個(gè)辦法調(diào)用這個(gè)獨(dú)立
    發(fā)表于 10-21 14:35

    基于E203 NICE協(xié)處理器擴(kuò)展指令2.0

    存儲(chǔ)讀寫結(jié)果。 調(diào)用協(xié)處理器的方法:擴(kuò)展一個(gè)用RTL級(jí)代碼編寫的協(xié)處理器,想個(gè)辦法調(diào)用這個(gè)獨(dú)立于流水線的計(jì)算單元,即在MCU層面,在編譯
    發(fā)表于 10-21 10:39

    Cortex-M0+處理器的HardFault錯(cuò)誤介紹

    ARM處理器中,如果一個(gè)程序產(chǎn)生了錯(cuò)誤并且被處理器檢測(cè)到,就會(huì)產(chǎn)生錯(cuò)誤異常。Cortex-M0+處理器只有一種異常用以處理錯(cuò)誤:HardF
    的頭像 發(fā)表于 10-14 10:50 ?3209次閱讀
    Cortex-M0+<b class='flag-5'>處理器</b>的HardFault錯(cuò)誤介紹

    德州儀器AM62Ax Sitara?處理器技術(shù)解析

    Texas Instruments AM62A/AM62A-Q1基于ARM ^?^ 的處理器是車規(guī)級(jí)異構(gòu)ARM處理器系列的一部分。這些處理器
    的頭像 發(fā)表于 08-13 10:25 ?1213次閱讀
    德州儀器AM62Ax Sitara?<b class='flag-5'>處理器</b>技術(shù)解析

    【老法師】多核異構(gòu)處理器中M核程序的啟動(dòng)、編寫和仿真

    有很多研究單片機(jī)的小伙伴在面對(duì)多核異構(gòu)處理器時(shí),可能會(huì)對(duì)多核的啟動(dòng)流程感到困惑——因?yàn)椴皇煜CC編程和GDB調(diào)試,所以也無(wú)法確定多核異構(gòu)處理器的程序是否能像單片機(jī)那樣方便地編寫和仿真。本篇
    的頭像 發(fā)表于 08-13 09:05 ?3863次閱讀
    【老法師】多核異構(gòu)<b class='flag-5'>處理器</b>中M核程序的啟動(dòng)、<b class='flag-5'>編寫</b>和仿真

    石油測(cè)井儀器電子艙的“大腦”——高溫ARM處理器芯片

    175℃高溫ARM處理器芯片是高溫電子學(xué)的尖端成果,是解鎖深部、高溫油氣資源勘探開發(fā)的關(guān)鍵技術(shù)之一
    的頭像 發(fā)表于 07-22 13:09 ?819次閱讀
    石油測(cè)井儀器電子艙的“大腦”——高溫<b class='flag-5'>ARM</b><b class='flag-5'>處理器</b>芯片

    龍芯處理器支持WINDOWS嗎?

    龍芯處理器目前不支持原生運(yùn)行Windows操作系統(tǒng),主要原因如下: 架構(gòu)差異 龍芯架構(gòu):龍芯早期基于MIPS架構(gòu),后續(xù)轉(zhuǎn)向自主研發(fā)的LoongArch指令集(與x86/ARM不兼容
    發(fā)表于 06-05 14:24

    集成多種Arm內(nèi)核的超高性能微處理器RZ/G2M數(shù)據(jù)手冊(cè)

    RZ/G2M憑借雙核 Arm? Cortex?-A57(1.5GHz)和四核 Arm Cortex-A53(1.2GHz)中央處理器(CPU),可獲得更高規(guī)格的處理性能,同時(shí)具備 3D
    的頭像 發(fā)表于 03-10 16:37 ?1017次閱讀
    集成多種<b class='flag-5'>Arm</b>內(nèi)核的超高性能微<b class='flag-5'>處理器</b>RZ/G2M數(shù)據(jù)手冊(cè)

    在AWS Graviton4處理器上運(yùn)行大語(yǔ)言模型的性能評(píng)估

    亞馬遜云科技 (AWS) 新一代基于 Arm 架構(gòu)的定制 CPU —— AWS Graviton4 處理器已于 2024 年 7 月正式上線。這款先進(jìn)的處理器基于 64 位 Arm
    的頭像 發(fā)表于 02-24 10:28 ?1395次閱讀
    在AWS Graviton4<b class='flag-5'>處理器</b>上運(yùn)行大語(yǔ)言模型的性能評(píng)估

    Arm技術(shù)助力Google Axion處理器加速AI工作負(fù)載推理

    Arm Neoverse V2 平臺(tái)賦能的 Google Axion 處理器已在 Google Cloud 上正式上線,其中,C4A 是首款基于 Axion 的云虛擬機(jī),為基于 CPU 的人工智能 (AI) 推理和通用云工作負(fù)載實(shí)現(xiàn)了顯著的性能飛躍。
    的頭像 發(fā)表于 02-14 14:11 ?1117次閱讀
    <b class='flag-5'>Arm</b>技術(shù)助力Google Axion<b class='flag-5'>處理器</b>加速AI工作負(fù)載推理

    RV1109處理器概述

    RV1109處理器是一款集成了先進(jìn)技術(shù)的高性能芯片,其主要特性彰顯了在多個(gè)領(lǐng)域的強(qiáng)大應(yīng)用能力。 該處理器搭載了雙核設(shè)計(jì),結(jié)合了ARM Cortex-A7處理器核心與RISC-V MCU
    的頭像 發(fā)表于 02-08 17:04 ?2052次閱讀

    如何將ADS1278通過SPI與處理器連接?

    在設(shè)計(jì)電路時(shí),由于采用ADS1278進(jìn)行8通道同步采樣,通過SPI接口與ARM處理器的SPI接口進(jìn)行連接,而ADS1278工作在Discrete模式下,請(qǐng)問專家如何將ADS1278通過SPI與處理器連接?此時(shí)DOUT1-8如
    發(fā)表于 02-07 07:31

    量子處理器的作用_量子處理器的優(yōu)缺點(diǎn)

    量子處理器(QPU),又稱量子級(jí)計(jì)算機(jī)處理器,是量子計(jì)算機(jī)中的核心部件,其作用主要體現(xiàn)在以下幾個(gè)方面:   一、高速計(jì)算與處理能力   量子處理器利用量子比特的疊加和糾纏特
    的頭像 發(fā)表于 01-27 13:44 ?1724次閱讀

    量子處理器是什么_量子處理器原理

    量子處理器(QPU)是量子計(jì)算機(jī)的核心部件,它利用量子力學(xué)原理進(jìn)行高速數(shù)學(xué)和邏輯運(yùn)算、存儲(chǔ)及處理量子信息。以下是對(duì)量子處理器的詳細(xì)介紹:
    的頭像 發(fā)表于 01-27 11:53 ?2039次閱讀