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

          新聞中心

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

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

          作者: 時間:2010-01-21 來源:網絡 收藏

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

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

          3 系統(tǒng)的性能分析

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

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

          數(shù)據存儲區(qū)切換是由硬件實現(xiàn)的,頁面切換并不降低系統(tǒng)性能。由于操作系統(tǒng)與用戶程序數(shù)據區(qū)相互獨立,對用戶來說整個64k空間都是可用的,這就增加了操作系統(tǒng)的透明性。

          4結論

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

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

          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();