欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(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)的,特別是在嵌入式平臺(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)目需求。

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

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)是最新時(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ù)來完成此操作:

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

如果還不能理解,建議結(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ī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19432

    瀏覽量

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

    關(guān)注

    134

    文章

    9176

    瀏覽量

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

    關(guān)注

    41

    文章

    3626

    瀏覽量

    129772
  • bootloader
    +關(guān)注

    關(guān)注

    2

    文章

    235

    瀏覽量

    45745

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    ARM是一個(gè)32位RISC(精簡指令集)處理器架構(gòu),ARM處理器則是ARM架構(gòu)下的微處理器。
    的頭像 發(fā)表于 04-01 08:17 ?9352次閱讀
    <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),此時(shí)處理
    發(fā)表于 01-27 11:13

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

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

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

    ARM 處理器是一種低功耗高性能的 32 位 RISC(精簡指令系統(tǒng))處理器。從結(jié)構(gòu) 入手對(duì)其進(jìn)行分析,并針對(duì)目前流行的 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)啟動(dòng)和系統(tǒng)軟件加載工作的程序。它是底層硬件和上層應(yīng)用軟件之間的一個(gè)中間件軟件,完成處理器和周邊電路正常運(yùn)行所要的初始化工
    發(fā)表于 03-11 12:39 ?1104次閱讀
    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ì),這種程序加載到存儲(chǔ)的任意地址空間都可以正常運(yùn)
    發(fā)表于 03-29 15:12 ?1269次閱讀

    ARM,ARM處理器是什么意思

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

    ARMBootloader啟動(dòng)流程研究

    講述了基于ARM 處理器的嵌入式系統(tǒng)在上電啟動(dòng)后應(yīng)用程序或操作系統(tǒng)運(yùn)行前,對(duì)處理器及其內(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>啟動(dòng)流程研究

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

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

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

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

    如何編寫ARM處理器Bootloader

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

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

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