專利名稱:一種支持多種處理器的嵌入式系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種支持多種處理器的嵌入 式系統(tǒng)及方法。
背景技術(shù):
當前嵌入式系統(tǒng)技術(shù)已經(jīng)廣泛應用于社會生活的各個領(lǐng)域,現(xiàn)有的嵌入 式系統(tǒng)中,通常包括嵌入式硬件部分和嵌入式軟件部分。嵌入式軟件與嵌入
式系統(tǒng)的開發(fā)環(huán)境緊密相關(guān),當嵌入式硬件環(huán)境(例如CPU)改變時,若
原有的嵌入式軟件部分不做修改,則該軟件部分將很難工作。也就是說軟件 部分受系統(tǒng)硬件環(huán)境制約比較大,造成軟件部分通用性較差,在更換硬件環(huán) 境時軟件部分的可移植性不強、維護性較差。
因此,現(xiàn)有技術(shù)中就有可能出現(xiàn)必須一套硬件環(huán)境僅對應于特定的一套 軟件環(huán)境的情形,當需要將所開發(fā)的軟件部分移植到其它硬件環(huán)境時,則需
要根據(jù)新硬件環(huán)境下的CPU等硬件情況,對軟件部分進行大量修改操作,
以使其適應新的硬件環(huán)境。這就必然會給嵌入式系統(tǒng)的開發(fā)和維護都增加了 困難。在現(xiàn)有嵌入式系統(tǒng)的這種機制下,也很難構(gòu)建一個強大的嵌入式測試 環(huán)境,使之可以自動的完成對不同環(huán)境下的測試。
如圖1所示,給出了現(xiàn)有的一般的嵌入式軟件部分的設(shè)計結(jié)構(gòu)。其中,
最上層的是應用軟件層(Application),用于實現(xiàn)芯片的高級應用;中間層 是系統(tǒng)層(System),用于完成系統(tǒng)Kenel的一些操作,例如命令解析,任 務切換等;所有軟件部分的操作最終都是要產(chǎn)生對CPU的寄存器讀寫。在 讀寫時, 一般的軟件結(jié)構(gòu)都是通過軟件直接訪問CPU的寄存器來完成相應 的讀寫操作。因此,在圖l所示的嵌入式系統(tǒng)中,如果將軟件部分移植到另 一個嵌入式系統(tǒng)中,當CPU改變時,需要對軟件部分進行大量的修改,才 能正常進行測試或應用。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于,提供一種支持多種處理器的嵌入式系 統(tǒng)及方法,在硬件環(huán)境變化時,實現(xiàn)無需修改系統(tǒng)層和/或應用程序?qū)拥膽?用程序,而適應多種處理器的目標。
本發(fā)明提供一種支持多種處理器的嵌入式系統(tǒng),包括應用軟件層模塊及
與之相連的系統(tǒng)層模塊,還包括CPU,該嵌入式系統(tǒng)還包括分別與應用軟 件層模塊、系統(tǒng)層模塊、CPU分別相連的CPU抽象層模塊,該CPU抽象層 模塊保存有根據(jù)CPU參數(shù)定義的各種應用程序接口 API。
所述應用程序接口 API,是根據(jù)多種嵌入式CPU的具有共性的特性或 功能進行抽象定義得到的接口。所述應用程序接口API,是預先定義在所述 CPU抽象層模塊中的,和/或根據(jù)CPU參數(shù)進行重新定義或修改的接口 。
所述CPU抽象層模塊,進一步包括一個用于存儲所述應用程序接口 API 與CPU類型對應關(guān)系的索引表。
所述應用軟件層模塊和/或系統(tǒng)層模塊,是根據(jù)一個表示CPU類型的全 局變量從所述索引表中獲取針對該CPU類型對應的應用程序接口 API。
所述CPU是ARM7、或者ARM9、或者C51類型的CPU。
本發(fā)明還提供一種支持多種處理器的嵌入式系統(tǒng)的實現(xiàn)方法,包括如下 步驟
(1 )根據(jù)多種嵌入式CPU的具有共性的特性或功能進行抽象定義得到 應用程序4妻口 API;
(2) 利用所述應用程序接口 API構(gòu)成CPU抽象層;
(3) 編寫、編譯及運行系統(tǒng)層和/或應用軟件層的應用程序時,根據(jù)需 要從所述CPU抽象層調(diào)用應用程序接口 API。
所述方法進一步包括
所述應用程序接口 API針對不同的CPU定義為一個相同API或多個不
同API。所述應用程序接口API,是根據(jù)CPU類型重新定義或修改的。 步驟(3)中,進一步包括
所述系統(tǒng)層和/或應用軟件層的應用程序運行時,是根據(jù)一個用于存儲 所述應用程序接口 API與CPU類型對應關(guān)系的索引表調(diào)用應用程序接口 API。
所述系統(tǒng)層和/或應用軟件層的應用程序運行時,是根據(jù)一個表示CPU 類型的全局變量從所述索引表中獲取針對該CPU類型對應的應用程序接口 API。
所述CPU的類型是通過JTag來檢測嵌入式系統(tǒng)CPU獲得的。所述表 示CPU的類型的全局變量是通過串口方式或JTag來修改的。所述CPU是 ARM7、或者ARM9、或者C51類型的CPU。
本發(fā)明所設(shè)計嵌入式系統(tǒng)及其實現(xiàn)方法,因為所使用的應用軟件都是通 過調(diào)用API接口來實現(xiàn)相應功能,而各個API接口針對不同的CPU具有相 同的功能而采用類似定義而保存在CAL層中,更改CPU時,只需根據(jù)CPU 參數(shù)修改或重新定義CAL層中的API即可,所以能夠在不作修改應用軟件 的情況下,移植到不同的開發(fā)環(huán)境。
圖l是現(xiàn)有技術(shù)中一般的嵌入式軟件部分的設(shè)計結(jié)構(gòu)圖; 圖2是本發(fā)明所提供的嵌入式系統(tǒng)的結(jié)構(gòu)框圖3是本發(fā)明實施例中利用計算機上的Pc工具實現(xiàn)JTag訪問嵌入式系 統(tǒng)的示意圖。
具體實施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,以下結(jié)合附圖對本發(fā)明 作進一步地詳細說明。針對現(xiàn)有嵌入式系統(tǒng)技術(shù)中,嵌入式軟件部分對硬件環(huán)境的嚴重依賴, 造成軟件部分可移植性差,移植時操作復雜等問題,本發(fā)明提出了一種支持 多種處理器的嵌入式系統(tǒng)及其實現(xiàn)方法。
相比于現(xiàn)有技術(shù)中嵌入式系統(tǒng)的軟件部分需要直接訪問CPU寄存器而 言,本發(fā)明的創(chuàng)新點主要在于
提供一個抽象層CAL (CPU Abstract Level)作為嵌入式系統(tǒng)軟件部分 與CPU硬件的接口,使得上層軟件獨立于CPU的選擇,在抽象層中提供根 據(jù)CPU參數(shù)定義的各種API (應用程序接口, Application Programming Interface)接口,供軟件部分根據(jù)實際需要進行調(diào)用。
在調(diào)用時,軟件部分只要調(diào)用這些API接口來實現(xiàn)相應的軟件功能,而 不用關(guān)心當前使用的究竟是哪種處理器。因此,軟件設(shè)計時,無需關(guān)注CPU 的具體參數(shù),只要根據(jù)實際需要寫入該軟件應用時需要調(diào)用的API即可。同 時,在改變CPU硬件時,僅需要根據(jù)新的CPU參數(shù),修改或添加相關(guān)API 接口的定義即可。其中,可以預先針對各種類型的CPU分別定義好相應的 API接口并保存在抽象層中供軟件部分調(diào)用,也可以根據(jù)CPU的變化動態(tài) 修改API接口定義。
同時,本發(fā)明還進一步給出了可以動態(tài)識別和修改處理器定義的方法。
如圖2所示,給出了本發(fā)明所提供的嵌入式系統(tǒng)的結(jié)構(gòu)框圖,包括
(1) 最上層的應用軟件(Application)層模塊,用于實現(xiàn)嵌入式芯片 的高級應用,根據(jù)任務需要調(diào)用所需的API接口,實現(xiàn)相應功能;
(2) 中間層是系統(tǒng)層(System)模塊,用于完成嵌入式系統(tǒng)Kenel的 一些操作,例如命令解析,任務切換等,根據(jù)系統(tǒng)控制需要調(diào)用所需的相應 API接口,實現(xiàn)相應功能;
(3 ) CPU抽象層模塊,用于定義及保存根據(jù)CPU參數(shù)進行定義生成的 具有特定功能的面向應用軟件模塊和系統(tǒng)層模塊的各種API接口 ,并在應用 軟件模塊和/或系統(tǒng)層模塊需要時,提供相應的API接口功能。
例如,常見的APU妻口
CpuJTimerEnable(int index, bool enable); /*打開或者關(guān)閉時4中*/Cpu—CacheEnable(int index, bool enable); /*打開或者關(guān)閉cache功能*/ Cpu—Buslnit(int index, int type); /*初始4匕指定的bus */
當然,API接口并不限于上述列舉的幾種,使用者可根據(jù)需要在CAL 層中結(jié)合CPU參數(shù)進行定義,定義出軟件部分所需要的各種功能的API接。
(4)CPU硬件模塊,其為某一類型的嵌入式CPU,例如ARM7、或者 ARM9、或者C51類型的CPU。圖2僅示例性給出了幾種常見的CPU類型, 還可以包括其它類型的嵌入式CPU。通常在一個嵌入式系統(tǒng)中,僅需要一 個CPU即可。
本發(fā)明中所定義的CPU抽象層(Cpu Abstract Level,簡稱CAL)模塊, 是為了使得對CPU的操作標準化,以便上層的應用軟件可以在不同的嵌入 式系統(tǒng)中進行移植,以及移植后方便的進行擴展。
在定義CPU抽象層模塊時
首先,要對CPU需要提供的服務進行抽象,將所有的應用程序接口 API 定義到CAL層中,上層的應用軟件對CPU的調(diào)用,只要調(diào)用這些定義在 CAL中的API接口,就能實現(xiàn)相應的功能,而不用關(guān)心當前使用的是哪種 處理器。
因此,應用軟件只需編譯一次的代碼,就可以工作在不同的硬件平臺上, 不同的處理器來具體的實現(xiàn)這些API時,所作的操作只是簡單的修改一下 CAL的CPU定義的API接口 ?;蛘哚槍Σ煌腃PU類型,預先針對某一功 能的API接口做好定義,保存在CAL層中供軟件調(diào)用。定義CPU的抽象接 口,是指才艮據(jù)CPU的特性或者功能抽象出CPU的共性,編寫為對應的API 接口。比如,所有的CPU都會有時鐘,但是每個CPU對于時鐘的實現(xiàn)機制 和控制的寄存器是不一樣的。但是對于上層來說很簡單,只是打開或者關(guān)閉 時鐘API接口,也許還會加上其他一些控制,但是這些控制都是有共性的。 抽象出這個時鐘接口后,上層軟件如果想打開時鐘,只要調(diào)用這個統(tǒng)一的接 口就可以了 ,但具體到每個CPU的實現(xiàn)可以不一樣,需根據(jù)CPU特性設(shè)定。 例如,對于ARM7和ARM9而言,都可以定義各自的API4妄口 。也可 以先定義一個API接口,更換硬件環(huán)境好再動態(tài)修改。例如初始定義ARM7 的時鐘API接口,換到ARM9硬件環(huán)境時,只需修改相應參數(shù),根據(jù)CPU 參數(shù)修改時鐘API接口中的參數(shù)即可,而無需對系統(tǒng)層或應用軟件層的軟件 代碼進行修改、以及重新編譯,編寫好軟件后只需編譯一次即可應用在不同 的CPU硬件環(huán)境中,增強嵌入式系統(tǒng)的擴展性及兼容性。上述修改僅在CAL 進4亍即可。
為了能夠動態(tài)地修改CPU的抽象接口 API的定義,我們需要在CAL中 增加一個表,這個表中包含了標準API到各個具體CPU實現(xiàn)的入口,只需 要修改表的索引項,就可以將入口指定到對應的CPU函數(shù)。這種實現(xiàn)方法 的缺點是增加了一定的代碼尺寸,在產(chǎn)品化的應用中可能不太適用,在這種 情況可能需要在編譯時修改CPU的定義來實現(xiàn)函數(shù)入口的切換。但是在測 試環(huán)境的建設(shè)中,代碼尺寸不是問題,完全可以采用這種方法來實現(xiàn)動態(tài)的 修改。
比如打開或者關(guān)閉時鐘的函數(shù),對于Arm7和Arm9,分別有 Arm7_TimerEnable(int index, bool enable) Arm9一TimerEnbale(int index, bool enable)
兩個API的接口一樣,但是由于CPU的不同,他們的實現(xiàn)是不一樣的, 我們會有一個全局的變量來表示當前系統(tǒng)的CPU類型,g—CpuType,這樣 可以創(chuàng)建這樣一個表
/*每個成員變量都是一個函數(shù)指針,完成特定的CPU功能*/
Typedef struct tag一CpuApi
pTimer();
}TableCpuApi;
這樣可以聲明一個全局的結(jié)構(gòu)體變量,相當于軟件中的一個表,每增加 一個CPU的定義就要增加對應的表項。如
TableCpuApi g—CpuApi[]=
{ Arm7—TimerEnable,.....},
{Arm9—TimerEnbale, "..},
};
根據(jù)全局的g—CpuType來決定調(diào)用表中的那個API。例如, #define Cpu一TimerEnable g一CpuApi[g—CpuType].pTimer
在實際應用中,我們可以通過連接JTag來實現(xiàn)對CPU的動態(tài)檢測,從 而自動完成CPU定義的4務改,結(jié)構(gòu)如下
如圖3所示,利用計算機上的Pc工具(如Dragon)實現(xiàn)JTag訪問嵌入 式CPU功能,通過JTag可以動態(tài)的識別當前的CPU類型,然后對CAL層 進行設(shè)置,這樣,軟件就可以正常工作了。
每個CPU都會有JTag接口 ,計算機上的Pc工具通過JTag發(fā)送命令可 以得到相應的回應信息。標準的JTag定義有幾條掃描鏈,其中一條可以得 到CPU的類型。得到CPU的類型以后,可以通過命令修改軟件的全局變量 g—CpuType,從上邊的示例可以看到,這個全局變量改變了,所有的API調(diào) 用都會從制定的表項中取出,也就實現(xiàn)了動態(tài)的切換。
修改這個全局變量有很多種方法。可以通過串口發(fā)命令到嵌入式端,也 可以直接用JTag修改全局變量地址的值, 一般用串口比較簡單,只需要底 層增加一個響應命令來完成變量的修改就可以了 。
本發(fā)明與現(xiàn)有方案主要在軟件架構(gòu)上有所不同,現(xiàn)有的方案由于需要直 接訪問CPU接口,移植性和維護性較差。
本發(fā)明實現(xiàn)了抽象層的定義,使上層軟件獨立于CPU的選擇。同時, 給出了可以動態(tài)識別和修改處理器定義的方法。
本文所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本
領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。因此,凡在本發(fā)明的 精神和原則之內(nèi)所作的任何修改、等同替換、改進以及更新等等,均應包含 在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1、一種支持多種處理器的嵌入式系統(tǒng),包括應用軟件層模塊及與之相連的系統(tǒng)層模塊,還包括CPU,其特征在于,該嵌入式系統(tǒng)還包括分別與應用軟件層模塊、系統(tǒng)層模塊、CPU分別相連的CPU抽象層模塊,該CPU抽象層模塊保存有根據(jù)CPU參數(shù)定義的各種應用程序接口API。
2、 如權(quán)利要求1所述的嵌入式系統(tǒng),其特征在于,所述應用程序接口 API,是根據(jù)多種嵌入式CPU的具有共性的特性或 功能進行抽象定義得到的接口 。
3、 如權(quán)利要求1所述的嵌入式系統(tǒng),其特征在于,所述應用程序接口 API,是預先定義在所述CPU抽象層模塊中的,和/ 或根據(jù)CPU參數(shù)進行重新定義或修改的接口 。
4、 如權(quán)利要求1所述的嵌入式系統(tǒng),其特征在于,所述CPU抽象層模塊,進一步包括一個用于存儲所述應用程序接口 API 與CPU類型對應關(guān)系的索引表。
5、 如權(quán)利要求4所述的嵌入式系統(tǒng),其特征在于,所述應用軟件層模塊和/或系統(tǒng)層模塊,是根據(jù)一個表示CPU類型的全 局變量從所述索引表中獲取針對該CPU類型對應的應用程序接口 API。
6、 如權(quán)利要求1至5中任何一項所述的嵌入式系統(tǒng),其特征在于, 所述CPU是ARM7、或者ARM9、或者C51類型的CPU。
7、 一種支持多種處理器的嵌入式系統(tǒng)的實現(xiàn)方法,其特征在于,包括 如下步驟(1 )根據(jù)多種嵌入式CPU的具有共性的特性或功能進行抽象定義得到 應用程序接口 API;(2)利用所述應用程序接口 API構(gòu)成CPU抽象層;(3)編寫、編譯及運行系統(tǒng)層和/或應用軟件層的應用程序時,根據(jù)需 要從所述CPU抽象層調(diào)用應用程序接口 API。
8、 如權(quán)利要求7所述的方法,其特征在于,所述方法進一步包括所述應用程序接口 API針對不同的CPU定義為一個相同API或多個不 同API。
9、 如權(quán)利要求7所述的方法,其特征在于, 所述應用程序接口 API,是根據(jù)CPU類型重新定義或修改的。
10、 如權(quán)利要求7所述的方法,其特征在于, 步驟(3)中,進一步包括所述系統(tǒng)層和/或應用軟件層的應用程序運行時,是根據(jù)一個用于存儲 所述應用程序接口 API與CPU類型對應關(guān)系的索引表調(diào)用應用程序接口 API。
11、 如權(quán)利要求IO所述的方法,其特征在于,所述系統(tǒng)層和/或應用軟件層的應用程序運行時,是4艮據(jù)一個表示CPU 類型的全局變量從所述索引表中獲取針對該CPU類型對應的應用程序接口 API。
12、 如權(quán)利要求9所述的方法,其特征在于,所述CPU的類型是通過JTag來檢測嵌入式系統(tǒng)CPU獲得的。
13、 如權(quán)利要求9所述的方法,其特征在于,所述表示CPU的類型的全局變量是通過串口方式或JTag來修改的。
14、 如權(quán)利要求7至13中任何一項所述的方法,其特征在于, 所述CPU是ARM7、或者ARM9、或者C51類型的CPU。
全文摘要
本發(fā)明公開了一種支持多種處理器的嵌入式系統(tǒng),包括應用軟件層模塊及與之相連的系統(tǒng)層模塊,還包括CPU,該嵌入式系統(tǒng)還包括分別與應用軟件層模塊、系統(tǒng)層模塊、CPU分別相連的CPU抽象層模塊,該CPU抽象層模塊保存有根據(jù)CPU參數(shù)定義的各種應用程序接口API。編寫、編譯及運行系統(tǒng)層和/或應用軟件層的應用程序時,根據(jù)需要從所述CPU抽象層調(diào)用應用程序接口API。本發(fā)明所設(shè)計嵌入式系統(tǒng)及其實現(xiàn)方法,在更改CPU時,只需根據(jù)CPU參數(shù)修改或重新定義CPU抽象層中的API即可,所以能夠在不作修改應用軟件的情況下,移植到不同的開發(fā)環(huán)境。
文檔編號G06F9/44GK101178653SQ20071017864
公開日2008年5月14日 申請日期2007年12月3日 優(yōu)先權(quán)日2007年12月3日
發(fā)明者游明琦, 鑫 黃 申請人:北京中星微電子有限公司