專利名稱:一種判別嵌入式系統(tǒng)內(nèi)存大小的方法
技術領域:
本發(fā)明涉及通訊領域中對CPU最小系統(tǒng)的內(nèi)存大小的判別方法,特別是適合于嵌入式系統(tǒng)中內(nèi)存是各種動態(tài)隨機存取存儲器DRAM)的內(nèi)存大小判別方法應用。
背景技術:
在通訊領域中大部分單板都配有CPU,對于一個CDMA蜂窩移動通訊系統(tǒng)來說,配有CPU的單板就有幾十種之多。
CPU和嵌入式操作系統(tǒng)在正式運行時都需要確知其內(nèi)存的大小,一般流程是通過一個引導程序(一般叫BOOT)去下載并引導正式版本程序運行,在這個過程的開始它將先清除內(nèi)存再設置正確的內(nèi)存大小,為正式版本程序的運行準備好環(huán)境。如果內(nèi)存大小設置不對將會引起訪問異常、內(nèi)存得不到有效利用等問題。
對于CPU最小系統(tǒng)來講,變化最多的可能是內(nèi)存的大小,同一單板經(jīng)常根據(jù)需求的變化貼不同大小的內(nèi)存,一般的做法是在程序中設定內(nèi)存大小和單板實際內(nèi)存大小一致。這樣就會造成同一單板有多個版本和BOOT(引導程序),維護時需要識別不同的版本和BOOT程序,因此給維護帶來相當大的不便。
以CDMA蜂窩移動通訊系統(tǒng)為例,如果系統(tǒng)有30種帶CPU的單板,其中10種會存在兩種不同大小的內(nèi)存變化,每個軟件有5個版本,這樣就會造成要多保存和維護50個軟件版本。同時,操作系統(tǒng)會在BOOT中對內(nèi)存清0,如果按實際內(nèi)存大小設置將使這個清除過程耗時太長,從而拉長整個系統(tǒng)的上電過程。
發(fā)明目的本發(fā)明的目的是提供一種對內(nèi)存大小的自動判別方法,為了克服現(xiàn)有技術中同一CPU內(nèi)存不同導致多個軟件和BOOT版本的缺點,解決現(xiàn)有技術中存在的軟件和BOOT版本太多、以及BOOT程序引導太慢的問題。
本發(fā)明的技術方案如下一種對內(nèi)存大小的自動判別方法,其包括以下步驟a)在程序上電運行后BOOT開始搬移代碼到內(nèi)存前,先設置內(nèi)存控制器所能訪問的內(nèi)存地址范圍為最大,然后往內(nèi)存起始地址中寫0,并設定一第一地址的大小小于物理內(nèi)存所能取的最小值;b)往所述第一地址所決定的內(nèi)存單元中寫入一個常數(shù);c)CPU通過所述內(nèi)存控制器讀出起始地址和第一地址這兩個地址中的內(nèi)容,并對它們進行比較,如果相等則結束判別過程,內(nèi)存大小就是當前第一地址的大小的一半,如果不相等把第一地址的值擴大1倍,重復步驟b)的判斷。
所述的方法,其中,所述第一地址為2的N次方。
所述的方法,其中,所述步驟c)還包括所述CPU在其地址線上驅動出第一地址的內(nèi)容,并把相關命令一起送給所述內(nèi)存控制器,所述內(nèi)存控制器收到該CPU的地址后響應CPU的命令,把數(shù)據(jù)線的數(shù)據(jù)轉換成內(nèi)存可以識別的信號,所述內(nèi)存則響應所述內(nèi)存控制器的地址及命令,并依下述規(guī)則進行處理c1)如果第一地址超過所述內(nèi)存控制器中設置的最大地址,則該內(nèi)存拒絕該CPU的請求;c2)如果第一地址未超過該內(nèi)存控制器中設置的最大地址但是大于實際物理內(nèi)存大小,所述內(nèi)存控制器則轉換第一地址到內(nèi)存,但內(nèi)存只會響應所述第一地址除以物理內(nèi)存余下的地址;
c3)如果第一地址未超過內(nèi)存控制器中設置的最大地址也不大于實際物理內(nèi)存大小,所述內(nèi)存控制器會轉換第一地址到所述內(nèi)存,所述內(nèi)存也會響應整個第一地址。
本發(fā)明所提供的一種對內(nèi)存大小的自動判別方法,由于充分利用了內(nèi)存尋址的特點和嵌入式操作系統(tǒng)下BOOT的引導流程,與現(xiàn)有技術相比,有效的減少了因內(nèi)存大小改變引起的軟件和BOOT版本的增加,減少了大量的維護工作和避免出錯的可能;有了內(nèi)存大小的自動判別使內(nèi)存大小的自動配置成為可能,從而提高了系統(tǒng)上電到正常運行的速度。
圖1是本發(fā)明的一種對內(nèi)存大小的自動判別方法中CPU與內(nèi)存間的連接示意圖;圖2是本發(fā)明的一種對內(nèi)存大小的自動判別方法的流程圖。
具體實施例方式
以下結合附圖,通過對本發(fā)明的較佳實施例的詳細描述,將使本發(fā)明的技術方案及其有益效果顯而易見。
本發(fā)明的所述對內(nèi)存大小的自動判別方法,充分利用內(nèi)存尋址的特點和嵌入式操作系統(tǒng)下BOOT的引導流程,以實現(xiàn)內(nèi)存的自動判別和配置。
本發(fā)明所述的方法描述如下第一步在程序上電運行后BOOT開始搬移代碼到內(nèi)存前,先設置內(nèi)存控制器所能訪問的內(nèi)存地址范圍為最大,然后往內(nèi)存的0地址(即內(nèi)存的起始地址)中寫0,并設定1個地址(記為第一地址)的大小小于物理內(nèi)存所能取的最小值,并且為2的N次方;第二步向第一地址所決定的內(nèi)存單元中寫入一個常數(shù),如0x11881188。所述內(nèi)存控制器會響應CPU的命令,對CPU的地址線A31~A0進行譯碼,如圖1所示的,并把它轉化為對內(nèi)存訪問的行列線和塊選擇線,把CPU要寫的值存放到第一地址指定的內(nèi)存單元中。
第三步CPU通過所述內(nèi)存控制器讀出0地址和第一地址這兩個地址中的內(nèi)容,并對它們進行比較,如果相等則結束判別過程,認為內(nèi)存大小就是當前第一地址的大小的一半。如果不相等把第一地址的值擴大1倍,重復第二步的判斷。
下面詳細介紹圖1所示的一個CPU最小系統(tǒng)內(nèi)存大小的自動判別的實現(xiàn)方式圖1所示的CPU最小系統(tǒng)主要由一個CPU核110、內(nèi)存控制器120和內(nèi)存130構成。所述CPU110負責計算功能,不具有內(nèi)存控制功能;內(nèi)存控制由所述內(nèi)存控制器120完成,它負責解釋CPU110的指令,并根據(jù)指令在所述內(nèi)存130中存取數(shù)據(jù)。圖1中的A0~A31是CPU的地址線,Dadr0~Dadr12是內(nèi)存的行列線,BS0和BS1則是內(nèi)存的塊選線。
所述CPU110上電后必須正確判斷并配置內(nèi)存大小并告知操作系統(tǒng),本發(fā)明的內(nèi)存大小的自動判斷在所述CPU110上電后BOOT搬移代碼到所述內(nèi)存130前執(zhí)行,這部分一般只能用匯編代碼實現(xiàn)。所述CPU110在完成其工作所需的基本配置后,將先設置所述內(nèi)存控制器120訪問所述內(nèi)存130的一些參數(shù),然后配置該內(nèi)存控制器120可訪問的內(nèi)存范圍為最大,再通過該內(nèi)存控制器120把所述內(nèi)存的起始地址即0地址的內(nèi)容清0,并且設定起始的第一地址的大小,此地址必須為2的N次方,一般為1M。
接下來開始內(nèi)存大小的判斷過程,往所述第一地址中寫入一個常數(shù),如0x11881188。所述CPU110會在其地址線A31~A0上驅動出第一地址的內(nèi)容,并把相關命令(比如讀寫)一起送給所述內(nèi)存控制器120。所述內(nèi)存控制器120收到該CPU110的地址后響應CPU的命令,把A31~A0的數(shù)據(jù)轉換成Dadr12~Dadr0和BS1、BS0這些內(nèi)存可以識別的信號,轉換是分兩次進行的,先轉換A31~A0的部分地址作為內(nèi)存的行地址,再轉換其余的地址作為列地址,內(nèi)存則響應內(nèi)存控制器的地址及命令,這個過程的規(guī)則如下1、如果第一地址超過內(nèi)存控制器中設置的最大地址,它會拒絕CPU的請求;2、如果第一地址未超過內(nèi)存控制器中設置的最大地址但是大于實際物理內(nèi)存大小,內(nèi)存控制器會轉換第一地址到內(nèi)存,但內(nèi)存只會響應第一地址除以物理內(nèi)存余下的地址;3、如果第一地址未超過內(nèi)存控制器中設置的最大地址也不大于實際物理內(nèi)存大小,內(nèi)存控制器會轉換第一地址到內(nèi)存,內(nèi)存也會響應整個第一地址。
接下來讀出前一步寫到第一地址的內(nèi)容,判斷是否為0x11881188,如果是認為內(nèi)存的實際大小就是當前第一地址的大小的一半;如果不是把第一地址的大小擴大1倍(即新地址為原地址的兩倍),再往第一地址中寫入0x11881188,繼續(xù)進行下一輪判斷,直到0地址中讀出的內(nèi)容等于0x11881188為止。
需要說明的是,整個判斷過程應該在CPU上電運行之初BOOT搬移程序到內(nèi)存前進行,否則會出現(xiàn)意想不到的異常情況。
本方法有效解決了因單板內(nèi)存改變而引起的軟件和BOOT版本的增加,這在大產(chǎn)品中減少維護量和避免版本多引起的混亂有很大幫助。利用內(nèi)存的自動判別方法可以實現(xiàn)內(nèi)存大小的自動配置,從而提高上電速度,提升產(chǎn)品性能。為了確保內(nèi)存自動判斷的準確性,可以在每次判斷中增加判斷的地址數(shù)。
總之,本發(fā)明所提供的內(nèi)存大小的自動判別方法是簡單、穩(wěn)定、可靠的內(nèi)存大小判別方案,能夠為電訊業(yè)推廣應用,可有效提高行業(yè)軟件維護管理水平。
應當理解的是,本發(fā)明的所述方法,并不限于上述具體實施方式
的描述,本領域普通技術人員可以根據(jù)上述技術構思做出其他改變或變形,所有這些改變或變形,都應屬于本發(fā)明所附權利要求的保護范圍。
權利要求
1.一種判別嵌入式系統(tǒng)內(nèi)存大小的方法,其包括以下步驟a)在程序上電運行后BOOT開始搬移代碼到內(nèi)存前,先設置內(nèi)存控制器所能訪問的內(nèi)存地址范圍為最大,然后往內(nèi)存起始地址中寫0,并設定一第一地址的大小小于物理內(nèi)存所能取的最小值;b)往所述第一地址所決定的內(nèi)存單元中寫入一個常數(shù);c)CPU通過所述內(nèi)存控制器讀出起始地址和第一地址這兩個地址中的內(nèi)容,并對它們進行比較,如果相等則結束判別過程,內(nèi)存大小就是當前第一地址的大小的一半,如果不相等把第一地址的值擴大1倍,重復所述步驟b)的判斷。
2.根據(jù)權利要求1所述的方法,其特征在于,所述第一地址為2的N次方。
3.根據(jù)權利要求2所述的方法,其特征在于,所述步驟c)還包括所述CPU在其地址線上驅動出第一地址的內(nèi)容,并把相關命令一起送給所述內(nèi)存控制器,所述內(nèi)存控制器收到該CPU的地址后響應CPU的命令,把數(shù)據(jù)線的數(shù)據(jù)轉換成內(nèi)存可以識別的信號,所述內(nèi)存則響應所述內(nèi)存控制器的地址及命令,并依下述規(guī)則進行處理c1)如果第一地址超過所述內(nèi)存控制器中設置的最大地址,則該內(nèi)存拒絕該CPU的請求;c2)如果第一地址未超過該內(nèi)存控制器中設置的最大地址但是大于實際物理內(nèi)存大小,所述內(nèi)存控制器則轉換第一地址到內(nèi)存,但內(nèi)存只會響應所述第一地址除以物理內(nèi)存余下的地址;c3)如果第一地址未超過內(nèi)存控制器中設置的最大地址也不大于實際物理內(nèi)存大小,所述內(nèi)存控制器會轉換第一地址到所述內(nèi)存,所述內(nèi)存也會響應整個第一地址。
全文摘要
本發(fā)明的一種對內(nèi)存大小的自動判別方法,涉及一種通訊領域中對CPU最小系統(tǒng)的內(nèi)存配置方法,其包括以下步驟先設置內(nèi)存控制器所能訪問的內(nèi)存地址范圍為最大,然后往內(nèi)存起始地址中寫0,并設定一第一地址的大小小于物理內(nèi)存所能取的最小值;往所述第一地址所決定的內(nèi)存單元中寫入一個常數(shù);CPU通過所述內(nèi)存控制器讀出起始地址和第一地址這兩個地址中的內(nèi)容,并對它們進行比較判定內(nèi)存大小。本發(fā)明方法有效的減少了因內(nèi)存大小改變引起的軟件和BOOT版本的增加,減少了大量的維護工作和避免出錯的可能;有了內(nèi)存大小的自動判別使內(nèi)存大小的自動配置成為可能,從而提高了系統(tǒng)上電到正常運行的速度。
文檔編號G06F9/445GK1564130SQ20041002680
公開日2005年1月12日 申請日期2004年4月6日 優(yōu)先權日2004年4月6日
發(fā)明者鄒同亮, 趙少偉 申請人:中興通訊股份有限公司