專利名稱:一種在嵌入式系統(tǒng)的擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入代碼的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在嵌入式系統(tǒng)的擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入代碼的方法。
背景技術(shù):
在嵌入式系統(tǒng)開發(fā)領(lǐng)域中,代碼越來(lái)越復(fù)雜,需要的代碼存儲(chǔ)空間也越來(lái)越大,因 此設(shè)計(jì)者需要在嵌入式系統(tǒng)中增大存儲(chǔ)器的容量。當(dāng)前通用的嵌入式硬件架構(gòu)為處理器 +非易失存儲(chǔ)器(NOR-FLASH,NAND-FLASH等)。有些嵌入式系統(tǒng)還增加了擴(kuò)展存儲(chǔ)器,如SD 卡、T-FLASH。這類設(shè)計(jì)應(yīng)用的擴(kuò)展性較差,不能根據(jù)需要裝載所需的應(yīng)用,同時(shí)也提高了產(chǎn) 品的成本,往往得不償失。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種在嵌入式系統(tǒng)的擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入代碼的方法,可 以有效解決現(xiàn)有技術(shù)存在的擴(kuò)展性差、產(chǎn)品成本高等問(wèn)題。嵌入式系統(tǒng)里面的程序一般是
把用各種語(yǔ)言((:,0++^51等)編寫的代碼,通過(guò)編譯、連接等過(guò)程生成一個(gè)二進(jìn)制文件,然
后通過(guò)下載工具寫到系統(tǒng)的非易失存儲(chǔ)器中。系統(tǒng)運(yùn)行時(shí),處理器會(huì)從存儲(chǔ)器里讀入指令, 按順序執(zhí)行。本發(fā)明的實(shí)施方式是把系統(tǒng)的應(yīng)用模塊化,在有需要的時(shí)候把代碼從擴(kuò)展存 儲(chǔ)器中拷貝到非易失存儲(chǔ)器中,然后執(zhí)行跳轉(zhuǎn)指令,直接跳到特定的地址運(yùn)行該程序。 本發(fā)明涉及一種在嵌入式系統(tǒng)的擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入代碼的方法,其特征在 于,包括如下步驟 1)將動(dòng)態(tài)應(yīng)用程序所需的系統(tǒng)函數(shù)總結(jié)出來(lái),生成一個(gè)結(jié)構(gòu)變量g— functionList—ptr來(lái)保存這些系統(tǒng)函數(shù)指針,并給予固定的地址; 2)編譯配置文件,在指定位置留出足夠大的空間用來(lái)動(dòng)態(tài)裝載動(dòng)態(tài)應(yīng)用程序,生 成系統(tǒng)的BIN文件; 3)編寫系統(tǒng)的調(diào)用動(dòng)態(tài)應(yīng)用程序的服務(wù)程序,將動(dòng)態(tài)應(yīng)用的代碼從擴(kuò)展存儲(chǔ)器中 拷貝到非易失存儲(chǔ)器的指定位置; 4)初始化結(jié)構(gòu)變量g—functionList—ptr,跳轉(zhuǎn)到特定的地址; 5)編寫動(dòng)態(tài)應(yīng)用程序,在該程序中包括系統(tǒng)函數(shù)指針映射表的全局變量g—
functionList_ptr和應(yīng)用程序代碼。 所述的系統(tǒng)在運(yùn)行過(guò)程中可通過(guò)步驟2)所寫的服務(wù)程序調(diào)用步驟3)所寫的動(dòng)態(tài) 應(yīng)用程序。 本發(fā)明的優(yōu)點(diǎn)在于本發(fā)明針對(duì)各種增加擴(kuò)展存儲(chǔ)器的嵌入式系統(tǒng),通過(guò)在運(yùn)行 過(guò)程中根據(jù)需要從擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入運(yùn)行代碼的方法,增加應(yīng)用的擴(kuò)展性,從而節(jié)約 產(chǎn)品的成本,豐富產(chǎn)品的應(yīng)用,提高產(chǎn)品的競(jìng)爭(zhēng)力。
附圖為本發(fā)明涉及的方法流程圖。
具體實(shí)施例方式
—種在嵌入式系統(tǒng)的擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入代碼的方法,其特征在于,包括如下 步驟 1)將動(dòng)態(tài)應(yīng)用程序所需的系統(tǒng)函數(shù)總結(jié)出來(lái),生成一個(gè)結(jié)構(gòu)變量g— functionList—ptr來(lái)保存這些系統(tǒng)函數(shù)指針,并給予固定的地址。 動(dòng)態(tài)應(yīng)用程序所需的系統(tǒng)函數(shù)指的是有可能調(diào)用到的系統(tǒng)函數(shù),包括編程語(yǔ)言提 供的系統(tǒng)函數(shù),嵌入式系統(tǒng)提供的系統(tǒng)函數(shù)等。結(jié)構(gòu)變量g_funCti0nLiSt_ptr,為系統(tǒng)函數(shù) 指針映射表的全局變量,每一個(gè)可能調(diào)用到的系統(tǒng)函數(shù)指針都是g_funCti0nLiSt_ptr的 一個(gè)成員,給予g_functionList_ptr固定的起始地址,如0x80000000,參與整個(gè)系統(tǒng)的編 譯和連接。 2)編寫配置文件,在指定位置留出足夠大的空間用來(lái)動(dòng)態(tài)裝載動(dòng)態(tài)應(yīng)用程序,生 成系統(tǒng)的BIN文件; 編寫嵌入式系統(tǒng)的配置文件的地方空出足夠大的空間,以便能有空間拷貝動(dòng)態(tài)應(yīng) 用的程序??臻g大小由設(shè)計(jì)者根據(jù)需要決定,一般要參考最大允許動(dòng)態(tài)應(yīng)用的大小決定。對(duì) 于ARM系統(tǒng)來(lái)說(shuō),嵌入式系統(tǒng)的配置文件一般是scatter文件。若g_functionList_ptr的 起始地址為0x80000000,則需要在0x80000000處留出足夠的空間。 3)編寫系統(tǒng)的調(diào)用動(dòng)態(tài)應(yīng)用程序的服務(wù)程序,將動(dòng)態(tài)應(yīng)用的代碼從擴(kuò)展存儲(chǔ)器中
拷貝到非易失存儲(chǔ)器的指定位置。所述的指定位置是指g_funCti0nLiSt_ptr的起始地址。 4)初始化結(jié)構(gòu)變量g—functionList—ptr,跳轉(zhuǎn)到特定的地址。 所述初始化結(jié)構(gòu)變量g_functionList_ptr,即初始化系統(tǒng)函數(shù)指針,并保存
執(zhí)行完應(yīng)用程序后應(yīng)該返回的地址。所述特定的地址是一個(gè)固定的地址,一般是g—
functionList_ptr的起始地址與變量g_functionList_ptr相加并進(jìn)行字對(duì)齊后得到的地址。 5)編寫動(dòng)態(tài)應(yīng)用程序,在該程序中包括系統(tǒng)函數(shù)指針映射表的全局變量g— functionList_ptr和應(yīng)用程序代碼。 應(yīng)用程序中的g_funCtionLiSt_ptr的地址要與固定成跟嵌入式系統(tǒng)中g(shù)_ functionList_ptr的地址相同,若g_functionList_ptr的起始地址為0x80000000,應(yīng)用程 序中的g_functionList_ptr的地址也為0x80000000。 應(yīng)用程序的入口函數(shù)的地址要固定為特定的地址,一般是g_funCtionLiSt_ptr 的起始地址與變量g_funCti0nList_ptr相加并進(jìn)行字對(duì)齊后得到的地址,可使用靜態(tài)的, 也可以在配置文件中寫入。應(yīng)用程序的入口函數(shù)執(zhí)行完后,要執(zhí)行跳轉(zhuǎn)指令,跳轉(zhuǎn)到固定的 地址,即調(diào)用入口函數(shù)的下一個(gè)地址。應(yīng)用程序在編寫過(guò)程中,除非設(shè)計(jì)者編寫的函數(shù),否 則一律調(diào)用g_functionList_ptr來(lái)執(zhí)行系統(tǒng)函數(shù)。 所述的系統(tǒng)在運(yùn)行過(guò)程中可通過(guò)步驟2)所寫的服務(wù)程序調(diào)用步驟3)所寫的動(dòng)態(tài) 應(yīng)用程序。
權(quán)利要求
一種在嵌入式系統(tǒng)的擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入代碼的方法,其特征在于,包括如下步驟1)將動(dòng)態(tài)應(yīng)用程序所需的系統(tǒng)函數(shù)總結(jié)出來(lái),生成一個(gè)結(jié)構(gòu)變量g_functionList_ptr來(lái)保存這些系統(tǒng)函數(shù)指針,并給予固定的地址;2)修改系統(tǒng)的配置文件(scater file),在指定位置留出足夠大的空間(100K--500K,甚至更大,可根據(jù)系統(tǒng)配置和實(shí)際需求來(lái)定),該空間用來(lái)動(dòng)態(tài)裝載動(dòng)態(tài)應(yīng)用程序;編寫系統(tǒng)的調(diào)用動(dòng)態(tài)應(yīng)用程序的服務(wù)程序,該服務(wù)程序的功能是將動(dòng)態(tài)應(yīng)用的代碼從擴(kuò)展存儲(chǔ)器中拷貝到非易失存儲(chǔ)器的指定位置;編譯連接系統(tǒng)程序,生成可執(zhí)行的系統(tǒng)文件(BIN);3)初始化結(jié)構(gòu)變量g_functionList_ptr,跳轉(zhuǎn)到特定的地址;4)編寫動(dòng)態(tài)應(yīng)用程序,在該程序中包括系統(tǒng)函數(shù)指針映射表的全局變量g_functionList_ptr和應(yīng)用程序代碼;修改動(dòng)態(tài)應(yīng)用程序的連接配置文件(scater file),編譯連接動(dòng)態(tài)應(yīng)用程序生成可動(dòng)態(tài)裝載的BIN文件。
2. 如權(quán)利要求1所述的一種在嵌入式系統(tǒng)的擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入代碼的方法,其特 征在于所述的系統(tǒng)在運(yùn)行過(guò)程中可通過(guò)步驟2)所寫的服務(wù)程序調(diào)用步驟3)所寫的動(dòng)態(tài) 應(yīng)用程序。
3. 如權(quán)利要求1所述的一種在嵌入式系統(tǒng)的擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入代碼的方法,其特 征在于所述的步驟3)中的指定位置是指g—f皿ctionList—ptr的起始地址。
4. 如權(quán)利要求1所述的一種在嵌入式系統(tǒng)的擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入代碼的方法,其特 征在于所述的步驟4)中的特定的地址是將g_funCti0nList_ptr的起始地址與變量g_ functionList_ptr相加并進(jìn)行字對(duì)齊后得到的地址。
全文摘要
本發(fā)明的目的是提供一種在嵌入式系統(tǒng)的擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入代碼的方法,可以有效解決現(xiàn)有技術(shù)存在的擴(kuò)展性差、產(chǎn)品成本高等問(wèn)題。本發(fā)明將系統(tǒng)的應(yīng)用模塊化,在有需要的時(shí)候把代碼從擴(kuò)展存儲(chǔ)器中拷貝到非易失存儲(chǔ)器中,然后執(zhí)行跳轉(zhuǎn)指令,直接跳到特定的地址運(yùn)行該程序。本發(fā)明的優(yōu)點(diǎn)在于本發(fā)明針對(duì)各種增加擴(kuò)展存儲(chǔ)器的嵌入式系統(tǒng),通過(guò)在運(yùn)行過(guò)程中根據(jù)需要從擴(kuò)展存儲(chǔ)器中動(dòng)態(tài)裝入運(yùn)行代碼的方法,增加應(yīng)用的擴(kuò)展性,從而節(jié)約產(chǎn)品的成本,豐富產(chǎn)品的應(yīng)用,提高產(chǎn)品的競(jìng)爭(zhēng)力。
文檔編號(hào)G06F9/445GK101763273SQ200810207949
公開日2010年6月30日 申請(qǐng)日期2008年12月26日 優(yōu)先權(quán)日2008年12月26日
發(fā)明者錢小剛 申請(qǐng)人:上海聞泰電子科技有限公司