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