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處理器如何編寫B(tài)ootloader

strongerHuang ? 來源:strongerHuang ? 2023-07-26 09:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

關(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è)計(jì)與實(shí)現(xiàn)。

---來源百度百科

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

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

如何編寫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)系:

wKgaomTAcreAShl8AAC9qrwfuIw063.png

有很多方法可以引導(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ù)來完成此操作:

staticvoidBootJump(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),以上代碼僅供參考,主要是提供思路,方便大家理解。

如果還不能理解,建議結(jié)合bootloader實(shí)際項(xiàng)目進(jìn)行理解,比如之前給大家分享過的:STM32官方IAP例程詳細(xì)說明
審核編輯:湯梓紅

聲明:本文內(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)注

    68

    文章

    20069

    瀏覽量

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

    關(guān)注

    135

    文章

    9450

    瀏覽量

    385734
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3702

    瀏覽量

    132594
  • bootloader
    +關(guān)注

    關(guān)注

    2

    文章

    240

    瀏覽量

    47374

原文標(biāo)題:ARM處理器Bootloader底層流程

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    ARM處理器簡介及RISC設(shè)計(jì)要點(diǎn)

    ARM是一個32位RISC(精簡指令集)處理器架構(gòu),ARM處理器則是ARM架構(gòu)下的微處理器。
    的頭像 發(fā)表于 04-01 08:17 ?9766次閱讀
    <b class='flag-5'>ARM</b><b class='flag-5'>處理器</b>簡介及RISC設(shè)計(jì)要點(diǎn)

    ARM處理器ARM處理器工作模式

    ARM處理器狀態(tài)ARM處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:第一種為ARM狀態(tài),此時處理
    發(fā)表于 01-27 11:13

    ARM處理器ARM處理器工作模式

    ARM處理器狀態(tài)ARM處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:第一種為ARM狀態(tài),此時處理
    發(fā)表于 01-27 14:19

    什么是ARM處理器 ARM處理器有哪些系列

    ARM 處理器是一種低功耗高性能的 32 位 RISC(精簡指令系統(tǒng))處理器。從結(jié)構(gòu) 入手對其進(jìn)行分析,并針對目前流行的 ARM920T 核詳細(xì)描述其硬件結(jié)構(gòu)和編程。
    發(fā)表于 09-24 17:47

    Motorola微處理器bootloader分析與應(yīng)用

    以Motorola 32位處理器ColdFire5307 為例,分析、介紹Motorola公司用于嵌入式系統(tǒng)開發(fā)的dBUG通用bootloader 軟件的結(jié)構(gòu)、運(yùn)行原理及應(yīng)用。
    發(fā)表于 04-15 10:26 ?18次下載

    Motorola微處理器bootloader分析與應(yīng)用

    引 言??bootloader是用來完成系統(tǒng)啟動和系統(tǒng)軟件加載工作的程序。它是底層硬件和上層應(yīng)用軟件之間的一個中間件軟件,完成處理器和周邊電路正常運(yùn)行所要的初始化工
    發(fā)表于 03-11 12:39 ?1228次閱讀
    Motorola微<b class='flag-5'>處理器</b>的<b class='flag-5'>bootloader</b>分析與應(yīng)用

    ARM的位置無關(guān)程序設(shè)計(jì)在Bootloader中的應(yīng)用

    ARM的位置無關(guān)程序設(shè)計(jì)在Bootloader中的應(yīng)用 ARM處理器支持位置無關(guān)的程序設(shè)計(jì),這種程序加載到存儲的任意地址空間都可以正常運(yùn)
    發(fā)表于 03-29 15:12 ?1459次閱讀

    ARM,ARM處理器是什么意思

    ARM,ARM處理器是什么意思 ARM處理器簡介 ARM(Advanced RISC Mach
    發(fā)表于 03-26 10:53 ?5547次閱讀

    ARMBootloader啟動流程研究

    講述了基于ARM 處理器的嵌入式系統(tǒng)在上電啟動后應(yīng)用程序或操作系統(tǒng)運(yùn)行前,對處理器及其內(nèi)部功能模塊進(jìn)行初始化的過程,并結(jié)合經(jīng)過實(shí)際驗(yàn)證的代碼詳細(xì)的分析了S3C44B0 Bootloader
    發(fā)表于 02-03 14:48 ?70次下載
    <b class='flag-5'>ARM</b>的<b class='flag-5'>Bootloader</b>啟動流程研究

    arm是什么處理器arm處理器匯總

    ARM處理器是Acorn計(jì)算機(jī)有限公司面向低預(yù)算市場設(shè)計(jì)的第一款RISC微處理器。更早稱作Acorn RISC Machine。ARM處理器
    發(fā)表于 11-10 16:32 ?3525次閱讀

    arm的協(xié)處理器有幾個?ARM協(xié)處理器詳解

    本文首先介紹了ARM處理器特點(diǎn)與主要模式,其次介紹了arm的協(xié)處理器有幾個,最后介紹了CP14和CP15系統(tǒng)控制協(xié)處理器
    發(fā)表于 04-24 15:34 ?9487次閱讀

    如何編寫ARM處理器Bootloader

    作者 | strongerHuang 微信公眾號 | strongerHuang 之前從應(yīng)用的角度給大家分享過Bootloader相關(guān)的文章,今天從底層原理來給大家描述ARM處理器如何編寫
    的頭像 發(fā)表于 10-27 11:02 ?4653次閱讀
    如何<b class='flag-5'>編寫</b><b class='flag-5'>ARM</b><b class='flag-5'>處理器</b>的<b class='flag-5'>Bootloader</b>

    結(jié)合 Keil 描述如何編寫ARM處理器Bootloader

    Bootloader顧名思義就是引導(dǎo)加載程序,是在操作系統(tǒng)或應(yīng)用程序運(yùn)行之前的一段程序,是在系統(tǒng)上電后執(zhí)行的一段程序代碼。
    發(fā)表于 02-08 15:43 ?5次下載
    結(jié)合 Keil 描述如何<b class='flag-5'>編寫</b><b class='flag-5'>ARM</b><b class='flag-5'>處理器</b>的<b class='flag-5'>Bootloader</b>

    ARM處理器如何編寫Bootloader呢?其底層流程是怎樣的呢?

    Bootloader顧名思義就是引導(dǎo)加載程序,是在操作系統(tǒng)或應(yīng)用程序運(yùn)行之前的一段程序,是在系統(tǒng)上電后執(zhí)行的一段程序代碼。
    發(fā)表于 08-08 10:28 ?1005次閱讀
    <b class='flag-5'>ARM</b><b class='flag-5'>處理器</b>如何<b class='flag-5'>編寫</b><b class='flag-5'>Bootloader</b>呢?其底層流程是怎樣的呢?

    arm處理器有哪些中斷源?arm處理器對異常中斷的響應(yīng)過程

    arm處理器有哪些中斷源?arm處理器對異常中斷的響應(yīng)過程? ARM處理器是一種廣泛使用的嵌入式
    的頭像 發(fā)表于 10-19 16:35 ?2172次閱讀