新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 巧用C51的BANK編譯模式

        巧用C51的BANK編譯模式

        作者: 時間:2012-02-15 來源:網絡 收藏

        (3)充分利用非的調用

        模式中,當編譯器不知道調用與被調用是否在同一個時,就會按照BANK調用方式產生程序代碼。但在下列4種情況中,編譯器能夠知道調用與被調用是否處在一個物理BANK中。這時編譯器將產生空間少、速度快的非BANK調用的程序代碼。

        第一種情況是,當調用與被調用過程在同一個源程序模塊時,編譯器可知道它們在同一個物理BANK中。這時編譯器使用非BANK方式產生函數調用代碼。

        第二種情況是,當過程被說明為static類型時,編譯器認定所有對static過程的調用均在本程序模塊中,編譯器產生非BANK的調用方式。

        第三種情況是,對于被說明為interrupt的中斷過程,編譯器總是產生非BANK的調用方式對其調用,因中斷過程總要放在ROOTBANK中。

        第四種情況是,根據BANK的分配情況,使用nonbanked編譯條件對源程序中的過程進行說明,人為地控制編譯器產生非BANK方式的調用。

        (4)檢查匯編語言程序模塊中是否有對BANK中過程的調用

        在由大模式程序向BANK模式轉換時,要檢查匯編語言程序中是否有對BANK中C過程的調用。如果匯編程序中有對C過程的調用,必須對調用進行改寫,即增加對BANK切換的操作。

        3.3改變編譯、鏈接開關和函數庫

        3.3.1改變編譯開關

        改變編譯開關就是要修改makefike文件中的編譯選項。這里要改變的就是將ml改為mb。對于放在ROOTBANK中的模塊,其編譯選項中還要增加一項RCODE。

        3.3.2改變鏈接開關

        改變鏈接開關要在.XCL文件中進行。首先在鏈接開關Z選項中增加RCODE,即:

        Z(CODE)INTVEC,RCODE,D_CDATA,I_CDATA,CONST=0

        該開關用于列出除CODE段之外的所有段的排放次序。

        除了進行上面的修改外,還要增加如下的鏈接選項:

        A表示bank_number的起始值是0

        B表示bank的16位偏移地址起始值為8000H

        C表示CODE段應放入2000H字節長度的BANK中

        D表示bank_number應按0001H的步長增加

        E表示bank的16位偏移地址按0000H步長增加,這意味著對任意bank,其16位偏移地址總為8000H

        3.3.3改變庫函數

        改變庫函數就是將大模式下鏈接所需的庫 CL80L.R03換成BANK模式的庫函數CL80B.R03。而最為重要的就是改寫CL80B.R03中的L18.S03匯編語言模塊。該程序模塊是BANK工作模式下實現BANK切換的核心。它完成將banknumber送到BANK切換的譯碼電路。這個模塊要根據具體的譯碼電路進行改寫。

        4代碼和數據的混合BANK技術

        有一些應用程序,不僅程序代碼超過64K,而且還有大量的常數數據,筆者在開發帶拼字檢查的電動打字機時就遇到了這種情況。該打字機為了對打出的單詞進行正確性檢查,必須附帶一個詞典。詞典必須占用ROM空間,所以也必須為詞典分配BANK頁面。然而,C51的 BANK中無法解決問題。為此采用代碼和數據混合的BANK技術。該技術的操作步驟如下:

        (1)不考慮數據BNAK的存在,僅對程序代碼進行BANK方式處理。但要注意,將對數據直接操作的過程模塊定位在ROOTBANK中,而對于間接操作數據的過程即可放在ROOTBANK中,也可放在BANK中。

        (2)查看鏈接后的MAP文件。檢查系統自動為代碼分配的BANK頁面占用情況,由此確定將數據定位在未被系統占用的BANK頁面中。

        (3)根據數據被定位的BANK頁面,改寫直接操作數據的過程。在此過程里程序可直接激活所需要的數據頁。

        (4)重新對程序進行編譯鏈接。

        5結束語

        C51的BANK模式由于突破了51系列單片機的64K程序空間的限制,因此具有較高的實用價值。采用這一技術,能夠在較低成本下開發本來要用高檔CPU才能完成的產品。由于大大降低了產品成本,必然能夠為產品帶來較高的經濟效益。因此該技術具有推廣應用價值。


        上一頁 1 2 下一頁

        關鍵詞: 51 BANK 編譯模式

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 镇宁| 固镇县| 东乡| 平远县| 晋江市| 延长县| 榆树市| 新乡县| 荥经县| 安岳县| 建水县| 海原县| 竹北市| 洛川县| 阆中市| 孟州市| 金湖县| 平安县| 英山县| 肇源县| 彰化市| 安多县| 长乐市| 镇宁| 佛冈县| 翼城县| 宝兴县| 石家庄市| 南丹县| 潜山县| 宁强县| 西乌珠穆沁旗| 昌平区| 舒城县| 湘潭县| 余庆县| 香格里拉县| 新平| 静海县| 香港| 大安市|