基于CAN總線的在線更新機(jī)制的設(shè)計與實(shí)現(xiàn)
其中①啟動程序是一段特定的駐留代碼,專門用于接收來自主機(jī)新的代碼,將其燒寫到相應(yīng)的FLASH空間,完成后跳轉(zhuǎn)到應(yīng)用代碼區(qū)去執(zhí)行新的程序,代碼比較少,編譯生成的映像文件小于4 KB,每次系統(tǒng)上電或重啟后先執(zhí)行啟動程序。
②應(yīng)用程序是真正實(shí)現(xiàn)用戶功能的代碼。
?、塾脩魯?shù)據(jù)區(qū)是用于存儲應(yīng)用程序的一些設(shè)置和數(shù)據(jù)。
3.3 中斷向量表重映射與復(fù)制
LPC11C24支持32個向量中斷,中斷向量表默認(rèn)位于FLASH 的第一個4 KB 空間,地址從0×00000000~0×00000079.按照前面的設(shè)計,啟動程序占用第一個4KB的空間,當(dāng)跳轉(zhuǎn)到應(yīng)用程序時,實(shí)際的中斷向量表是位于0×00001000~0×00001079的空間。但LPC11C24系列的單片機(jī)不支持自定義中斷向量表的地址,只支持將中斷向量表從FLASH重映射到RAM.
為了能讓應(yīng)用程序?qū)崿F(xiàn)正常的中斷處理,啟動程序在跳轉(zhuǎn)到應(yīng)用程序之前還需要將應(yīng)用程序的中斷向量表復(fù)制并映射到RAM[10].
代碼實(shí)例如下:
3.4 啟動程序和應(yīng)用程序的設(shè)計與固化
程序都在Keil for ARM 集成環(huán)境下編寫并編譯。
首先在Keil軟件下新建基于LPC11C24的工程,并配置FLASH和SRMA的起始地址和大小。具體如表2所示。
3.5 啟動程序與應(yīng)用程序之前的跳轉(zhuǎn)
在啟動程序中定義應(yīng)用程序的地址,#defineAPP_CODE_ADDR (0×00001000),程序跳轉(zhuǎn)的代碼采用匯編語言編寫,代碼實(shí)例如下:
3.6 啟動代碼的實(shí)現(xiàn)流程當(dāng)用戶需要更新應(yīng)用代碼時,PC的上位機(jī)軟件通過CAN總線向各種終端發(fā)送升級命令。而終端開機(jī)后自動運(yùn)行啟動程序,啟動程序會檢測沒有升級命令,如果有的話,則接收應(yīng)用程序代碼,直到完成整個升級。如果沒有,則運(yùn)行應(yīng)用程序。實(shí)現(xiàn)的流程圖如圖2,圖3所示。
評論