<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于虛擬存儲的嵌入式存儲系統的設計方法

基于虛擬存儲的嵌入式存儲系統的設計方法

——
作者:復旦大學(xué)電子工程系 李向華,張小芳,陸起涌 時(shí)間:2006-09-11 來(lái)源:半導體技術(shù) 收藏
1引言 

由嵌入式硬件和固化在硬件平臺中的嵌入式軟件組成。傳統的小規模,軟件多采用前后臺的方法,通常應用于實(shí)時(shí)性要求不高的簡(jiǎn)單場(chǎng)合;對于復雜的應用場(chǎng)合,較為普遍的做法是給系統配上嵌入式實(shí)時(shí)操作系統(RTOS),這樣不僅能夠使系統具有良好的實(shí)時(shí)性能,降低軟件編制的工作量,還可以提高整個(gè)系統的穩定性。此外,為了簡(jiǎn)化用戶(hù)程序,系統通常要提供一些必要的庫函數供用戶(hù)調用。同前后臺系統相比,這種實(shí)時(shí)增加了系統存儲空間的開(kāi)銷(xiāo)。Intel 8051系列及各種兼容的因其極高的性?xún)r(jià)比、豐富的庫函數和長(cháng)期的技術(shù)積累等背景而被廣泛應用于各種嵌入式領(lǐng)域中。受傳統尋址空間的限制,嵌入式應用中經(jīng)常需要進(jìn)行存儲空間擴展。本文借鑒傳統計算機系統設計中的虛擬存儲技術(shù),以8051為例提出一種采用頁(yè)面分組和虛擬接口技術(shù)擴展存儲空間的方法。本方法與Keil C編譯器具有良好的兼容性。  

2 存儲系統的組織  

2.1 虛擬存儲系統 

計算機系統中常采用虛擬存儲技術(shù)來(lái)擴展存儲系統容量,頁(yè)式虛擬是常用的一種組織方法。在這種方法下,整個(gè)虛擬地址空間和主存空間均被分成容量相等的若干頁(yè),地址變換機構(通常是一個(gè)快速地址變換表)建立了虛擬空間到主存空間虛頁(yè)到實(shí)頁(yè)的映射。頁(yè)式組織關(guān)系如圖1。 

虛擬存儲系統利用計算機CPU中的一組寄存器堆作為頁(yè)表基址寄存器,如圖1(b)所示,它與頁(yè)表一起給出用戶(hù)程序地址。實(shí)際計算機系統的頁(yè)式虛擬存儲要比這復雜得多,還需考慮未命中時(shí)的外部地址變換以及頁(yè)面替換算法,然而在嵌入式系統中這些都可以簡(jiǎn)化乃至省去。 

嵌入式分頁(yè)面

2.2 單片機嵌入式系統程序存儲區擴展 

受虛擬存儲系統啟發(fā),我們把上述方法作了一些修改以應用于嵌入式系統中。由于系統設計選用的外部程序容量為256k,而一般單片機(如 8051系列)的尋址空間為64k,為簡(jiǎn)單起見(jiàn),以64k為一頁(yè),將256k虛擬地址分為4頁(yè)映射到單片機的64k空間。嵌入式系統中地址變換機構可被簡(jiǎn)化:?jiǎn)纹瑱C沒(méi)有專(zhuān)用的頁(yè)表基址寄存器,可以通過(guò)額外的端口線(xiàn)(如P1.0,P1.1,P1.2等)作為基址指定不同的頁(yè)面,頁(yè)表查詢(xún)可用一個(gè)跳轉表實(shí)現。然而頁(yè)面切換前后必須保證能夠正確訪(fǎng)問(wèn)到跳轉表,因此所有64k頁(yè)面都需要有一個(gè)完全相同的代碼段用來(lái)存放跳轉表和中斷矢量等公共資源。 
為提高存儲器利用率可采用圖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)接法與普通存儲器擴展方法相同。

頁(yè)面分組接口電路
以上考慮了復位時(shí)頁(yè)面應切換到公共代碼區。  

Keil C51編譯器是單片機開(kāi)發(fā)應用中非常流行的一種高效編譯器,它支持上述頁(yè)面分組技術(shù)。  

2.3 單片機嵌入式系統數據存儲區擴展 

嵌入式系統中引入操作系統需要增加一定的數據存儲器開(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ò)采用虛擬接口的方法加以解決。 

為此,將公共代碼段中的程序單獨編譯,并且在鏈接、定位目標代碼時(shí),給操作系統和公共庫函數的每個(gè)函數在0x0000~0x7FFFH內分別指定一個(gè)固定的首地址。鑒于用戶(hù)程序可能調用這些函數,需要為這些函數分別編寫(xiě)一個(gè)相同類(lèi)型的同名偽函數,每個(gè)偽函數僅包含一條到真實(shí)函數(入口地址已知)的轉移指令,所有這些函數都存放在一個(gè)被稱(chēng)為虛擬接口的頭文件中。虛擬接口文件與用戶(hù)程序一起編譯,完成用戶(hù)程序與操作系統兩次編譯的接口。顯然這種方法僅占用了用戶(hù)區的極少量代碼空間,而絲毫沒(méi)有浪費用戶(hù)數據區,同時(shí)又實(shí)現了地址復用。 

公共代碼段和操作系統的數據區特殊的對應關(guān)系(見(jiàn)圖4),很容易通過(guò)P2端口線(xiàn)來(lái)指定。由單片機外部程序區訪(fǎng)問(wèn)時(shí)序(圖 5)可知,PSEN的上升沿后數據總線(xiàn)A0~A7上開(kāi)始出現指令或指令操作數,此時(shí)的地址線(xiàn)A15指示當前訪(fǎng)問(wèn)的是公共代碼段(對應數據區高64k)還是其他程序段(對應數據區低64k),因此在PSEN上升沿鎖存地址線(xiàn)A15,用它可以選擇不同的數據存儲器空間。

數據區對應關(guān)系


外圍程序存儲器時(shí)序

3 存儲系統的性能分析 

本文基于虛擬存儲系統思想實(shí)現了嵌入式系統中大容量存儲器的擴展。不難看出系統的擴展余地受端口線(xiàn)的限制。由于在同一塊芯片中構造圖2所示的結構,需要多使用一根端口線(xiàn),因此對于8051系列使用整個(gè)P1口可以將系統的程序虛擬空間擴展至8M字節。數據存儲區擴展的最大容量還與程序在編譯時(shí)所被分成塊的數目有關(guān),最大可達16M字節,這在單片機嵌入式系統中已經(jīng)是足夠大了。 

程序在調用不同頁(yè)面的函數時(shí)需要額外的軟件切換周期,頻繁的頁(yè)面切換會(huì )降低系統的性能,因此編譯時(shí)應仔細選擇函數,盡可能將相關(guān)的函數分配在同一頁(yè)中。 

數據存儲區切換是由硬件實(shí)現的,頁(yè)面切換并不降低系統性能。由于操作系統與用戶(hù)程序數據區相互獨立,對用戶(hù)來(lái)說(shuō)整個(gè)64k空間都是可用的,這就增加了操作系統的透明性。  

4結論 

嵌入式系統由于它的專(zhuān)用性和特殊性,系統的軟硬件設計都與傳統的計算機系統設計方法有所不同。但進(jìn)行嵌入式系統設計時(shí)仍然很有必要借鑒傳統計算機系統體系結構成熟的設計方法,“量體裁衣”為我所用。作者在進(jìn)行嵌入式平臺設計時(shí)借鑒了傳統計算機虛擬存儲思想來(lái)擴展存儲系統,并在實(shí)際項目中得以應用,證明這種方法是非常有效的。



關(guān)鍵詞: 單片機 嵌入式系統 存儲器

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>