新闻中心

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 下一页

关键词:51BANK编译模式

评论


相关推荐

技术专区

关闭