日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

以STM8單片機(jī)為例,該如何實(shí)現(xiàn)Bootloader呢?

Q4MP_gh_c472c21 ? 來(lái)源:玩轉(zhuǎn)嵌入式 ? 作者:劉小舒 ? 2020-11-16 16:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這次出差是為了升級(jí)程序解決Bug,用戶(hù)已經(jīng)將產(chǎn)品封裝起來(lái),無(wú)法開(kāi)蓋,只能使用CAN總線(xiàn)來(lái)更新程序,用Bootloader實(shí)現(xiàn)。其實(shí)就是通過(guò)上位機(jī)把.bin/hex文件以CAN通訊的方式發(fā)送給單片機(jī)并存儲(chǔ)在規(guī)定的Flash中。這個(gè)過(guò)程與手機(jī)端更新APP類(lèi)似。

STM8單片機(jī)為例,該如何實(shí)現(xiàn)Bootloader呢?今天和大家分享一下。

01

什么是Bootloader

Bootloader是一段用于更新自身應(yīng)用軟件并獨(dú)立運(yùn)行的代碼,常被用于升級(jí)產(chǎn)品和修復(fù)產(chǎn)品bug。STM8單片機(jī)如果要下載hex文件的話(huà)需要通過(guò)STVP和STLINK來(lái)實(shí)現(xiàn),單片機(jī)的引腳SWIM就是下載接口。如果產(chǎn)品在用戶(hù)端被封裝好了,無(wú)法通過(guò)SWIM來(lái)下載該怎么辦呢?就使用Bootloader,STM支持CAN和UART實(shí)現(xiàn)Bootloader。就是通過(guò)CAN通信或者UART通信將數(shù)據(jù)存放在STM8的Flash上。

02

劃分Flash區(qū)間

STM8的中斷向量跳轉(zhuǎn)地址是固定的,會(huì)跳轉(zhuǎn)到0x8000對(duì)應(yīng)中斷的偏移地址,所以會(huì)把Bootloader存放在0x8000開(kāi)始的空間內(nèi),比如給Bootloader代碼所劃分的空間為4k,那么空間起始地址為:0x8000-0x8FFF;那么應(yīng)用代碼的起始地址就可以從0x9000開(kāi)始。

03

修改中斷向量表

STM8的中斷向量表通過(guò)一段特定的代碼來(lái)實(shí)現(xiàn),并需要根據(jù)前文提到的空間劃分來(lái)修改。STM8的應(yīng)用程序起始地址是0x8400,默認(rèn)的向量表如下代碼所示。

__rootconstlongreintvec[]@".intvec"={0x82008080,0x82008404,0x82008408,0x8200840c,0x82008410,0x82008414,0x82008418,0x8200841c,0x82008420,0x82008424,0x82008428,0x8200842c,0x82008430,0x82008434,0x82008438,0x8200843c,0x82008440,0x82008444,0x82008448,0x8200844c,0x82008450,0x82008454,0x82008458,0x8200845c,0x82008460,0x82008464,0x82008468,0x8200846c,0x82008470,0x82008474,0x82008478,0x8200847c,};前文已經(jīng)將應(yīng)用程序的起始地址修改為0x9000,所以,向量表的的修改方法為:除了第一個(gè)元素為,其余的元素將8改為9,修改完后代碼如下:

__rootconstlongreintvec[]@".intvec"={0x82008080,0x82009404,0x82009408,0x8200940c,0x82009010,0x82009014,0x82009018,0x8200901c,0x82009020,0x82009024,0x82009028,0x8200902c,0x82009030,0x82009034,0x82009038,0x8200903c,0x82009040,0x82009044,0x82009048,0x8200904c,0x82009050,0x82009054,0x82009058,0x8200905c,0x82009060,0x82009064,0x82009068,0x8200906c,0x82009070,0x82009074,0x82009078,0x8200907c,};

04

修改ICF文件

ICF文件存放在編程環(huán)境的安裝目錄下,每個(gè)型號(hào)/系列的單片機(jī)都會(huì)對(duì)應(yīng)一個(gè)ICF 文件,需要修改一下ICF文件,這里需要根據(jù)flash空間的劃分來(lái)修改,前面將Bootloader的終止地址設(shè)置為0x9FFF,所以修改如下:

defineregionNearFuncCode=[from0x8000to0x8FFF];defineblockINTVECwithsize=0x80{rosection.intvec};place at start of NearFuncCode { block INTVEC };

05

跳轉(zhuǎn)命令

所謂跳轉(zhuǎn),就是在應(yīng)用程序中跳轉(zhuǎn)到Boot中去升級(jí);升級(jí)完成后需要跳轉(zhuǎn)到應(yīng)用程序中,所跳轉(zhuǎn)的起始就是起始地址。Bootloader跳轉(zhuǎn)到應(yīng)用程序的代碼如下,

asm("LDW X, SP ");asm("LDA,$FF");asm("LDXL,A");asm("LDWSP,X");asm("JPF$9000");應(yīng)用程序跳轉(zhuǎn)到Bootloader中的代碼如下

sm("LDW X, SP ");asm("LDA,$FF");asm("LDXL,A");asm("LDWSP,X");asm("JPF$8000");

06

編寫(xiě)交互代碼

以上設(shè)置好之后,就可以編寫(xiě)交互代碼了,所以交互代碼其實(shí)就是一套協(xié)議,規(guī)定了應(yīng)用程序如何跳轉(zhuǎn)到Boot,在Boot中如何處理和存儲(chǔ)數(shù)據(jù),這需要上位機(jī)的支持。如果只是用于自家的產(chǎn)品,就可以自己定義協(xié)議。也可以使用標(biāo)準(zhǔn)的協(xié)議,比如汽車(chē)行業(yè)中的UDS(統(tǒng)一診斷服務(wù))。 Bootloader實(shí)現(xiàn)之后,就可以使用CAN/UART來(lái)實(shí)現(xiàn)產(chǎn)品固件的升級(jí)了。這就是Bootloader的關(guān)鍵內(nèi)容,本文你學(xué)會(huì)了嗎?留言討論一下吧。

責(zé)任編輯:lq

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

    關(guān)注

    6078

    文章

    45593

    瀏覽量

    674036
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    59

    文章

    3097

    瀏覽量

    473594
  • STM8
    +關(guān)注

    關(guān)注

    18

    文章

    393

    瀏覽量

    58876

原文標(biāo)題:?jiǎn)纹瑱C(jī)的Bootloader,可以實(shí)現(xiàn)用戶(hù)輕松升級(jí)程序

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    探索COP8SA系列8單片機(jī):特點(diǎn)、性能與應(yīng)用優(yōu)勢(shì)

    單片機(jī)憑借其卓越的特性,工程師們提供了一個(gè)頗具吸引力的選擇。 文件下載: COP8SAA716M7.pdf 一、COP8SA系列概述 COP8
    的頭像 發(fā)表于 04-19 09:05 ?141次閱讀

    Infineon XC866 8單片機(jī):特性、功能與應(yīng)用解析

    單片機(jī)就是其中的佼佼者,它融合了高性能、豐富的外設(shè)和靈活的配置,工程師們提供了強(qiáng)大的設(shè)計(jì)工具。本文將深入探討XC866的特性、功能和應(yīng)用,幫助電子工程師更好地了解和應(yīng)用這款單片機(jī)。 文件下載: XC8661FRIABKXUM
    的頭像 發(fā)表于 03-30 16:30 ?225次閱讀

    項(xiàng)目選型必看:單片機(jī)與PLC究竟怎么選?

    工業(yè)控制為何用PLC而不用單片機(jī)? 這是一個(gè)在工業(yè)自動(dòng)化領(lǐng)域非常經(jīng)典的問(wèn)題。簡(jiǎn)單來(lái)說(shuō), PLC是工業(yè)環(huán)境而設(shè)計(jì)的“加固型”工業(yè)控制計(jì)算機(jī),而單片機(jī)只是一個(gè)需要開(kāi)發(fā)者從頭搭建系統(tǒng)的核心芯片。 雖然
    的頭像 發(fā)表于 03-27 15:47 ?265次閱讀
    項(xiàng)目選型必看:<b class='flag-5'>單片機(jī)</b>與PLC究竟<b class='flag-5'>該</b>怎么選?

    瑞薩8單片機(jī)740族:技術(shù)剖析與設(shè)計(jì)指南

    瑞薩8單片機(jī)740族:技術(shù)剖析與設(shè)計(jì)指南 在當(dāng)今的電子設(shè)計(jì)領(lǐng)域,單片機(jī)以其小巧靈活、功能強(qiáng)大等特點(diǎn),成為了眾多工程師的首選。瑞薩電子的8單片機(jī)
    的頭像 發(fā)表于 03-17 15:15 ?316次閱讀

    單片機(jī)里的程序運(yùn)行方式

    我們想要理解單片機(jī)是如何運(yùn)行程序的,我們首先需要了解單片機(jī)的組成,我們這里80C51單片機(jī)
    發(fā)表于 01-16 06:57

    單片機(jī)的入門(mén)準(zhǔn)備

    、修改例程,學(xué)習(xí)板載體,自己新建編程工程,用自己的編程思想讓外設(shè)電路實(shí)現(xiàn)想要的功能,程序是靈活的,每個(gè)人都有不同的編程思想,多試幾種方法,提高程序的執(zhí)行效率,鍛煉自己的編程能力; 單片機(jī)
    發(fā)表于 12-22 07:39

    MCU單片機(jī)CH569實(shí)現(xiàn)USB3.0超高速U盤(pán)與藍(lán)牙加密應(yīng)用

    在嵌入式系統(tǒng)設(shè)計(jì)中,MCU單片機(jī)的性能直接決定了終端產(chǎn)品的功能高度。英尚微電子代理的沁恒CH569,這款MCU單片機(jī)憑借其高度集成的設(shè)
    的頭像 發(fā)表于 12-15 15:23 ?771次閱讀

    浮思特 | 電子溫度計(jì)單片機(jī)如何選型?ABOV單片機(jī)提供幾點(diǎn)很關(guān)鍵!

    一個(gè)優(yōu)秀的電子溫度計(jì),其核心往往在于內(nèi)部單片機(jī)(MCU)的性能與匹配度。如何選擇一款合適的單片機(jī),實(shí)現(xiàn)精準(zhǔn)、穩(wěn)定、低功耗的溫度測(cè)量與交互,是產(chǎn)品開(kāi)發(fā)中的重要課題。本文將從技術(shù)維度,
    的頭像 發(fā)表于 12-15 09:43 ?800次閱讀
    浮思特 | 電子溫度計(jì)<b class='flag-5'>單片機(jī)</b>如何選型?ABOV<b class='flag-5'>單片機(jī)</b>提供幾點(diǎn)很關(guān)鍵!

    單片機(jī)位數(shù)的思考(8位、16位、32位)

    8位、16位、32位是指單片機(jī)的“字長(zhǎng)”,也就是一次運(yùn)算中參與運(yùn)算的數(shù)據(jù)長(zhǎng)度,這個(gè)位是指二進(jìn)制位。8
    發(fā)表于 11-21 08:31

    Bootloader固件升級(jí)的步驟

    一、Bootloader 概念及用處 1、BootLoader 是一段引導(dǎo)式程序,就是單片機(jī)啟動(dòng)時(shí)候運(yùn)行的一段小程序,這段程序負(fù)責(zé)單片機(jī)固件的更新,也就是
    發(fā)表于 11-19 07:41

    浮思特 | 如何通過(guò)現(xiàn)代(ABOV)8單片機(jī)實(shí)現(xiàn)智能家居與工業(yè)控制的升級(jí)

    8單片機(jī)。作為現(xiàn)代(ABOV)的合作代理商,我們(浮思特科技)深知這些單片機(jī)智能家居和工業(yè)應(yīng)用帶來(lái)的卓越價(jià)值,致力于將這類(lèi)高性?xún)r(jià)比方案推向市場(chǎng),
    的頭像 發(fā)表于 09-09 10:07 ?1007次閱讀
    浮思特 | 如何通過(guò)現(xiàn)代(ABOV)<b class='flag-5'>8</b>位<b class='flag-5'>單片機(jī)</b><b class='flag-5'>實(shí)現(xiàn)</b>智能家居與工業(yè)控制的升級(jí)

    單片機(jī)采用什么電流控制

    單片機(jī)作為電子系統(tǒng)的控制核心,其電流控制涉及自身工作電流管理與外部設(shè)備電流驅(qū)動(dòng)兩個(gè)層面。由于單片機(jī)內(nèi)部電路的特性,其自身工作電流較小,而控制外部設(shè)備時(shí)需通過(guò)特定電路實(shí)現(xiàn)電流放大與調(diào)節(jié),
    的頭像 發(fā)表于 07-30 10:07 ?919次閱讀

    單片機(jī)怎么驅(qū)動(dòng)電機(jī)?

    在各類(lèi)自動(dòng)化設(shè)備和智能裝置中,電機(jī)是重要的執(zhí)行部件,而單片機(jī)作為控制核心,需要通過(guò)特定的方式驅(qū)動(dòng)電機(jī)運(yùn)轉(zhuǎn)。單片機(jī)驅(qū)動(dòng)電機(jī)并非直接連接即可,而是要根據(jù)電機(jī)類(lèi)型和功率,搭配合適的驅(qū)動(dòng)電路,才能實(shí)現(xiàn)穩(wěn)定
    的頭像 發(fā)表于 07-25 09:31 ?1365次閱讀

    STM8 C語(yǔ)言精品編程100

    今天來(lái)分享一下關(guān)于STM8單片機(jī)的相關(guān)資料文檔,感興趣的網(wǎng)友可以自行下載。單片機(jī)是芯片開(kāi)發(fā)的基礎(chǔ),相信從中會(huì)獲得您意想不到的知識(shí)。 獲取完整文檔資料可下載附件哦?。。?! 如果內(nèi)容有幫助可以關(guān)注、點(diǎn)贊、評(píng)論支持一下哦~
    發(fā)表于 07-17 16:08

    你們還在用8單片機(jī)嗎?

    最近在公司接手了個(gè)挺讓人撓頭的活兒 —— 給一塊老板子換 MCU。說(shuō)起來(lái)這板子還是近五年的產(chǎn)品,用的 STM8 單片機(jī),功能掰著手指頭都能數(shù)過(guò)來(lái),估摸著稍微加點(diǎn)復(fù)雜度這 8機(jī)就扛不
    的頭像 發(fā)表于 05-15 11:04 ?755次閱讀
    你們還在用<b class='flag-5'>8</b>位<b class='flag-5'>單片機(jī)</b>嗎?
    辰溪县| 全州县| 遂平县| 龙口市| 仁寿县| 剑阁县| 蒙山县| 台江县| 罗平县| 霍山县| 瑞安市| 西盟| 镇坪县| 平江县| 阳春市| 凉城县| 凤台县| 突泉县| 临汾市| 白沙| 白沙| 双流县| 屯昌县| 盘山县| 家居| 武隆县| 随州市| 体育| 万宁市| 灌南县| 游戏| 金乡县| 老河口市| 博湖县| 玉溪市| 阿克陶县| 芷江| 马关县| 郧西县| 永吉县| 洱源县|