淺析嵌入式存儲系統(tǒng)設計方法
為提高存儲器利用率可采用圖2所示的結構,其中公共段中存放了高32k段之間相互調(diào)用所需要
的跳轉(zhuǎn)表。各段相互調(diào)用之前應先跳轉(zhuǎn)到公共段,執(zhí)行頁面切換后再跳轉(zhuǎn)到被調(diào)用程序的入口,這就實現(xiàn)了18位虛擬地址到16位主存地址的變換。不妨以P1.0,P1.1,P1.2作為頁面基址來指定不同的頁,相應的跳轉(zhuǎn)表程序結構如下:
ADDR:CLR EA ;關中斷
SETB/CLR P1.0 ;切換頁面
SETB/CLR P1.1
SETB/CLR P1.2
SETB EA ;開中斷
JMP REAL_ADDR ;跳轉(zhuǎn)
在公共段(256k存儲芯片的低32k)中存放操作系統(tǒng)和提供給用戶的其他庫函數(shù),其他各段用來存放嵌入式存儲系統(tǒng)的用戶程序。采用圖2結構的單片機與存儲器接口原理圖如圖3所示。其中A0~A15地址線接法與普通存儲器擴展方法相同。
以上考慮了復位時頁面應切換到公共代碼區(qū)。
Keil C51編譯器是單片機開發(fā)應用中非常流行的一種高效編譯器,它支持上述頁面分組技術。
2.3 單片機嵌入式存儲系統(tǒng)數(shù)據(jù)存儲區(qū)擴展
嵌入式存儲系統(tǒng)中引入操作系統(tǒng)需要增加一定的數(shù)據(jù)存儲器開銷,必要時仍可以采用分頁技術擴展數(shù)據(jù)存儲區(qū)容量。
引入操作系統(tǒng)以后,數(shù)據(jù)區(qū)有兩種組織方法,比較簡單的一種方法是操作系統(tǒng)與用戶程序共用一個數(shù)據(jù)區(qū),編譯器將整個程序一起編譯,不必區(qū)分是系統(tǒng)程序還是用戶程序。但這樣對用戶來說操作系統(tǒng)變得不透明了,而且不良的用戶程序可能會破壞系統(tǒng)的數(shù)據(jù)區(qū),導致整個系統(tǒng)崩潰。
相對應的另一種方法是給操作系統(tǒng)與用戶程序分別分配獨立的數(shù)據(jù)區(qū),譬如將128k 數(shù)據(jù)存儲器給操作系統(tǒng)和用戶程序各分配64k。不幸地是,當操作系統(tǒng)與用戶程序一起編譯時,編譯器會自動給它們分配不同的地址,這樣即使存儲器物理上是分開的,操作系統(tǒng)與用戶程序的數(shù)據(jù)區(qū)還是無法地址復用,這極大地浪費了地址空間;而且對傳統(tǒng)的單片機, Keil C 編譯器最大只支持64k數(shù)據(jù)區(qū),幸運地是,這個矛盾可以通過采用虛擬接口的方法加以解決。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論