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