<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 淺析嵌入式存儲系統(tǒng)設(shè)計方法

          淺析嵌入式存儲系統(tǒng)設(shè)計方法

          作者: 時間:2010-01-21 來源:網(wǎng)絡(luò) 收藏

          為提高器利用率可采用圖2所示的結(jié)構(gòu),其中公共段中存放了高32k段之間相互調(diào)用所需要


          的跳轉(zhuǎn)表。各段相互調(diào)用之前應(yīng)先跳轉(zhuǎn)到公共段,執(zhí)行頁面切換后再跳轉(zhuǎn)到被調(diào)用程序的入口,這就實現(xiàn)了18位虛擬地址到16位主存地址的變換。不妨以P1.0,P1.1,P1.2作為頁面基址來指定不同的頁,相應(yīng)的跳轉(zhuǎn)表程序結(jié)構(gòu)如下:

          ADDR:CLR EA ;關(guān)中斷

          SETB/CLR P1.0 ;切換頁面

          SETB/CLR P1.1

          SETB/CLR P1.2

          SETB EA ;開中斷

          JMP REAL_ADDR ;跳轉(zhuǎn)

          在公共段(256k芯片的低32k)中存放操作和提供給用戶的其他庫函數(shù),其他各段用來存放的用戶程序。采用圖2結(jié)構(gòu)的單片機與存儲器接口原理圖如圖3所示。其中A0~A15地址線接法與普通存儲器擴展相同。


          以上考慮了復(fù)位時頁面應(yīng)切換到公共代碼區(qū)。

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

          2.3 單片機存儲數(shù)據(jù)存儲區(qū)擴展

          存儲系統(tǒng)中引入操作系統(tǒng)需要增加一定的數(shù)據(jù)存儲器開銷,必要時仍可以采用分頁技術(shù)擴展數(shù)據(jù)存儲區(qū)容量。

          引入操作系統(tǒng)以后,數(shù)據(jù)區(qū)有兩種組織,比較簡單的一種是操作系統(tǒng)與用戶程序共用一個數(shù)據(jù)區(qū),編譯器將整個程序一起編譯,不必區(qū)分是系統(tǒng)程序還是用戶程序。但這樣對用戶來說操作系統(tǒng)變得不透明了,而且不良的用戶程序可能會破壞系統(tǒng)的數(shù)據(jù)區(qū),導(dǎo)致整個系統(tǒng)崩潰。

          相對應(yīng)的另一種方法是給操作系統(tǒng)與用戶程序分別分配獨立的數(shù)據(jù)區(qū),譬如將128k 數(shù)據(jù)存儲器給操作系統(tǒng)和用戶程序各分配64k。不幸地是,當(dāng)操作系統(tǒng)與用戶程序一起編譯時,編譯器會自動給它們分配不同的地址,這樣即使存儲器物理上是分開的,操作系統(tǒng)與用戶程序的數(shù)據(jù)區(qū)還是無法地址復(fù)用,這極大地浪費了地址空間;而且對傳統(tǒng)的單片機, Keil C 編譯器最大只支持64k數(shù)據(jù)區(qū),幸運地是,這個矛盾可以通過采用虛擬接口的方法加以解決。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();