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