專利名稱:一種單片機系統(tǒng)在運行中升級的裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子技術(shù)領(lǐng)域,尤其是涉及一種單片機系統(tǒng)在運行中升級的裝置和方法。
背景技術(shù):
目前,設(shè)備升級是電子產(chǎn)品經(jīng)常遇到的一件事情。對于單片機系統(tǒng),平時運行的程序代碼都固化在ROM(Read-Only Memory,只讀存儲器)芯片或單片機自帶的flash ROM中,因此單片機的軟件升級必須進(jìn)行掉電重新燒錄新程序,不僅操作麻煩,而且掉電會影響系統(tǒng)的正常運行。
現(xiàn)在部分廠家通過改進(jìn)CPU芯片,推出增強功能的單片機實現(xiàn)在板加載軟件和在運行中加載軟件功能。例如P89C51RX+系列單片機可以選擇是使用固件程序還是使用flash程序,如果選擇使用固件程序就可以實現(xiàn)在板加載flash軟件,且該類芯片支持程序在運行中升級,該類芯片提供相關(guān)的擦除和編程函數(shù)接口,供應(yīng)用程序調(diào)用,以實現(xiàn)flash程序在運行中升級。
但是,上述增強型單片機在重新加載flash軟件時,需要手動控制CPU的PSEN(Program Store Enable,程序存儲允許)、ALE(AddressLatch Enable,地址鎖存允許)和EA(External Access Enable,外部訪問允許)三個引腳,來實現(xiàn)再次在板加載。如果固件程序指針被誤修改,則只能通過編程器重新擦除編程。該類單片機在實現(xiàn)在運行中升級的功能時,需要設(shè)計者熟悉該芯片的編程函數(shù)和相關(guān)參數(shù),技術(shù)難度高,編程的風(fēng)險性高。同時由于升級功能是在用戶的應(yīng)用程序中直接實現(xiàn),沒有保留升級前程序,也沒有倒回原來程序的機制,如果編程過程出錯或新程序出錯,將無法實現(xiàn)原來的程序自動倒回,可能引起不可恢復(fù)的嚴(yán)重后果。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種單片機系統(tǒng)在運行中升級的裝置和方法,以克服現(xiàn)有技術(shù)中單片機系統(tǒng)不能在運行中升級或能夠在運行中升級但如果編程過程出錯或新程序出錯,無法實現(xiàn)原來的程序自動倒回功能的缺陷。
本發(fā)明提供一種單片機系統(tǒng)在運行中升級的裝置,包括提供在運行中升級用戶應(yīng)用程序平臺的單片機部、存放系統(tǒng)的應(yīng)用程序的程序存儲部和存放待寫入和校驗的應(yīng)用程序的數(shù)據(jù)緩沖部,單片機部分別連接程序存儲部和數(shù)據(jù)緩沖部,對程序存儲部和數(shù)據(jù)緩沖部進(jìn)行讀寫操作。
按照本發(fā)明的一個方面,所述單片機部包括含有系統(tǒng)啟動程序的片內(nèi)只讀存儲器。
按照本發(fā)明的再一個方面,所述系統(tǒng)啟動程序進(jìn)一步包括系統(tǒng)中斷的應(yīng)用程序的函數(shù)入口地址、加載應(yīng)用程序的函數(shù)入口地址、修改應(yīng)用程序狀態(tài)標(biāo)志的函數(shù)入口地址、運行啟動程序和運行應(yīng)用程序的標(biāo)志變量的絕對地址和中斷服務(wù)程序選擇的標(biāo)志變量的絕對地址。
按照本發(fā)明的再一個方面,所述程序存儲部進(jìn)一步包括應(yīng)用程序存儲區(qū)A、應(yīng)用程序存儲區(qū)B和標(biāo)志區(qū)。
按照本發(fā)明的再一個方面,所述應(yīng)用程序存儲區(qū)A或應(yīng)用程序存儲區(qū)B包含系統(tǒng)的應(yīng)用程序。
按照本發(fā)明的再一個方面,所述系統(tǒng)的應(yīng)用程序進(jìn)一步包括系統(tǒng)中斷的應(yīng)用程序的函數(shù)入口地址、加載應(yīng)用程序的函數(shù)入口地址、修改應(yīng)用程序狀態(tài)標(biāo)志的函數(shù)入口地址、運行啟動程序和運行應(yīng)用程序的標(biāo)志變量的絕對地址和中斷服務(wù)程序選擇的標(biāo)志變量的絕對地址。
按照本發(fā)明的再一個方面,所述標(biāo)志區(qū)存放應(yīng)用程序存儲區(qū)中程序的狀態(tài)標(biāo)志和存儲區(qū)選擇標(biāo)志。
本發(fā)明提供一種單片機系統(tǒng)在運行中升級的方法,包括以下步驟A、選擇要加載系統(tǒng)的應(yīng)用程序的應(yīng)用程序存儲區(qū);B、將系統(tǒng)的應(yīng)用程序?qū)懭胨鰬?yīng)用程序存儲區(qū);C、判斷所述系統(tǒng)的應(yīng)用程序是否正確,如果正確,則加載完成;如果不正確,則轉(zhuǎn)步驟D;D、返回升級前系統(tǒng)的應(yīng)用程序。
按照本發(fā)明的再一個方面,步驟A具體為,如果當(dāng)前系統(tǒng)未使用應(yīng)用程序存儲區(qū)A,則選擇應(yīng)用程序存儲區(qū)A加載系統(tǒng)的應(yīng)用程序,否則選擇應(yīng)用程序存儲區(qū)B加載系統(tǒng)的應(yīng)用程序。
按照本發(fā)明的再一個方面,步驟B進(jìn)一步包括B1、單片機部接收待加載的應(yīng)用程序;B2、單片機部將待加載的應(yīng)用程序?qū)懭霐?shù)據(jù)緩沖部;B3、單片機部接收加載應(yīng)用程序的命令;B4、單片機部將數(shù)據(jù)緩沖部的數(shù)據(jù)寫入應(yīng)用程序存儲區(qū)。
按照本發(fā)明的再一個方面,步驟B1或B3中,單片機部通過串口與計算機通信接收數(shù)據(jù)。
按照本發(fā)明的再一個方面,步驟B1或B3中,單片機部通過并口與計算機通信接收數(shù)據(jù)。
按照本發(fā)明的再一個方面,步驟C具體為,運行所述系統(tǒng)的應(yīng)用程序,如果該程序所有中斷和主程序都執(zhí)行一遍且正常,則該程序正確;如果該程序運行過程中被看門狗復(fù)位,則該程序不正確。
按照本發(fā)明的再一個方面,步驟D具體為,修改存儲區(qū)選擇標(biāo)志為另一個應(yīng)用程序存儲區(qū),并運行該應(yīng)用程序存儲區(qū)的應(yīng)用程序。
本發(fā)明提供一種單片機系統(tǒng)在運行中升級的方法,包括以下步驟A、單片機部讀取應(yīng)用程序存儲區(qū)中升級前系統(tǒng)的應(yīng)用程序;B、單片機部將升級前系統(tǒng)的應(yīng)用程序?qū)懭霐?shù)據(jù)緩沖部;C、單片機部運行數(shù)據(jù)緩沖部中升級前系統(tǒng)的應(yīng)用程序;D、單片機部將待升級的系統(tǒng)的應(yīng)用程序?qū)懭霊?yīng)用程序存儲區(qū)。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點應(yīng)用本發(fā)明可以使單片機系統(tǒng)在運行中升級,不必使用編程器,無需拔出單板更換芯片,減少系統(tǒng)維護(hù)的人力物力成本,節(jié)省維護(hù)時間。應(yīng)用本發(fā)明用戶只需燒錄一次系統(tǒng)啟動程序,應(yīng)用程序的調(diào)試可以通過在線加載來實現(xiàn),不需使用仿真器,能保證調(diào)試后的程序直接使用,不存在使用仿真器有時脫機無法正常運行的情況。應(yīng)用本發(fā)明可以通過網(wǎng)絡(luò)實現(xiàn)遠(yuǎn)程升級,而且如果升級后的程序出錯,可以實現(xiàn)自動倒回原來程序;還可以通過遠(yuǎn)程命令強制進(jìn)行應(yīng)用程序倒回原來版本的操作。
圖1是本發(fā)明的系統(tǒng)結(jié)構(gòu)圖。
圖2是采用本發(fā)明的一種單片機系統(tǒng)的硬件電路圖。
圖3是采用圖2所示單片機系統(tǒng)時,系統(tǒng)啟動程序流程圖。
圖4是采用圖2所示單片機系統(tǒng)時,系統(tǒng)應(yīng)用程序流程圖。
具體實施例方式
下面結(jié)合附圖和實施例,對本發(fā)明的具體實施方式
作進(jìn)一步詳細(xì)描述本發(fā)明的系統(tǒng)結(jié)構(gòu)如圖1所示,該系統(tǒng)通過串口或并口與計算機進(jìn)行通信。該系統(tǒng)包括單片機部、程序存儲部和數(shù)據(jù)緩沖部三個部分。其中程序存儲部進(jìn)一步包括應(yīng)用程序存儲區(qū)A、應(yīng)用程序存儲區(qū)B和標(biāo)志區(qū)。單片機部可以分別對程序存儲部和數(shù)據(jù)緩沖部進(jìn)行讀寫。
下面以圖2所示單片機系統(tǒng)的硬件電路為實施例,對本發(fā)明進(jìn)行詳細(xì)說明。參照圖2,該系統(tǒng)包括單片機部、程序存儲部和數(shù)據(jù)緩沖部三個部分。單片機部采用AT89C51芯片作為CPU,該芯片自帶的4K片內(nèi)ROM空間用于存放系統(tǒng)啟動程序BOOT,且第31腳接VCC,保證程序從BOOT程序開始運行,BOOT程序的流程圖如圖3所示。程序存儲部采用M29F040B芯片作為flash ROM,該芯片存放系統(tǒng)的應(yīng)用程序APP,APP程序的流程圖如圖4所示。M29F040B芯片具有8個扇區(qū),每個扇區(qū)有64K字節(jié)空間,且該芯片支持對扇區(qū)獨立編程。該芯片中0號扇區(qū)為應(yīng)用程序存儲區(qū)A,用于存放系統(tǒng)的應(yīng)用程序APP0的程序代碼;1號扇區(qū)為應(yīng)用程序存儲區(qū)B,用于存放系統(tǒng)的應(yīng)用程序APP1的程序代碼;2號扇區(qū)為標(biāo)志區(qū),其中地址為0x1000~0x1003的空間存放APP0程序的狀態(tài)標(biāo)志,標(biāo)志為0x55555555表示初次運行,標(biāo)志為0xAAAAAAAA表示正常,其他標(biāo)志表示故障;地址為0x1004~0x1007的空間存放APP1程序的狀態(tài)標(biāo)志,標(biāo)志為0x55555555表示初次運行,標(biāo)志為0xAAAAAAAA表示正常,其他標(biāo)志表示故障;地址為0x1008的空間存放當(dāng)前選擇要運行的APP程序所在的扇區(qū)標(biāo)志,標(biāo)志為0x00表示0號扇區(qū)的APP0程序,標(biāo)志為0xFF表示1號扇區(qū)的APP1程序。數(shù)據(jù)緩沖部采用CY62256芯片作為RAM(Random Access Memory,隨機存取存儲器)。
單片機部使用AT89C51的10腳和11腳配合MAX232芯片與計算機進(jìn)行串口通信,發(fā)送和接收數(shù)據(jù);使用3腳控制系統(tǒng)讀寫操作的芯片,當(dāng)3腳為1時,讀寫操作CY62256芯片;當(dāng)3腳為0時,讀寫操作M29F040B芯片。因為系統(tǒng)上電時3腳為1,所以默認(rèn)選擇CY62256芯片作為讀寫對象。當(dāng)需要讀寫操作M29F040B芯片時,先進(jìn)行一個3腳清零的操作,讀寫之后,立刻進(jìn)行一個3腳置一的操作,保證操作M29F040B芯片后,能正常操作CY62256芯片。由于M29F040B芯片在程序正常運行時,作為系統(tǒng)的程序存儲器,所以把/PSTN信號引進(jìn)M29F040B芯片進(jìn)行取指令控制。另外,由于M29F040B地址范圍超過64K,單片機部使用AT89C51的1腳和2腳信號實現(xiàn)M29F040B芯片的0號扇區(qū)、1號扇區(qū)和2號扇區(qū)之間的進(jìn)行選擇。
該單片機系統(tǒng)的地址空間分配如下ROM空間AT89C51芯片中地址為0x0000~0x0FFF的空間分配為BOOT程序空間;M29F040B芯片中地址為0x1000~0xFFFF的空間分配為APP程序空間。
RAM空間當(dāng)AT89C51芯片的3腳為1時,操作CY62256芯片,此時地址為0x0000~0x0FFF的空間分配為BOOT程序變量空間和待加載APP程序的緩存空間;地址為0x1000~0xFFFF的空間分配為APP程序變量空間。
當(dāng)AT89C51芯片的3腳為0時,操作M29F040B芯片,此時地址為0x1000~0xFFFF的空間分配為待寫入和校驗的APP程序的空間。
對于初次加工的設(shè)備,本發(fā)明包括以下步驟
步驟s101,選擇要加載APP程序的應(yīng)用程序存儲區(qū)X。如果當(dāng)前系統(tǒng)未使用應(yīng)用程序存儲區(qū)A,則選擇應(yīng)用程序存儲區(qū)A為應(yīng)用程序存儲區(qū)X,加載APP程序,否則選擇應(yīng)用程序存儲區(qū)B為應(yīng)用程序存儲區(qū)X,加載APP程序。因為設(shè)備初次加工,應(yīng)用程序存儲區(qū)A、B都為空(狀態(tài)為故障),沒有可用的APP程序,所以軟件選擇應(yīng)用程序存儲區(qū)A用來加載APP程序。
步驟s102,BOOT程序通過AT89C51的10腳和11腳與計算機進(jìn)行通信,接收待加載的APP程序。
步驟s103,BOOT程序通過AT89C51的26~39腳,將待加載的APP程序?qū)懭隒Y62256芯片。
步驟s104,BOOT程序通過AT89C51的10腳和11腳與計算機進(jìn)行通信,接收加載APP程序的命令。
步驟s105,BOOT程序通過AT89C51的1~4和26~39腳,將CY62256芯片中的數(shù)據(jù)寫入M29F040B芯片對應(yīng)的應(yīng)用程序存儲區(qū)A。然后重新讀取應(yīng)用程序存儲區(qū)A數(shù)據(jù)進(jìn)行校驗,判斷是否加載出錯。這個過程可以根據(jù)APP程序目標(biāo)代碼的大小和設(shè)計中分配待加載APP程序的緩存大小,將目標(biāo)代碼分成N塊,采用多次傳送、加載的方式進(jìn)行。
步驟s106,在標(biāo)志區(qū)將APP0程序的狀態(tài)標(biāo)志為初次運行。
步驟s107,在標(biāo)志區(qū)將當(dāng)前選擇要運行的APP程序所在的扇區(qū)標(biāo)志為0號扇區(qū)的APP0程序。
步驟s108,通過看門狗進(jìn)行系統(tǒng)復(fù)位。
步驟s109,BOOT程序?qū)?biāo)志區(qū)的APP0程序的狀態(tài)標(biāo)志為故障。
步驟s110,運行APP0程序。如果該程序所有中斷都執(zhí)行過,主程序也執(zhí)行一遍正常,則將標(biāo)志區(qū)的APP0程序的狀態(tài)標(biāo)志為正常,升級完成;如果該程序運行過程中被看門狗復(fù)位,則轉(zhuǎn)步驟s111。
步驟s111,因為APP0程序的狀態(tài)標(biāo)志為故障,且應(yīng)用程序存儲區(qū)B為空(狀態(tài)為故障),所以進(jìn)入BOOT程序的主循環(huán),等待命令,重新加載新的APP程序。回到步驟s101重新開始。
對于已經(jīng)正常運行的設(shè)備,本發(fā)明包括以下步驟步驟s201,系統(tǒng)在正常運行APP程序,收到升級請求后,APP程序跳轉(zhuǎn)到BOOT程序中運行。
步驟s202,選擇要加載APP程序的應(yīng)用程序存儲區(qū)X。如果當(dāng)前系統(tǒng)正使用APP0程序,則選擇應(yīng)用程序存儲區(qū)B為應(yīng)用程序存儲區(qū)X,加載APP程序;如果當(dāng)前系統(tǒng)正使用APP1程序,則選擇應(yīng)用程序存儲區(qū)A為應(yīng)用程序存儲區(qū)X,加載APP程序。
步驟s203,BOOT程序通過AT89C51的10腳和11腳與計算機進(jìn)行通信,接收待加載的APP程序。
步驟s204,BOOT程序通過AT89C51的26~39腳,將待加載的APP程序?qū)懭隒Y62256芯片。
步驟s205,BOOT程序通過AT89C51的10腳和11腳與計算機進(jìn)行通信,接收加載APP程序的命令。
步驟s206,BOOT程序通過AT89C51的1~4和26~39腳,將CY62256芯片中的數(shù)據(jù)寫入M29F040B芯片對應(yīng)的應(yīng)用程序存儲區(qū)X。然后重新讀取應(yīng)用程序存儲區(qū)A數(shù)據(jù)進(jìn)行校驗,判斷是否加載出錯。這個過程可以根據(jù)APP程序目標(biāo)代碼的大小和設(shè)計中分配待加載APP程序的緩存大小,將目標(biāo)代碼分成N塊,采用多次傳送、加載的方式進(jìn)行。
步驟s207,在標(biāo)志區(qū)將應(yīng)用程序存儲區(qū)X中APP程序的狀態(tài)標(biāo)志為初次運行。
步驟s208,在標(biāo)志區(qū)將當(dāng)前選擇要運行的APP程序所在的扇區(qū)標(biāo)志為應(yīng)用程序存儲區(qū)X中的APP程序。
步驟s209,通過看門狗進(jìn)行系統(tǒng)復(fù)位。
步驟s210,BOOT程序?qū)?biāo)志區(qū)的應(yīng)用程序存儲區(qū)X中的APP程序的狀態(tài)標(biāo)志為故障。
步驟s211,運行該APP程序。如果該程序所有中斷都執(zhí)行過,主程序也執(zhí)行一遍正常,則將標(biāo)志區(qū)的該APP程序的狀態(tài)標(biāo)志為正常,升級完成;如果該程序運行過程中被看門狗復(fù)位,則轉(zhuǎn)步驟s212。
步驟s212,因為另一應(yīng)用程序存儲區(qū)的APP程序可用,則在標(biāo)志區(qū)將當(dāng)前選擇要運行的APP程序所在的扇區(qū)標(biāo)志為該應(yīng)用程序存儲區(qū)中的APP程序,然后選擇該APP程序運行。
因為用戶要實現(xiàn)的功能都在APP程序的主體中,所以APP程序經(jīng)常因為功能變化而進(jìn)行升級;而BOOT程序功能固定,軟件調(diào)試成功后就不再變化。為使升級前和升級后的APP程序都能和系統(tǒng)的BOOT程序正確匹配運行,必須保證APP程序和BOOT程序的接口函數(shù)和接口變量地址固定,同時要求APP程序和BOOT程序之間不要其他的關(guān)聯(lián)耦合,使兩個程序中具體模塊的變動不會相互影響。本發(fā)明將BOOT程序和APP程序設(shè)計成兩個獨立的程序,分別編譯生成相應(yīng)的目標(biāo)代碼,只需在每個程序中設(shè)置好接口函數(shù)和變量的地址,就能使兩個程序正確匹配運行。每個程序在編譯鏈接時,編譯器對指令的優(yōu)化、函數(shù)位置的變化等方面因素不會影響到另一個程序,而且使用兩個目標(biāo)代碼也方便兩個芯片的分別加載。
BOOT程序需要確定如下接口函數(shù)和變量1、5個系統(tǒng)中斷的APP程序的函數(shù)入口地址。本發(fā)明建議使用0x2003、0x200B、0x2013、0x201B、0x2023五個地址作為APP程序5個中斷的服務(wù)程序入口地址。
2、加載APP程序的函數(shù)入口地址。本發(fā)明建議使用0x0F00地址。
3、修改當(dāng)前APP程序狀態(tài)標(biāo)志的函數(shù)入口地址。本發(fā)明建議使用0x0F10地址。
4、當(dāng)前運行BOOT程序和運行APP程序的標(biāo)志變量的絕對地址。本發(fā)明建議使用0x0000地址。
5、當(dāng)前中斷服務(wù)程序選擇的標(biāo)志變量的絕對地址。本發(fā)明建議使用0x0001地址。
6、因為APP程序中占用到的變量地址,BOOT程序都不能占用,以免改寫引起沖突,所以把分配給APP程序的xdata變量空間在BOOT程序中定義為全局字符數(shù)組,避免BOOT程序動態(tài)分配變量時,占用該區(qū)域地址。本發(fā)明建議分配0x1000~0xFFFF的60K地址給APP(可根據(jù)實際APP程序需要進(jìn)行調(diào)整)。
因為接口函數(shù)的地址空間有限,所以可以通過調(diào)用子函數(shù)的形式來完成具體的功能。BOOT程序的中斷入口函數(shù)先判斷中斷來源,若是BOOT程序的中斷就調(diào)用BOOT程序的中斷服務(wù)程序,包括EX0BOOT()、T0BOOT()、EX1BOOT()、T1BOOT()和S0BOOT();若是APP程序的中斷就調(diào)用APP函數(shù)中斷服務(wù)程序,包括EX0APP()、T0APP()、EX1APP()、T1APP()和S0APP()。
接口函數(shù)的絕對地址綁定可以在C51鏈接時進(jìn)行。編輯一個BOOT.TXT文件,然后編譯程序后鏈接時運行L51.EXE @BOOT.TXT(是否增加附件進(jìn)行舉例或者直接拷貝文本過來。),就可實現(xiàn)相關(guān)函數(shù)的絕對地址綁定。
接口變量的絕對地址綁定可以在BOOT.C的頭文件中定義全局變量并綁定變量絕對地址。例如char xdata flagCode_at_0x0000;char xdata flagInterrupt_at_0x0001;char xdata reserveAPP[61440]_at_0x1000。
APP程序需要確定如下接口函數(shù)和變量1、5個系統(tǒng)中斷的APP服務(wù)程序的函數(shù)入口地址。本發(fā)明建議對應(yīng)BOOT程序使用0x2003、0x200B、0x2013、0x201B、0x2023五個地址作為APP程序5個中斷的服務(wù)程序入口地址。
2、加載APP程序的函數(shù)入口地址。本發(fā)明建議對應(yīng)BOOT程序使用0x0F00。
3、修改當(dāng)前APP程序狀態(tài)標(biāo)志的函數(shù)入口地址。本發(fā)明建議對應(yīng)BOOT程序使用0x0F10。
4、當(dāng)前運行BOOT程序和運行APP程序的標(biāo)志變量的絕對地址。本發(fā)明建議對應(yīng)BOOT程序使用0x0000地址。
5、當(dāng)前中斷服務(wù)程序選擇的標(biāo)志變量的絕對地址。本發(fā)明建議對應(yīng)BOOT程序使用0x0001地址。
6、因為BOOT程序中占用到的變量地址,APP程序都不能占用,以免改寫引起沖突,所以把分配給BOOT程序的xdata變量空間在APP程序中定義為全局字符數(shù)組,避免APP程序動態(tài)分配變量時,占用該區(qū)域地址。本發(fā)明建議對應(yīng)BOOT程序分配0x0002~0x0FFF近4K的地址作為BOOT程序變量存儲區(qū)(可根據(jù)APP變量占用情況進(jìn)行對應(yīng)調(diào)整)。
接口函數(shù)的絕對地址綁定方法和BOOT程序中地址的綁定方法一致。
因為中斷服務(wù)入口函數(shù)的地址空間有限,只有8字節(jié),所以可以通過調(diào)用子函數(shù)的方式,在子函數(shù)中執(zhí)行具體的服務(wù)內(nèi)容函數(shù)。
本發(fā)明還有一種方案可以實現(xiàn)在線升級,首先單片機部讀取應(yīng)用程序存儲區(qū)中升級前系統(tǒng)的應(yīng)用程序,然后單片機部將升級前系統(tǒng)的應(yīng)用程序?qū)懭霐?shù)據(jù)緩沖部并運行數(shù)據(jù)緩沖部中升級前系統(tǒng)的應(yīng)用程序,最后單片機部將待升級的系統(tǒng)的應(yīng)用程序?qū)懭霊?yīng)用程序存儲區(qū)。系統(tǒng)復(fù)位后,CPU拷貝ROM的代碼到RAM中執(zhí)行,運行的就是升級后的程序代碼。該方案也可以完成在線升級,不過復(fù)雜程度較高,而且由于沒有升級失敗自動倒回原來代碼的機制,安全性能不好。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種單片機系統(tǒng)在運行中升級的裝置,其特征在于,包括單片機部,提供在運行中升級用戶應(yīng)用程序的平臺;程序存儲部,存放系統(tǒng)的應(yīng)用程序;數(shù)據(jù)緩沖部,存放待寫入和校驗的應(yīng)用程序;單片機部連接程序存儲部,對程序存儲部進(jìn)行讀寫操作;單片機部連接數(shù)據(jù)緩沖部,對數(shù)據(jù)緩沖部進(jìn)行讀寫操作。
2.如權(quán)利要求1所述單片機系統(tǒng)在運行中升級的裝置,其特征在于,所述單片機部包括片內(nèi)只讀存儲器。
3.如權(quán)利要求2所述單片機系統(tǒng)在運行中升級的裝置,其特征在于,所述片內(nèi)只讀存儲器中包含系統(tǒng)啟動程序。
4.如權(quán)利要求3所述單片機系統(tǒng)在運行中升級的裝置,其特征在于,所述系統(tǒng)啟動程序進(jìn)一步包括系統(tǒng)中斷的應(yīng)用程序的函數(shù)入口地址;加載應(yīng)用程序的函數(shù)入口地址;修改應(yīng)用程序狀態(tài)標(biāo)志的函數(shù)入口地址;運行啟動程序和運行應(yīng)用程序的標(biāo)志變量的絕對地址;中斷服務(wù)程序選擇的標(biāo)志變量的絕對地址。
5.如權(quán)利要求1所述單片機系統(tǒng)在運行中升級的裝置,其特征在于,所述程序存儲部進(jìn)一步包括應(yīng)用程序存儲區(qū)A;應(yīng)用程序存儲區(qū)B;標(biāo)志區(qū)。
6.如權(quán)利要求5所述單片機系統(tǒng)在運行中升級的裝置,其特征在于,所述應(yīng)用程序存儲區(qū)A或應(yīng)用程序存儲區(qū)B包含系統(tǒng)的應(yīng)用程序。
7.如權(quán)利要求6所述單片機系統(tǒng)在運行中升級的裝置,其特征在于,所述系統(tǒng)的應(yīng)用程序進(jìn)一步包括系統(tǒng)中斷的應(yīng)用程序的函數(shù)入口地址;加載應(yīng)用程序的函數(shù)入口地址;修改應(yīng)用程序狀態(tài)標(biāo)志的函數(shù)入口地址;運行啟動程序和運行應(yīng)用程序的標(biāo)志變量的絕對地址;中斷服務(wù)程序選擇的標(biāo)志變量的絕對地址。
8.如權(quán)利要求5所述單片機系統(tǒng)在運行中升級的裝置,其特征在于,所述標(biāo)志區(qū)存放應(yīng)用程序存儲區(qū)中程序的狀態(tài)標(biāo)志和存儲區(qū)選擇標(biāo)志。
9.一種單片機系統(tǒng)在運行中升級的方法,其特征在于,包括以下步驟A、選擇要加載系統(tǒng)的應(yīng)用程序的應(yīng)用程序存儲區(qū);B、將系統(tǒng)的應(yīng)用程序?qū)懭胨鰬?yīng)用程序存儲區(qū);C、判斷所述系統(tǒng)的應(yīng)用程序是否正確,如果正確,則加載完成;如果不正確,則轉(zhuǎn)步驟D;D、返回升級前系統(tǒng)的應(yīng)用程序。
10.如權(quán)利要求9所述單片機系統(tǒng)在運行中升級的方法,其特征在于,步驟A具體為,如果當(dāng)前系統(tǒng)未使用應(yīng)用程序存儲區(qū)A,則選擇應(yīng)用程序存儲區(qū)A加載系統(tǒng)的應(yīng)用程序,否則選擇應(yīng)用程序存儲區(qū)B加載系統(tǒng)的應(yīng)用程序。
11.如權(quán)利要求9所述單片機系統(tǒng)在運行中升級的方法,其特征在于,步驟B進(jìn)一步包括B1、單片機部接收待加載的應(yīng)用程序;B2、單片機部將待加載的應(yīng)用程序?qū)懭霐?shù)據(jù)緩沖部;B3、單片機部接收加載應(yīng)用程序的命令;B4、單片機部將數(shù)據(jù)緩沖部的數(shù)據(jù)寫入應(yīng)用程序存儲區(qū)。
12.如權(quán)利要求11所述單片機系統(tǒng)在運行中升級的方法,其特征在于,步驟B1或B3中,單片機部通過串口與計算機通信接收數(shù)據(jù)。
13.如權(quán)利要求11所述單片機系統(tǒng)在運行中升級的方法,其特征在于,步驟B1或B3中,單片機部通過并口與計算機通信接收數(shù)據(jù)。
14.如權(quán)利要求9所述單片機系統(tǒng)在運行中升級的方法,其特征在于,步驟C具體為,運行所述系統(tǒng)的應(yīng)用程序,如果該程序所有中斷和主程序都執(zhí)行一遍且正常,則該程序正確;如果該程序運行過程中被看門狗復(fù)位,則該程序不正確。
15.如權(quán)利要求9所述單片機系統(tǒng)在運行中升級的方法,其特征在于,步驟D具體為,修改存儲區(qū)選擇標(biāo)志為另一個應(yīng)用程序存儲區(qū),并運行該應(yīng)用程序存儲區(qū)的應(yīng)用程序。
16.一種單片機系統(tǒng)在運行中升級的方法,其特征在于,包括以下步驟A、單片機部讀取應(yīng)用程序存儲區(qū)中升級前系統(tǒng)的應(yīng)用程序;B、單片機部將升級前系統(tǒng)的應(yīng)用程序?qū)懭霐?shù)據(jù)緩沖部;C、單片機部運行數(shù)據(jù)緩沖部中升級前系統(tǒng)的應(yīng)用程序;D、單片機部將待升級的系統(tǒng)的應(yīng)用程序?qū)懭霊?yīng)用程序存儲區(qū)。
全文摘要
一種單片機系統(tǒng)在運行中升級的裝置和方法,涉及電子技術(shù)領(lǐng)域,解決現(xiàn)有技術(shù)中單片機系統(tǒng)不能在運行中升級或能夠在運行中升級但如果編程過程出錯或新程序出錯,無法實現(xiàn)原來的程序自動倒回功能的缺陷。本發(fā)明包括單片機部、程序存儲部和數(shù)據(jù)緩沖部三個部分。本發(fā)明首先選擇要加載系統(tǒng)的應(yīng)用程序的應(yīng)用程序存儲區(qū),然后將系統(tǒng)的應(yīng)用程序?qū)懭胨鰬?yīng)用程序存儲區(qū),再判斷所述系統(tǒng)的應(yīng)用程序是否正確,如果正確,則加載完成;如果不正確,則返回升級前系統(tǒng)的應(yīng)用程序。
文檔編號G06F9/445GK1851645SQ200610000888
公開日2006年10月25日 申請日期2006年1月17日 優(yōu)先權(quán)日2006年1月17日
發(fā)明者黃鴻貴 申請人:華為技術(shù)有限公司