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

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

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

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

如何編寫ARM處理器的Bootloader

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

掃碼添加小助手

加入工程師交流群

作者 | strongerHuang

微信公眾號 | 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)的,特別是在嵌入式平臺。因此,在嵌入式平臺里建立一個通用的BootLoader幾乎是不可能的。盡管如此,我們?nèi)匀豢梢詫ootloader歸納出一些通用的概念來,以指導(dǎo)用戶特定的BootLoader設(shè)計與實(shí)現(xiàn)。

---來源百度百科

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

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

2如何編寫bootloader

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

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

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

引導(dǎo)加載程序的主要任務(wù)是在必要時對用戶應(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)是最新時,引導(dǎo)加載程序?qū)⑻D(zhuǎn)到用戶應(yīng)用程序。在執(zhí)行用戶應(yīng)用程序之前,這需要許多步驟:

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

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

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

4.清除NVIC中所有未使用的中斷請求。

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

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

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

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

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)生中斷請求的使能外設(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中所有未使用的中斷請求。 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)加載程序使用了單個故障處理程序,請禁用它們。 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ī)問題,請聯(lián)系本站處理。 舉報投訴
  • 芯片
    +關(guān)注

    關(guān)注

    462

    文章

    53539

    瀏覽量

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

    關(guān)注

    135

    文章

    9499

    瀏覽量

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

    關(guān)注

    117

    文章

    3836

    瀏覽量

    84767
  • keil
    +關(guān)注

    關(guān)注

    69

    文章

    1224

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    Cortex-M0+處理器的HardFault錯誤介紹

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

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

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

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

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

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

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

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

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

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

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

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

    RV1109處理器概述

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

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

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

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

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

    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內(nèi)核處理器

    繼續(xù)原來給大家分享的內(nèi)容: 雙向逆變器之ARM內(nèi)核處理器 今天用開發(fā)板調(diào)試了一下工作所需要的波形時序,效果還不錯,軟件上最終還得用寄存操作,庫函數(shù)只能做簡單的功能,不方便
    的頭像 發(fā)表于 01-03 09:12 ?1335次閱讀
    雙向逆變器之<b class='flag-5'>ARM</b>內(nèi)核<b class='flag-5'>處理器</b>

    強(qiáng)悍的AWS Graviton4處理器及其背后的Arm Neoverse

    電子發(fā)燒友網(wǎng)報道(文/吳子鵬)在今年的亞馬遜re:Invent 2024大會上,該公司正式對外發(fā)布了旗下第四代自研Arm芯片——Graviton4。作為目前最強(qiáng)大的Graviton處理器
    的頭像 發(fā)表于 12-19 00:04 ?2907次閱讀