專利名稱:嵌入式系統(tǒng)中對rom程序的升級方法
技術領域:
本發(fā)明涉及計算機領域,尤其涉及一種嵌入式系統(tǒng)中對ROM程序的升級方法。
背景技術:
嵌入式系統(tǒng)中,使用ROM來保存軟件,由于ROM是只讀存儲器,那么ROM上存儲的軟件是無法升級的。嵌入式系統(tǒng)中用ROM存儲器保存軟件時,還會有一片F(xiàn)LASH存儲器來存儲文件系統(tǒng),一片RAM存儲器保存運行堆棧及全局變量。由于FLASH存儲器和RAM存儲器是可以擦寫的,顯然,可以利用flash來保存升級軟件部分,又不刪除ROM原有程序而達到系統(tǒng)升級的功能。
發(fā)明內容
為了克服ROM上存儲的軟件無法升級的缺陷,本發(fā)明提出一種嵌入式系統(tǒng)中對 ROM程序的升級方法。本發(fā)明是這樣實現(xiàn)的一種嵌入式系統(tǒng)中對ROM程序的升級方法,包括以下步驟a、在生成ROM軟件時在每個軟件函數(shù)開始位置設置一個升級調用程序模塊;b、在FLASH中開辟一塊獨立的程序升級區(qū),所述程序升級區(qū)用于保存升級程序包;C、需要升級軟件時,制作升級程序包;d、將升級程序包寫入到FLASH的程序升級區(qū);e、升級調用程序模塊檢測FLASH中是否有升級程序包,若未發(fā)現(xiàn)所述的升級程序包,則執(zhí)行步驟f,若發(fā)現(xiàn)所述的升級程序包,則執(zhí)行g ;f、執(zhí)行ROM軟件中的原始程序;g、則將FLASH中的升級程序包拷貝到RAM中并執(zhí)行升級程序。其中,升級調用程序模塊包括系統(tǒng)所有函數(shù)的列表數(shù)組和列表枚舉。函數(shù)數(shù)組中保存的是一個指針,初始為NULL。如果有對該函數(shù)升級,這個指針將會指向新的升級程序。 在每個函數(shù)開始位置處調用一個樁函數(shù)stub,stub的參數(shù)是本函數(shù)枚舉量,在stub中根據(jù)輸入?yún)?shù)去索引列表數(shù)組是否有升級程序,如果有則通過改變調用棧參數(shù)跳轉到新程序中,否則就退出stub,執(zhí)行原始程序。本發(fā)明的有益效果是其一,利用本方法,產品中可以放心的使用ROM保存軟件, 對ROM保存的軟件也可以升級,從而可以有效的節(jié)省硬件成本。其二,如果升級程序有漏洞,也可以利用更新升級程序包的方式來填補漏洞或者執(zhí)行原始程序以保證軟件的正常運行。其三,代碼升級可以只針對部分函數(shù)進行,可有效的減少升級包的大小,從而減少FLASH 硬件資源的浪費。
圖1是本發(fā)明嵌入式系統(tǒng)中對ROM程序的升級方法示意圖。
具體實施例方式下面,對照附圖和較佳實施例對本發(fā)明的技術方案進行詳細說明。如圖1所示,本發(fā)明提出的一種嵌入式系統(tǒng)中對ROM程序的升級方法,包括以下步驟a、在生成ROM軟件時在每個軟件開始位置設置一個升級調用程序模塊;b、在FLASH中開辟一塊獨立的程序升級區(qū),所述程序升級區(qū)用于保存升級程序包;C、需要升級軟件時,制作升級程序包;d、將升級程序包寫入到FLASH的程序升級區(qū);e、升級調用程序模塊檢測FLASH中是否有升級程序包,若未發(fā)現(xiàn)所述的升級程序包,則執(zhí)行步驟f,若發(fā)現(xiàn)所述的升級程序包,則執(zhí)行g ;f、執(zhí)行ROM軟件中的原始程序;g、則將FLASH中的升級程序包拷貝到RAM中并執(zhí)行升級程序。升級調用程序模塊是由在生成ROM軟件時產生一份系統(tǒng)所有函數(shù)的列表數(shù)組和一個列表枚舉來實現(xiàn)的。函數(shù)數(shù)組中保存的是一個指針,初始為NULL。如果以后有對該函數(shù)升級,這個指針將會指向新的升級程序。在每個函數(shù)開始位置處調用一個樁函數(shù)stub, stub的參數(shù)是本函數(shù)枚舉量,在stub中根據(jù)輸入?yún)?shù)去索引列表數(shù)組是否有升級程序,如果有則通過改變調用棧參數(shù)跳轉到新程序中,否則就退出stub,執(zhí)行原始程序。在flash中開辟一份獨立的區(qū)域保存升級程序和更新后全局函數(shù)列表數(shù)組,新數(shù)組保存了指向升級程序的指針。升級包主要涉及到以下三部分1升級包的制作。利用和發(fā)布ROM相同的編譯環(huán)境,根據(jù)測試中發(fā)現(xiàn)的bug或者需要添加的新功能, 添加新的函數(shù)實現(xiàn)這些功能,不要修改原始的程序代碼,同時根據(jù)新函數(shù)和要替換掉的老函數(shù)的對應關系,填充函數(shù)列表數(shù)組。并且將新的函數(shù)列表數(shù)組及新函數(shù)編譯生成一個新的升級包。2升級包的注入。系統(tǒng)運行后利用升級程序將升級包寫入到flash中預留的升級區(qū)域。并且重啟系統(tǒng)。3升級包的使用。系統(tǒng)啟動時檢查flash中預留的升級區(qū)域是否有效,如果有效則利用升級包中新的函數(shù)列表數(shù)組替換ROM中老的函數(shù)列表數(shù)組,并且將新的升級代碼拷貝到RAM中,為以后代碼的執(zhí)行做準備。系統(tǒng)正常啟動后在每個函數(shù)的入口出都會調用stub函數(shù),而stub中使用的已經(jīng)是新的函數(shù)列表數(shù)組了,所以它可以運行到升級包中的新功能,從而達到升級系統(tǒng)的目的。本發(fā)明實施例中嵌入式系統(tǒng)中對ROM程序的升級方法,包括在每個軟件開始位置設置一個升級調用程序模塊,且在FLASH中開辟一塊獨立的程序升級區(qū)來保存升級程序包。當需要升級軟件時,制作升級程序包并將升級程序包寫入到FLASH的程序升級區(qū)。升級調用程序模塊檢測FLASH中是否有升級程序包,若未發(fā)現(xiàn)所述的升級程序包,則執(zhí)行ROM 軟件中的原始程序,若發(fā)現(xiàn)所述的升級程序包,則將FLASH中的升級程序包拷貝到RAM中并執(zhí)行升級程序。本發(fā)明實施例的有益效果在于既可以升級ROM保存的軟件,又可以利用更新升級程序包的方式來填補軟件漏洞以保證軟件的正常運行,還可以只針對部分函數(shù)進行升級,以減少FLASH硬件資源的浪費。 雖然以上結合具體實施方式
對本發(fā)明內容進行了詳細地說明,但是應當理解到, 本領域的技術人員在不違背本發(fā)明的原理和實質精神的前提下,對本發(fā)明的實施方式可以作出各種變形或者修改,這些變形和修改均應當落入本發(fā)明的保護范圍。
權利要求
1.一種嵌入式系統(tǒng)中對ROM程序的升級方法,其特征在于包括以下步驟a、在生成ROM軟件時在每個軟件開始位置設置一個升級調用程序模塊;b、在FLASH中開辟一塊獨立的程序升級區(qū),所述程序升級區(qū)用于保存升級程序包;c、需要升級軟件時,制作升級程序包;d、將升級程序包寫入到FLASH的程序升級區(qū);e、升級調用程序模塊檢測FLASH中是否有升級程序包,若未發(fā)現(xiàn)所述的升級程序包, 則執(zhí)行步驟f,若發(fā)現(xiàn)所述的升級程序包,則執(zhí)行g ;f、執(zhí)行ROM軟件中的原始程序;g、則將FLASH中的升級程序包拷貝到RAM中并執(zhí)行升級程序。
2.如權利要求1所述的嵌入式系統(tǒng)中對ROM程序的升級方法,其特征在于所述的升級調用程序模塊包括所有函數(shù)的列表數(shù)組和列表枚舉。
3.如權利要求2所述的嵌入式系統(tǒng)中對ROM程序的升級方法,其特征在于所述的函數(shù)數(shù)組中保存的是一個指針,初始為NULL,如果有對該函數(shù)升級,這個指針將會指向新的升級程序。
4.如權利要求2或3任一項所述的嵌入式系統(tǒng)中對ROM程序的升級方法,其特征在于 在每個函數(shù)開始位置處調用一個樁函數(shù)stub,stub的參數(shù)是本函數(shù)枚舉量,在stub中根據(jù)輸入?yún)?shù)去索引列表數(shù)組是否有升級程序,如果有則通過改變調用棧參數(shù)跳轉到新程序中,否則就退出stub,執(zhí)行原始程序。
全文摘要
本發(fā)明公開了一種嵌入式系統(tǒng)中對ROM程序的升級方法,包括在每個軟件函數(shù)開始位置設置一個升級調用程序模塊,且在FLASH中開辟一塊獨立的程序升級區(qū)來保存升級程序包。當需要升級軟件時,制作升級程序包并將升級程序包寫入到FLASH的程序升級區(qū)。升級調用程序模塊檢測FLASH中是否有升級程序包,若未發(fā)現(xiàn)所述的升級程序包,則執(zhí)行ROM軟件中的原始程序,若發(fā)現(xiàn)所述的升級程序包,則將FLASH中的升級程序包拷貝到RAM中并執(zhí)行升級程序。本發(fā)明的有益效果是既可以升級ROM保存的軟件,又可以利用更新升級程序包的方式來填補軟件漏洞以保證軟件的正常運行,還可以只針對部分函數(shù)進行升級,以減少FLASH硬件資源的浪費。
文檔編號G06F9/445GK102243587SQ20101017613
公開日2011年11月16日 申請日期2010年5月14日 優(yōu)先權日2010年5月14日
發(fā)明者羅民 申請人:康佳集團股份有限公司