在實(shí)際應(yīng)用中,可以根據(jù)Flash的大小、程序代碼長度等因素靈活調(diào)節(jié)。如果采用dsPIC33FJ64GP710控制器,其Flash空間范圍為0x0000-0xFFFF,每頁的大小為0x100,則dsPIC33FJ64GP710的Flash空間地址典型分配如表1所示。應(yīng)用程序更新版本和正常版本的Flash空間大小都為0x7000,而且,不論是應(yīng)用程序正常版本或是更新版本,其第一個運(yùn)行的指令都是跳轉(zhuǎn)到BOOT程序,其最后的2組地址都用于存放新的、有效的標(biāo)志位。所以,當(dāng)更新升級程序時,僅需要將應(yīng)用程序更新版本中的更新程序整體拷入應(yīng)用程序正常版本中即可,而不需區(qū)分其中的標(biāo)志位、跳轉(zhuǎn)指令和程序本體,簡化了BOOT程序的設(shè)計(jì)。
2 BOOT功能的設(shè)計(jì)與實(shí)現(xiàn)
本軟件程序設(shè)計(jì)主要分為兩部分:應(yīng)用程序的設(shè)計(jì)和BOOT程序的設(shè)計(jì)。出廠時,應(yīng)用程序的正常版本放在圖1中(A)區(qū),而BOOT程序放在圖1中(C)區(qū)。更新時,僅對應(yīng)用程序進(jìn)行更新。
系統(tǒng)上電復(fù)位時,軟件首先跳轉(zhuǎn)至BOOT程序開始運(yùn)行。BOOT程序首先檢測圖1(B)區(qū)中的更新版本程序是新的、有效的,BOOT程序才會擦除圖1(A)區(qū)中的正常版本,再將圖1(B)區(qū)中的更新版本拷入圖1(A)區(qū)中,覆蓋正常版本后在圖1(A)區(qū)中設(shè)置正常版本有效標(biāo)志位;否則BOOT程序?qū)⒔K止軟件版本的更新,并設(shè)置更新失敗標(biāo)志。然后軟件將從圖1(C)區(qū)中BOOT程序跳回圖1(A)區(qū)中運(yùn)行應(yīng)用程序的正常版本。因?yàn)橹挥性诟掳姹居行r,才會擦除正常版本,因此,更新版本和正常版本不會同時無效。系統(tǒng)軟件主程序設(shè)計(jì)具體流程如圖2所示。
軟件在擦除(A)區(qū)的過程中如果出現(xiàn)異常(如系統(tǒng)掉電),將導(dǎo)致(A)區(qū)中的應(yīng)用程序破壞。然而,此時(B)區(qū)中的更新軟件是有效的,當(dāng)系統(tǒng)重新上電運(yùn)行時,BOOT程序會將(B)區(qū)中的更新軟件拷入(A)區(qū)中,然后從(A)區(qū)開始運(yùn)行,從而可以有效地解決常用版本更新方法存在的意外風(fēng)險(xiǎn)問題。Boots程序關(guān)鍵函數(shù)如下:
void EraseFlashPages(void) //用于擦除Flash中所指定區(qū)域;
void ProgramRow(unsigned char*ptrData,uReg32 SourceAddr)
//用于向指定的地址寫入ptrData所指向的數(shù)據(jù);
void ReadRow(unsigned char*ptrData,uReg32 SourceAddr)
//用于從指定的地址讀取數(shù)據(jù)到ptrData所指向的位置;
void SetFlag(unsigned long FlagAddr) //用于向指定的
地址寫入有效標(biāo)志;
void ClearFlag(unsigned long FlagAddr) //用于擦除指定地址的有效標(biāo)志。
3 DSP軟件更新方式與更新方法
3.1 DSP軟件更新方式
為了進(jìn)一步提高系統(tǒng)更新軟件的可靠性、靈活性,本文提供了3種更新方式:(1)在下載更新程序結(jié)束后,立即執(zhí)行更新操作;(2)在下載更新程序結(jié)束后,PC機(jī)通過通信發(fā)送更新命令再執(zhí)行更新操作;(3)在下載更新程序結(jié)束后,在系統(tǒng)下一次上電復(fù)位后,再執(zhí)行更新操作?;赩C編寫的DSP軟件更新方式選擇界面,如圖3所示。
其中,更新方式(1)適用于對可靠性要求不是很嚴(yán)格,而且馬上需要更新的場合,該方法與現(xiàn)有的、常用的在線升級方式相似,但克服了其存在的不足;更新方式(2)可以讓客戶根據(jù)實(shí)際系統(tǒng)的運(yùn)行需要來選擇更新軟件的時機(jī),因此可以在合適的時間內(nèi)進(jìn)行軟件更新,將更新的風(fēng)險(xiǎn)進(jìn)一步降低;更新方式(3)適合于對可靠性要求非常嚴(yán)格的場合,在系統(tǒng)斷電后,重新上電復(fù)位后進(jìn)行更新。更新方式選擇關(guān)鍵函數(shù)如下:
void UpgradeAppCode(void); //用于執(zhí)行更新程序操作;
void FW_Download(unsigned char DataBuffer, unsigned char RWflag); //通過通信接口,將下載的新程序保存到應(yīng)用程序更新版本區(qū)域。
3.2 更新版本程序下載流程
如果軟件需要更新時,首先將更新版本軟件下載到應(yīng)用程序更新版本(圖1(B))中,在更新版本軟件的下載過程中,對更新版本進(jìn)行校驗(yàn),如果更新版本下載成功,則在指定的地址中設(shè)置更新程序是新的、有效的標(biāo)志位;反之,則設(shè)置無效的標(biāo)志位。BOOT程序中更新版本程序下載流程如圖4所示。
本文提出了一種高可靠的軟件版本在線升級方法和3種更新方式,該軟件具有實(shí)現(xiàn)簡單、更新方式靈活、程序可靠性高等優(yōu)點(diǎn),可應(yīng)用于數(shù)字控制芯片領(lǐng)域。
系統(tǒng)參數(shù)設(shè)置窗口用于設(shè)置系統(tǒng)整體和各個模塊的參數(shù),一般情況下,不需要對整個系統(tǒng)默認(rèn)參數(shù)進(jìn)行改動設(shè)置,只需要對軟件的一些常用參數(shù)進(jìn)行設(shè)置,比如光標(biāo)設(shè)置,封裝庫指定等。已達(dá)到使軟件快速高效地配置資源的目的,從而更高效地使用軟...
關(guān)鍵字: 參數(shù)設(shè)置 模塊 軟件魁北克市, Oct. 20, 2022 (GLOBE NEWSWIRE) -- 最靈活、最穩(wěn)健、最精確的高級駕駛輔助系統(tǒng)(ADAS)和自動駕駛(AD)軟件技術(shù)全球領(lǐng)先提供商LeddarTech?很高興宣布將參加在密歇根州...
關(guān)鍵字: 汽車 LED 軟件 數(shù)據(jù)融合北京2022年10月18日 /美通社/ -- 10月14日,國際數(shù)據(jù)公司(IDC)發(fā)布《2022Q2中國軟件定義存儲及超融合市場研究報(bào)告》,報(bào)告顯示:2022年上半年浪潮超融合銷售額同比增長59.4%,近5倍于...
關(guān)鍵字: IDC BSP 數(shù)字化 數(shù)據(jù)中心東京2022年10月18日 /美通社/ -- NIPPON EXPRESS HOLDINGS株式會社(NIPPON EXPRESS HOLDINGS, INC.)旗下集團(tuán)公司上海通運(yùn)國際物流有限公司(Nipp...
關(guān)鍵字: 溫控 精密儀器 半導(dǎo)體制造 BSP