【摘" 要】在嵌入式程序開發(fā)過程中,控制器上電首先是進入一段引導加載程序,進行初始化硬件設備,建立內(nèi)存空間的映射關系,校驗應用該程序的完整性,校驗通過后跳轉(zhuǎn)到應用程序執(zhí)行控制邏輯,當應用程序在執(zhí)行過程中出現(xiàn)異常后,會出現(xiàn)復位現(xiàn)象,導致控制器中的程序在Boot程序和應用程序之間不斷地跳轉(zhuǎn),這樣對控制器以及控制器外圍設備造成影響。本文主要闡述程序異常后,基于自我保護以及保護外圍設備的角度,研究程序異常后的自鎖功能在實際產(chǎn)品中應用的案例。
【關鍵詞】嵌入式程序開發(fā);Boot程序;應用程序;自鎖
中圖分類號:U463.6" " 文獻標志碼:A" " 文章編號:1003-8639( 2022 )12-0075-02
Research and Application of Self-Locking Function After Program Exception
PAN Wen-qing1,ZHAO Xiu-min2,ZHANG Lu-bing1,LIU Cui1,JU Min1
(1. Weichai Power Co.,Ltd.,Weifang 261061;
2. China National Heavy Duty Truck Group Co.,Ltd.,Jinan 250101,China)
【Abstract】In embedded application development process,the controller is powered on the first is to enter a boot loader,initializing the hardware equipment,the memory space mapping relationship,check the integrity of the application of the program,check after the jump to application execution control logic,when the application is in the process of execution is abnormal,there will be reset. As a result,programs in the controller constantly jump between Boot programs and applications,which affects the controller and peripheral devices of the controller. In this paper,from the perspective of self-protection and peripheral equipment protection after program exception,the self-locking function after program exception is studied,and the application cases in actual products are presented.
【Key words】embedded program development;boot program;application program;self-locking
嵌入式系統(tǒng)程序開發(fā)的過程中,需要兩部分組成,一部分是Boot程序,一部分是實現(xiàn)控制功能的應用程序??刂破魃想姾笫紫冗\行在Boot程序中,初始化硬件設備,建立內(nèi)存空間的映射關系,然后校驗程序的完整性,通過后就執(zhí)行跳轉(zhuǎn)命令跳轉(zhuǎn)到應用程序中執(zhí)行控制邏輯。如果應用程序在運行中因為特殊工況或者程序數(shù)據(jù)發(fā)生異常導致復位,會在Boot程序和應用程序之間來回跳轉(zhuǎn),不斷地初始化硬件,如果不加以處理,會導致硬件故障,控制器損傷,導致無法使用等后果。
1" Boot程序與應用程序跳轉(zhuǎn)流程
Boot程序向應用程序跳轉(zhuǎn)的情況主要分為兩種:第一是控制器上電,在Boot程序中完成初始化,然后校驗應用程序和數(shù)據(jù)的完整性,校驗通過后,跳轉(zhuǎn)到應用程序的初始位置,開始執(zhí)行;第二是Boot程序更新應用程序完畢,然后通過程序的完整性校驗后,跳轉(zhuǎn)到應用程序執(zhí)行的初始位置。
應用程序向Boot程序跳轉(zhuǎn)的情況主要有3種。
第1種是應用程序運行過程中收到更新程序的指令,然后應用程序執(zhí)行一次復位,復位到Boot程序,根據(jù)上位機的刷寫指令按照標準的UDS刷寫流程對應用程序或數(shù)據(jù)進行更新。
第2種是應用程序運行中收到讀取Boot程序中的版本信息或者Boot程序中其他信息時,應用程序會執(zhí)行一次復位,復位到Boot程序中,通過UDS協(xié)議讀取Boot程序中的版本號等信息。
第3種情況就是我們本文討論到的異常復位問題,當應用程序執(zhí)行到異常位置,控制器會進行復位,此類型的復位與前兩種情況不同,前兩種情況的復位是主動復位,會通過標志位鎖定到Boot程序中完成一定的任務后再跳轉(zhuǎn)到應用程序;此種情況的復位是被動復位,沒有標志位標識,會在Boot程序和應用程序中來回跳轉(zhuǎn),會導致控制器程序運行異常。
2" 自鎖功能程序設計方案
Boot程序中設計一個公共RAM區(qū),是Boot程序和應用程序都能夠訪問的一段地址區(qū)域,并且程序在Boot和應用程序之間來回跳轉(zhuǎn)的過程中不會被初始化成固定的0或者是1,在復位跳轉(zhuǎn)的過程中都能夠訪問,并且數(shù)據(jù)保持一致。設計一個結(jié)構體變量指向這個公共RAM區(qū),變量內(nèi)容包含異常計數(shù)器,異常跳轉(zhuǎn)標志位,異常程序校驗計數(shù)器。
如果是刷寫程序等原因的正常跳轉(zhuǎn)需要忽略,不做任何操作。當因為異常跳轉(zhuǎn)到Boot的時候,首先標志位置位,異常計數(shù)器就計數(shù)一次,達到一定次數(shù),例如10次的時候,就鎖定程序一直運行在Boot區(qū),不會再反復跳轉(zhuǎn),這樣還保證了應用程序可以繼續(xù)更新,不影響控制器的壽命,不對控制器造成損壞。當復位第9次的時候,應用程序中每執(zhí)行一個函數(shù)就將異常程序校驗計數(shù)器加1,用于記錄應用程序異常的位置,第10次復位到Boot區(qū)后,停留在Boot區(qū)運行,然后通過一個100ms周期的心跳報文發(fā)送到總線上,報文內(nèi)容包含在應用程序中執(zhí)行函數(shù)的累加計數(shù)值,包含在Boot程序中運行的每100ms累加計數(shù)一次的心跳值,當總線上讀取到此條報文時,可以讀取異常程序校驗計數(shù)的狀態(tài),用于分析應用程序的異常位置,更方便快速幫助工程師定位程序異常的原因。自鎖報文的結(jié)構設計如表1所示。自鎖功能實現(xiàn)方案的流程如圖1所示。
通過設計此方案,在測試中,嘗試在應用程序中不同位置設置異常點,經(jīng)過測試,程序可以發(fā)生復位并能夠正確記錄應用程序異常函數(shù)的范圍,能夠在復位10次后,自鎖在Boot程序中,并且以100ms周期發(fā)送報文。自鎖功能測試報文如圖2所示。通過報文可以看出,程序復位了10次,心跳計數(shù)器的值一致是0,因為在不同的復位過程中,不會一直運行在Boot程序中,從第244.485275s開始程序被自鎖在了Boot程序中,可以看到心跳計數(shù)器每條報文都會累加1,異常程序校驗計數(shù)器的值累加到了2,可以看到在應用程序中運行到第2個執(zhí)行函數(shù),就會發(fā)生復位,與測試設定一致,工程師根據(jù)執(zhí)行函數(shù)周期調(diào)度順序會很快鎖定到第2個函數(shù)周圍,并通過分析鎖定到應用程序中是哪一部分的功能發(fā)生了異常。當修復好程序后,因為當前一直自鎖在了Boot程序中,可以直接通過UDS協(xié)議更新修復后的應用程序或者數(shù)據(jù),非常方便快捷。
3" 結(jié)論
程序異常后的自鎖功能在程序出現(xiàn)異常后,可以自鎖在Boot程序中,可以避免控制器反復地初始化然后復位,然后再初始化復位的異常操作,起到保護控制器的目的;通過該方案還可以幫助工程師很快地鎖定應用程序的異常點,快速地解決問題;自鎖在Boot程序中還可以幫助工程師實現(xiàn)隨時刷寫程序,避免了程序無法更新導致控制器報廢的問題。
參考文獻:
[1] 羅峰,孫澤昌. 汽車CAN總線系統(tǒng)原理、設計與應用[M]. 北京:電子工業(yè)出版社,2010.
[2] 周良潤. 對當前J1939協(xié)議的汽車信息采集系統(tǒng)研討[J]. 科教導刊-電子版(上旬),2016,(8):173.
[3] 馬文學,朱名日,程小輝. 嵌入式系統(tǒng)中BootLoader的設計與實現(xiàn)[J]. 計算機工程,2005,31(7):96-97,196.
[4] 余瑩瑩,王法龍,楊卓,等. 基于UDS協(xié)議的CAN BootLoader的開發(fā)與驗證[J]. 客車技術與研究,2020,42(6):32-35.
(編輯" 凌" 波)