• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于彈載嵌入式軟件在線更新方法研究

      2023-01-09 11:27:12張永鵬
      火控雷達(dá)技術(shù) 2022年4期
      關(guān)鍵詞:程序模塊程序代碼嵌入式軟件

      張永鵬

      (1.中國(guó)電子科技集團(tuán)公司第三十八研究所 合肥 230088; 2.孔徑陣列與空間探測(cè)安徽省重點(diǎn)實(shí)驗(yàn)室 合肥 230088)

      0 引言

      現(xiàn)有彈載產(chǎn)品中包含大量的DSP、FPGA等嵌入式模塊,在產(chǎn)品生產(chǎn)交付后,伴隨著產(chǎn)品功能、性能的升級(jí)改進(jìn),需要對(duì)內(nèi)部嵌入式軟件進(jìn)行更新。傳統(tǒng)嵌入式軟件一般采用專用編程線纜及相應(yīng)的仿真器連接芯片后對(duì)軟件進(jìn)行更新,此方法需專人操作且操作復(fù)雜、靈活性低[1-3]。

      本文以某彈載雷達(dá)嵌入式DSP芯片TMS320C6713(簡(jiǎn)稱C6713)為例,提供一種可靠性高、操作便捷的嵌入式軟件在線更新方法,實(shí)現(xiàn)彈載產(chǎn)品嵌入式軟件高效的軟件在線更新。此方法極大地提升了彈載產(chǎn)品軟件在線更新的可靠性、安全性和操作便捷性,具有良好的工程應(yīng)用價(jià)值。

      1 在線更新機(jī)理

      1.1 在線更新原理

      嵌入式軟件為了支持在線自更新任務(wù),需要在系統(tǒng)中單獨(dú)設(shè)計(jì)一個(gè)區(qū)別于正常工作程序模塊,專用于嵌入式軟件更新的在線更新程序模塊,如圖1所示。系統(tǒng)正常工作啟動(dòng)時(shí)通過(guò)BootLoader程序(即引導(dǎo)程序)選擇啟動(dòng)工作程序模塊,此時(shí)在線更新程序模塊處于阻塞狀態(tài),當(dāng)需要進(jìn)行軟件在線更新時(shí),工作程序模塊接收外部在線更新控制指令,完成在線更新?tīng)顟B(tài)置位(FLASH地址“0x90070000”存儲(chǔ)在線更新標(biāo)識(shí)),同時(shí)嵌入式DSP軟件通過(guò)調(diào)用Jump(0)函數(shù),將嵌入式軟件重新轉(zhuǎn)入起始0地址開(kāi)始執(zhí)行,即可實(shí)現(xiàn)進(jìn)行嵌入式DSP的自復(fù)位。復(fù)位后,自動(dòng)重新運(yùn)行BootLoader程序,此時(shí)BootLoader程序根據(jù)在線狀態(tài)啟動(dòng)在線更新程序模塊,此時(shí)可接收外部待更新的工作程序文件,并將程序文件寫(xiě)入到工作程序模塊的FLASH儲(chǔ)存地址中,即可完成工作程序模塊的在線更新操作[4-7]。

      圖1 在線更新系統(tǒng)架構(gòu)示意圖

      1.2 自啟動(dòng)原理

      C6000系列沒(méi)有自帶的FLASH存儲(chǔ)器,需要通過(guò)EMIF總線與外擴(kuò)的FLASH儲(chǔ)存芯片進(jìn)行通信,因此將程序文件通過(guò)EMIF寫(xiě)入到外擴(kuò)的FLASH中,系統(tǒng)上電復(fù)位后,再通過(guò)FLASH進(jìn)行引導(dǎo)自啟動(dòng),C6713啟動(dòng)時(shí)通過(guò)EDMA自動(dòng)將FLASH起始地址的前1KB內(nèi)容搬移到內(nèi)部的RAM中,并自動(dòng)執(zhí)行該段程序?;贑6713的啟動(dòng)機(jī)制,將BootLoader程序文件寫(xiě)入FLASH的起始地址的前1 KB的地址區(qū)中,BootLoader程序主要功能是將FLASH中存放的在線更新程序或工作程序搬移到C6713的RAM/SDRAM中,再通過(guò)調(diào)用Jump()跳轉(zhuǎn)程序,跳轉(zhuǎn)到程序起始地址,即可執(zhí)行該段軟件程序[8-12]。

      2 軟件設(shè)計(jì)流程

      2.1 在線更新系統(tǒng)架構(gòu)

      基于高可靠、易操作的設(shè)計(jì)原則,C6713的軟件在線更新主要分為兩部分:第一部分為嵌入式軟件模塊,此模塊主要包含3個(gè)子程序模塊,分別為BootLoader程序模塊、在線更新程序模塊和工作程序模塊,主要實(shí)現(xiàn)C6713的嵌入式系統(tǒng)的引導(dǎo)、軟件在線更新及正常工作;第二部分為PC端可視化在線更新上位機(jī),主要完成軟件程序文件的生成及“一鍵式”嵌入式系統(tǒng)的軟件在線更新。

      如圖2所示,彈載嵌入式系統(tǒng)的軟件在線更新主要由可視化在線更新上位機(jī)、RS422串口通信模塊和嵌入式系統(tǒng)組成。可視化在線更新上位機(jī)通過(guò)RS422通信模塊與嵌入式系統(tǒng)進(jìn)行相互通信,完成在線更新指令和待更新程序文件的上傳等操作;嵌入式系統(tǒng)與可視化在線更新上位機(jī)進(jìn)行數(shù)據(jù)的交互,根據(jù)在線更新指令完成在線更新?tīng)顟B(tài)的切換,并對(duì)接收程序數(shù)據(jù)文件的正確性、有效性進(jìn)行判斷,最終完成軟件程序文件的在線FLASH擦寫(xiě)操作。

      圖2 在線更新系統(tǒng)架構(gòu)示意圖

      2.2 嵌入式軟件設(shè)計(jì)

      基于系統(tǒng)在線更新高可靠性、安全性的設(shè)計(jì)需求,將C6713外掛的軟件程序存儲(chǔ)FLASH劃分為4個(gè)獨(dú)立的程序區(qū),分別為BootLoader程序區(qū)、在線更新程序區(qū)和工作程序區(qū),其中工作程序區(qū)還分為當(dāng)前工作程序區(qū)和舊工作程序區(qū)。FLASH存儲(chǔ)區(qū)劃分如圖3所示,其中BootLoader程序區(qū)為64KB,在線更新程序區(qū)為320KB,前工作程序區(qū)和舊工作程序區(qū)均為736KB。

      圖3 FLASH存儲(chǔ)區(qū)劃分示意圖

      BootLoader程序區(qū)的前4KB存儲(chǔ)二級(jí)引導(dǎo)程序,該程序?qū)崿F(xiàn)將存儲(chǔ)在BootLoader程序區(qū)4KB~64KB的三級(jí)引導(dǎo)程序搬移到內(nèi)存中運(yùn)行,即實(shí)現(xiàn)了C6713的FLASH自啟動(dòng)。三級(jí)引導(dǎo)程序根據(jù)程序切換狀態(tài)將在線更新程序區(qū)或工作程序區(qū)的FLASH地址的代碼數(shù)據(jù)搬移到內(nèi)存中,再跳轉(zhuǎn)到相應(yīng)程序入口地址;在線更新程序區(qū)用于存儲(chǔ)在線更新程序模塊,該程序?qū)崿F(xiàn)與可視化在線更新上位機(jī)間的通信,并對(duì)工作程序區(qū)FLASH地址上存儲(chǔ)的工作程序代碼數(shù)據(jù)進(jìn)行擦寫(xiě)操作;當(dāng)前工作程序區(qū)用于存儲(chǔ)最新版本的工作程序代碼數(shù)據(jù),用于嵌入式系統(tǒng)的正常工作使用;舊工作程序區(qū)用于存儲(chǔ)前一版本的工作程序代碼數(shù)據(jù),用于嵌入式系統(tǒng)工作程序的備份和異常情況工作程序版本恢復(fù)。

      同時(shí),在線更新程序僅可更新“當(dāng)前工作程序區(qū)”和“舊工作程序區(qū)”的程序數(shù)據(jù),不可更新“BootLoader程序區(qū)”和“在線更新程序區(qū)”的程序數(shù)據(jù),BootLoader程序和在線更新程序僅在出廠時(shí)進(jìn)行更新,以保障該兩段軟件程序代碼的正確性和完整性。在對(duì)“工作程序區(qū)”的代碼數(shù)據(jù)進(jìn)行更新過(guò)程中,將已存儲(chǔ)的于“當(dāng)前工作程序區(qū)”的前一版本的工作程序代碼數(shù)據(jù)向“舊工作程序區(qū)”進(jìn)行搬移,實(shí)現(xiàn)了工作程序代碼數(shù)據(jù)的備份,在工作程序更新失敗、代碼數(shù)據(jù)錯(cuò)誤、FLASH局部數(shù)據(jù)損壞等異常情況下,“當(dāng)前工作程序區(qū)”的代碼數(shù)據(jù)無(wú)法正常工作,在三級(jí)引導(dǎo)搬移當(dāng)前工作程序區(qū)數(shù)據(jù)時(shí),判斷程序數(shù)據(jù)異??芍匦掳嵋婆f工作程序區(qū)的備份代碼數(shù)據(jù),避免異常程序?qū)ο到y(tǒng)造成損壞。因此,通過(guò)對(duì)工作程序的備份設(shè)計(jì),可有效地提高系統(tǒng)的可靠性和安全性。

      2.2.1 BootLoader程序設(shè)計(jì)

      C6713復(fù)位后,通過(guò)EDMA自動(dòng)將存儲(chǔ)在FLASH起始地址的前1KB的BootLoader程序搬移到C6713內(nèi)部RAM中運(yùn)行,完成了C6713的FLASH的自啟動(dòng)及后續(xù)工作/在線更新程序的搬移和跳轉(zhuǎn)。

      BootLoader程序的設(shè)計(jì)流程如下:首先完成系統(tǒng)時(shí)鐘、EMIF總線及中斷等初始化;其次,通過(guò)EMIF讀取存儲(chǔ)在FLASH地址“0x90070000”的更新?tīng)顟B(tài)標(biāo)識(shí)字,并對(duì)該地址的標(biāo)識(shí)字進(jìn)行有效性校驗(yàn);若該標(biāo)識(shí)有效則根據(jù)此有效標(biāo)識(shí)判斷本次進(jìn)入正常工作態(tài)或在線更新態(tài)若無(wú)效則進(jìn)入在線更新態(tài);若該標(biāo)識(shí)字無(wú)效,因在線更新軟件屬于出廠軟件,故則本次在線更新態(tài),并反饋相應(yīng)狀態(tài)。

      進(jìn)入正常工作態(tài)后,軟件執(zhí)行流程如下:

      1)首先讀取FLASH存儲(chǔ)器中“當(dāng)前工作程序區(qū)”的新版本程序代碼數(shù)據(jù),并對(duì)讀取的數(shù)據(jù)內(nèi)容進(jìn)行CRC32校驗(yàn),并與存儲(chǔ)的校驗(yàn)值進(jìn)行判斷;

      2)若新版本代碼數(shù)據(jù)有效,則將該代碼數(shù)據(jù)搬移到C6713中的RAM/SDRAM內(nèi)存中,并跳轉(zhuǎn)到該程序的入口地址上,執(zhí)行新版本的工作程序;

      3)若新版本代碼數(shù)據(jù)無(wú)效,則讀取FLASH存儲(chǔ)器中“舊工作程序區(qū)”的前一版本程序代碼數(shù)據(jù),并判斷數(shù)據(jù)內(nèi)容的有效性;

      4)若前一版本代碼數(shù)據(jù)有效,則將該代碼數(shù)據(jù)搬移到C6713中的RAM/SDRAM內(nèi)存中,并跳轉(zhuǎn)到該程序的入口地址上,執(zhí)行前一版本的工作程序;

      5)若前一版本代碼數(shù)據(jù)無(wú)效,則轉(zhuǎn)入在線更新態(tài)。

      進(jìn)入在線更新態(tài)后,軟件執(zhí)行流程如下:

      1)讀取FLASH存儲(chǔ)器中“在線更新程序區(qū)”的在線更新程序代碼數(shù)據(jù);

      2)將讀取的代碼數(shù)據(jù)搬移到C6713中的RAM/SDRAM內(nèi)存中,并跳轉(zhuǎn)到該程序的入口地址上,執(zhí)行在線更新程序。

      BootLoader程序執(zhí)行流程如圖4所示。

      圖4 BootLoader程序執(zhí)行流程

      2.2.2 在線更新程序設(shè)計(jì)

      在線更新程序通過(guò)與可視化在線更新上位機(jī)間進(jìn)行通信,接收上位機(jī)下傳的待更新代碼程序數(shù)據(jù),將接收到的完整、正確的程序代碼數(shù)據(jù)更新,并將前一版本的代碼數(shù)據(jù)進(jìn)行備份。為提高在線更新過(guò)程中的可靠性、安全性,對(duì)各個(gè)數(shù)據(jù)包進(jìn)行握手、重傳、校驗(yàn)等方式進(jìn)行處理;同時(shí),完成所有代碼數(shù)據(jù)的接收后,并對(duì)整個(gè)程序文件數(shù)據(jù)進(jìn)行特殊的CRC32位校驗(yàn),確保上傳程序數(shù)據(jù)文件的正確性和有效性;進(jìn)一步,對(duì)寫(xiě)入FLASH地址的數(shù)據(jù)回讀后與待寫(xiě)入的數(shù)據(jù)進(jìn)行對(duì)比,確保FLASH寫(xiě)入數(shù)據(jù)的準(zhǔn)確。

      在線更新程序執(zhí)行流程如下:

      1)通過(guò)RS422串口采用“握手”方式與PC端的可視化在線更新上位機(jī)建立連接;

      2)通過(guò)握手、校驗(yàn)、重傳等方式接收可視化在線更新上位機(jī)下發(fā)的當(dāng)前程序文件的入口地址、長(zhǎng)度、文件特殊校驗(yàn)碼等信息,再通過(guò)分包形式接收程序代碼數(shù)據(jù),并將接收的數(shù)據(jù)存儲(chǔ)到SDRAM中進(jìn)行臨時(shí)存儲(chǔ);

      3)接收完所有代碼數(shù)據(jù)后,對(duì)接收的程序代碼文件進(jìn)行特殊校驗(yàn)碼校驗(yàn),并與存儲(chǔ)的特殊校驗(yàn)碼進(jìn)行判斷,判斷接收的代碼數(shù)據(jù)文件是否為該嵌入式軟件的程序,確保程序文件的正確性;

      4)對(duì)各個(gè)寫(xiě)入到FLASH地址的數(shù)據(jù)進(jìn)行回讀,與待寫(xiě)入的數(shù)據(jù)進(jìn)行比較,確認(rèn)寫(xiě)入FLASH數(shù)據(jù)的一致性;

      5)將前一版本工作程序文件搬移到“舊工作程序區(qū)”進(jìn)行備份;

      6)完成所有操作后,更新FLASH地址“0x90070000”的更新?tīng)顟B(tài)標(biāo)識(shí)字為正常工作態(tài),系統(tǒng)再次啟動(dòng)時(shí)可正常進(jìn)入最新版本工作程序。

      在線更新程序設(shè)計(jì)流程如圖5所示。

      圖5 在線更新程序執(zhí)行流程

      2.2.3 工作程序設(shè)計(jì)

      工作程序主要完成彈載嵌入式系統(tǒng)的正常工作。同時(shí),具備與可視化在線更新上位機(jī)間進(jìn)行通信,可接收上位機(jī)下發(fā)的在線更新指令,更新FLASH地址“0x90070000”的更新?tīng)顟B(tài)標(biāo)識(shí)字為在線更新態(tài),再完成系統(tǒng)的自復(fù)位。

      2.3 可視化在線更新上位機(jī)設(shè)計(jì)

      C6713工作程序通過(guò)CCS編譯完成后生成的目標(biāo)文件類型為*.out和*.map文件,無(wú)法直接用于C6713的更新使用,需進(jìn)行格式轉(zhuǎn)換[13-16]。因此,可視化在線更新上位機(jī)實(shí)現(xiàn)了軟件程序文件的格式轉(zhuǎn)換及與嵌入式系統(tǒng)間的通信交互。

      軟件程序*.out和*.map文件轉(zhuǎn)換*.bin文件的處理流程如下:

      1)根據(jù)*.map文件獲取程序代碼RAM和SAMR存儲(chǔ)的長(zhǎng)度、主函數(shù)的入口地址等信息;

      2)將*.out文件通過(guò)hex6x.exe、*.cmd文件轉(zhuǎn)換到*.hex;(hex6x.exe為T(mén)I公司提供文件轉(zhuǎn)換可執(zhí)行程序;*.cmd文件負(fù)責(zé)C6713的內(nèi)存分配。)

      3)將*.hex轉(zhuǎn)換到*.bin文件,并計(jì)算軟件程序文件的特殊校驗(yàn)碼;

      4)將轉(zhuǎn)換后的*.bin、特殊校驗(yàn)碼和讀取的*.map文件中的信息拼接成最終可用于在線更新的*.bin文件。

      將最終生成好的*.bin文件采用“一鍵化”操作方式完成與嵌入式系統(tǒng)的信息交互,完成在線更新操作。具體流程如下:

      1)在“在線更新上位機(jī)”上選擇正確的COM串口,點(diǎn)擊“連接串口”,實(shí)現(xiàn)與嵌入式系統(tǒng)的通信;

      2)點(diǎn)擊“連接主控”,嵌入式軟件由正常工作程序切換更新?tīng)顟B(tài)并進(jìn)行自復(fù)位,重新進(jìn)入BootLoader程序,并根據(jù)更新?tīng)顟B(tài)啟動(dòng)在線更新程序;

      3)進(jìn)入在線更新程序后,回饋“在線更新上位機(jī)”已進(jìn)入在線更新態(tài);

      4)選擇待更新的程序文件,點(diǎn)擊“燒寫(xiě)主控軟件”將數(shù)據(jù)上傳給嵌入式在線更新軟件;

      5)完成所有數(shù)據(jù)上傳后,發(fā)送FLASH燒寫(xiě)指令給在線更新程序,在線更新程序完成待更新代碼數(shù)據(jù)的FLASH擦寫(xiě)和程序備份操作。

      在線更新軟件流程和上位機(jī)界面如圖6、圖7所示。

      圖6 可視化在線更新上位機(jī)執(zhí)行流程

      圖7 可視化在線更新上位機(jī)界面

      3 結(jié)束語(yǔ)

      本文提供了一種高可靠性、安全性和操作簡(jiǎn)潔的嵌入式軟件在線更新方法,實(shí)現(xiàn)了彈載嵌入式軟件快速、便捷的在線更新。對(duì)彈載產(chǎn)品嵌入式模塊的在線更新帶來(lái)了極大便利,在實(shí)際工程項(xiàng)目中取得了良好的應(yīng)用效果,對(duì)其他嵌入式產(chǎn)品軟件在線更新具有一定的參考價(jià)值。

      猜你喜歡
      程序模塊程序代碼嵌入式軟件
      基于信息檢索的軟件缺陷定位方法綜述*
      樂(lè)高M(jìn)INDSTORMSEV3軟件程序模塊開(kāi)發(fā)
      實(shí)時(shí)嵌入式軟件的測(cè)試技術(shù)
      基于Web網(wǎng)絡(luò)的環(huán)境信息通信系統(tǒng)設(shè)計(jì)
      計(jì)算機(jī)網(wǎng)絡(luò)信息安全未來(lái)發(fā)展趨勢(shì)
      ADSP TS201S Link口在多DSP系統(tǒng)中的應(yīng)用
      全景相機(jī)遙控器嵌入式軟件V1.0 相關(guān)操作分析
      電子制作(2017年17期)2017-12-18 06:40:56
      基于圖元裝接模式由程序流程圖自動(dòng)生成源代碼
      軟件工程(2016年11期)2017-01-17 16:56:57
      基于Eclipse的航天嵌入式軟件集成開(kāi)發(fā)環(huán)境設(shè)計(jì)與實(shí)現(xiàn)
      航天嵌入式軟件浮點(diǎn)運(yùn)算誤差分析與控制
      洛阳市| 大冶市| 鲜城| 当雄县| 淮阳县| 金门县| 河池市| 新安县| 锡林郭勒盟| 泗阳县| 临猗县| 朔州市| 铜川市| 丰宁| 综艺| 广东省| 仙居县| 肇东市| 大英县| 潮安县| 手游| 鄂伦春自治旗| 礼泉县| 安徽省| 东乡县| 孟津县| 来安县| 卢氏县| 章丘市| 泰州市| 抚顺县| 西乌| 运城市| 都兰县| 万宁市| 林甸县| 绵阳市| 临安市| 凤凰县| 嘉峪关市| 子洲县|