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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 巧用C51的BANK編譯模式

          巧用C51的BANK編譯模式

          作者: 時間:2012-02-15 來源:網(wǎng)絡 收藏
          1引言

          隨著C編譯器被廣泛地應用于系列單片機軟件的開發(fā),大批的開發(fā)人員從繁瑣的匯編語言編程中解放出來。 C不僅縮短了軟件的開發(fā)周期,而且使應用軟件具有較好的結(jié)構(gòu)性和可維護性。在使用C51編譯器的應用設(shè)計中,大多數(shù)程序代碼都不超過51系列單片機的最大尋址空間64K,但在實際應用中也有程序代碼超出64K的情況。這種情況雖然可以通過更換高檔CPU來解決,但在產(chǎn)品批量較大且對CPU性能要求并不高時,不希望使用高檔CPU,因為這樣會增加產(chǎn)品的成本。那么能否在廉價的51系列單片機中突破代碼64K空間的限制而進行產(chǎn)品的開發(fā)呢?C51編譯器的模式正是為了解決此問題。作者通過對C51編譯器模式的使用,總結(jié)出一套該模式的使用方法。本文對這一使用方法進行說明,并對代碼和數(shù)據(jù)混合使用的特殊用法作了介紹。

          2BANK的工作方式

          C51的BANK模式對應用系統(tǒng)的代碼存儲器結(jié)構(gòu)有特殊要求。圖1為C51BANK模式下代碼存儲器的物理結(jié)構(gòu)。

          代碼地址空間的上半部,以重疊BANK0的物理地址空間,硬件設(shè)計了n個存儲器頁面來存儲程序代碼。在任一時刻 BANK0~n中,只能有一個BANK處于激活狀態(tài)。當BANKi處于激活狀態(tài)時,其物理地址空間為BankBaseAddr~0xFFFF。只有當 BANK處于激活狀態(tài)時,BANK中的程序代碼才可以運行。為了尋址任意BANK中的過程代碼, C51編譯器為過程調(diào)用生成了如下的BANK地址:

          Base地址是可變的,但為譯碼方便,一般選為 8000H。當某過程調(diào)用任一不在同一BANK中的其它過程時,BANK地址中的BANKNUMBER被送到切換BANK的譯碼電路,而16位的偏移地址被送往地址總線,從而實現(xiàn)不同BANK中的過程調(diào)用。下半部分的代碼空間沒有作BANK處理,它被稱為ROOTBANK。這是因為C51編譯器僅對過程調(diào)用產(chǎn)生BANK地址,而對于過程調(diào)用之外的所有其它部分如CONST等不產(chǎn)生BANK地址,ROOTBANK即用來存放這部分代碼。除此之外, ROOTBANK一般還用來存放下列代碼:C51的庫函數(shù)、所有的變量初始化數(shù)據(jù)、中斷服務程序代碼、CSTARTUP代碼。編譯器總是以 NONBANK方式對這一類代碼進行操作。

          3使用C51BANK模式的步驟

          假設(shè)軟件已經(jīng)按C51的大模式進行了設(shè)計,那么為了使用C51的BANK模式,要進行以下3個步驟的工作。

          3.1設(shè)計硬件

          C51的BANK模式需要硬件來支持。硬件必須設(shè)計適當?shù)淖g碼電路來支持存儲器的頁面結(jié)構(gòu)。盡管C51編譯系統(tǒng)可支持256個存儲器BANK頁面,但一般的應用系統(tǒng)4個~8個存儲器頁面即可滿足設(shè)計要求。在確定了所需存儲器頁面的個數(shù)后,BANK頁面的譯碼地址位也就確定了。假設(shè)譯碼的地址為n位,那么n與BANK頁面數(shù)的關(guān)系滿足式(1)。

          2n≥最大所需的BANK頁面數(shù)n取最小值(1)

          支持頁面結(jié)構(gòu)存儲器的譯碼電路,因使用存儲器芯片的空間大小和片數(shù)多少的不同而不同。對于n位譯碼地址的鎖存,則有兩種方法,最為簡單的方法是直接使用CPU多余的口線,若沒有多余的口線可用,則需要使用第二種方法,即擴展鎖存器對BANK譯碼地址進行鎖存,這時鎖存器的鎖存地址既可以使用外部RAM空間譯碼產(chǎn)生,也可以用外部ROM空間譯碼產(chǎn)生,如使用 ROM空間譯碼產(chǎn)生,要注意地址不能與代碼可能占用的地址空間沖突。

          3.2寫B(tài)ANK模式的源程序

          C51BANK模式下的源程序與大模式下的源程序沒有太大區(qū)別,只是在BANK模式下要注意以下幾點:

          (1)合理規(guī)劃代碼空間

          規(guī)劃代碼空間就是決定哪一部分代碼放在ROOTBANK 中,哪一部分代碼放在BANK中。前面已經(jīng)提到,有幾種類型代碼是必須放在ROOTBANK中的,而對于其它代碼來說,既可以放在BANK中,也可以放在 ROOTBANK,但為了提高系統(tǒng)的運行效率,對經(jīng)常被調(diào)用的公共程序模塊,應盡可能放在ROOTBANK中,以減少BANK的切換。而對于用匯編語言編寫的程序模塊,如果將其放在BANK中,則需要人工在匯編程序中添加對BANK切換的操作,這項工作非常繁瑣,因此用匯編語言編寫的程序模塊,一般也放在 ROOTBANK中。

          (2)檢查源程序模塊大小

          任一個C程序模塊,在編譯時都要生成一個CODE段,而 linker不可能把一個模塊的CODE分配到多個BANK中,因此每個程序模塊的大小都必須小于或等于一個BANK空間,否則就要把一個程序模塊分為兩個或多個模塊。只要不超出BANK的空間,linker可以把多個程序模塊的代碼放入一個BANK中,由此看出將每個程序模塊最小化,便可以充分利用 BANK的空間資源。


          上一頁 1 2 下一頁

          關(guān)鍵詞: 51 BANK 編譯模式

          評論


          相關(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); })();