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