国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何編寫ARM處理器的Bootloader

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

掃碼添加小助手

加入工程師交流群

作者 | strongerHuang

微信公眾號 | strongerHuang

之前從應用的角度給大家分享過Bootloader相關的文章,今天從底層原理來給大家描述ARM處理器如何編寫Bootloader。

1關于Bootloader

Bootloader顧名思義就是引導加載程序,是在操作系統或應用程序運行之前的一段程序,是在系統上電后執行的一段程序代碼

BootLoader是嚴重地依賴于硬件而實現的,特別是在嵌入式平臺。因此,在嵌入式平臺里建立一個通用的BootLoader幾乎是不可能的。盡管如此,我們仍然可以對bootloader歸納出一些通用的概念來,以指導用戶特定的BootLoader設計與實現。

---來源百度百科

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

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

2如何編寫bootloader

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

在執行引導ROM之后,將執行bootloader程序,并在需要時進行更新,然后執行最終用戶應用程序。

引導加載程序和用戶應用程序應作為兩個獨立的Project或Object進行編寫和編譯,從而產生兩個獨立且可執行的(bin/hex)文件。

引導加載程序的主要任務是在必要時對用戶應用程序進行重新編程/替換,并跳轉至用戶應用程序以執行該程序,應用程序不一定需要知道引導加載程序的存在。

引導加載程序通常位于芯片閃存基址,下面通過一張圖來描述內存和Flash代碼映射關系:

有很多方法可以引導bootloader進入編程模式,以將用戶應用程序重新編程到Flash中,或者直接跳轉到現有的用戶應用程序來執行。最簡單的方法是檢查GPIO引腳以確定是否應進入編程模式。

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

當Flash內容已更新或已經是最新時,引導加載程序將跳轉到用戶應用程序。在執行用戶應用程序之前,這需要許多步驟:

1.確保CPU處于特權模式。

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

3.禁用所有可能產生中斷請求的使能外設,并清除這些外設中的所有未使用中斷標志。

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

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

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

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

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

9.最后一部分是將MSP設置為用戶應用程序向量表中找到的值,然后將用戶應用程序的重置向量值加載到PC中,也就是跳轉功能。

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

static void BootJump(uint32_t *Address){ //1.確保CPU處于特權模式。 if( CONTROL_nPRIV_Msk & __get_CONTROL()) { /* not in privileged mode */ EnablePrivilegedMode() ; } //2.禁用NVIC中所有啟用的中斷。 Disable_All_Peripherals(); //3.禁用所有可能產生中斷請求的使能外設,并清除這些外設中的所有未使用中斷標志。 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.如果引導加載程序使用了單個故障處理程序,請禁用它們。 SCB-》SHCSR &= ~( SCB_SHCSR_USGFAULTENA_Msk | \ SCB_SHCSR_BUSFAULTENA_Msk | \ SCB_SHCSR_MEMFAULTENA_Msk ) ; //7.如果發現內核當前與PSP一起運行,則激活MSP if( CONTROL_SPSEL_Msk & __get_CONTROL()) { /* MSP is not active */ __set_MSP( __get_PSP()) ; __set_CONTROL( __get_CONTROL() & ~CONTROL_SPSEL_Msk); } //8.將用戶應用程序的向量表地址加載到SCB-》 VTOR寄存器中。 SCB-》VTOR = ( uint32_t )Address ; //9.跳轉 BootJumpASM( Address[ 0 ], Address[ 1 ]);}

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

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    463

    文章

    54007

    瀏覽量

    465949
  • ARM
    ARM
    +關注

    關注

    135

    文章

    9552

    瀏覽量

    391845
  • 程序
    +關注

    關注

    117

    文章

    3846

    瀏覽量

    85232
  • keil
    +關注

    關注

    69

    文章

    1230

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Cortex-M0 處理器介紹

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

    NICE協處理器demo分析及測試

    實現思路: 1.硬件設計,編寫相應的verilog文件,需要注意的是NICE協處理器定義了一些基本的接口; 2.編寫驅動,通過內聯匯編的偽指令.insn配置相關的驅動設置; 3.編寫
    發表于 10-23 07:05

    基于E203 NICE協處理器擴展指令

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

    基于E203 NICE協處理器擴展指令2.0

    存儲讀寫結果。 調用協處理器的方法:擴展一個用RTL級代碼編寫的協處理器,想個辦法調用這個獨立于流水線的計算單元,即在MCU層面,在編譯
    發表于 10-21 10:39

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

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

    德州儀器AM62Ax Sitara?處理器技術解析

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

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

    有很多研究單片機的小伙伴在面對多核異構處理器時,可能會對多核的啟動流程感到困惑——因為不熟悉GCC編程和GDB調試,所以也無法確定多核異構處理器的程序是否能像單片機那樣方便地編寫和仿真。本篇
    的頭像 發表于 08-13 09:05 ?3985次閱讀
    【老法師】多核異構<b class='flag-5'>處理器</b>中M核程序的啟動、<b class='flag-5'>編寫</b>和仿真

    Texas Instruments 適用于AM64x Sitalog ?處理器的SK-AM64B入門套件數據手冊

    Texas Instruments適用于AM64x Sitara?處理器的SK-AM64B入門套件是一個獨立的測試和開發平臺,是加速設計原型階段的理想選擇。AM64x處理器由一個雙核64位ARM
    的頭像 發表于 07-28 10:20 ?787次閱讀
    Texas Instruments 適用于AM64x Sitalog ?<b class='flag-5'>處理器</b>的SK-AM64B入門套件數據手冊

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

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

    瑞薩MCU方案:瑞薩RZ/G2L Bootloader單獨編譯方法詳解

    ? RZ/G2L微處理器配備Cortex -A55(1.2 GHz)CPU、16位DDR3L/DDR4接口、帶Arm Mali-G31的3D圖形加速引擎以及視頻編解碼(H.264)。此外,這款
    的頭像 發表于 07-08 14:47 ?2625次閱讀
    瑞薩MCU方案:瑞薩RZ/G2L <b class='flag-5'>Bootloader</b>單獨編譯方法詳解

    集成了Arm? Cortex?-M0內核微處理器的電容處理器芯片

    ?電容處理器芯片的工作原理?主要基于電容傳感的原理,通過檢測電容的變化來感知物理量的變化。電容傳感利用兩個導體之間的電容變化來檢測各種物理量,如距離、位置、液位和壓力等?。
    的頭像 發表于 06-06 10:09 ?685次閱讀
    集成了<b class='flag-5'>Arm</b>? Cortex?-M0內核微<b class='flag-5'>處理器</b>的電容<b class='flag-5'>處理器</b>芯片

    龍芯處理器支持WINDOWS嗎?

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

    海光雙路服務主板,支持 5000/7000系列 2/3號處理器

    處理器
    jf_10805031
    發布于 :2025年04月02日 14:17:42

    集特 國產飛騰處理器工控主板GM9-2602

    處理器
    集特國產工控產品
    發布于 :2025年03月12日 14:07:04

    集成多種Arm內核的超高性能微處理器RZ/G2M數據手冊

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