新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 巧用C51的BANK编译模式

巧用C51的BANK编译模式

作者:时间:2012-02-15来源:网络收藏
1引言

随着C编译器被广泛地应用于系列单片机软件的开发,大批的开发人员从繁琐的汇编语言编程中解放出来。 C不仅缩短了软件的开发周期,而且使应用软件具有较好的结构性和可维护性。在使用C51编译器的应用设计中,大多数程序代码都不超过51系列单片机的最大寻址空间64K,但在实际应用中也有程序代码超出64K的情况。这种情况虽然可以通过更换高档CPU来解决,但在产品批量较大且对CPU性能要求并不高时,不希望使用高档CPU,因为这样会增加产品的成本。那么能否在廉价的51系列单片机中突破代码64K空间的限制而进行产品的开发呢?C51编译器的模式正是为了解决此问题。作者通过对C51编译器模式的使用,总结出一套该模式的使用方法。本文对这一使用方法进行说明,并对代码和数据混合使用的特殊用法作了介绍。

2BANK的工作方式

C51的BANK模式对应用系统的代码存储器结构有特殊要求。图1为C51BANK模式下代码存储器的物理结构。

代码地址空间的上半部,以重叠BANK0的物理地址空间,硬件设计了n个存储器页面来存储程序代码。在任一时刻 BANK0~n中,只能有一个BANK处于激活状态。当BANKi处于激活状态时,其物理地址空间为BankBaseAddr~0xFFFF。只有当 BANK处于激活状态时,BANK中的程序代码才可以运行。为了寻址任意BANK中的过程代码, C51编译器为过程调用生成了如下的BANK地址:

Base地址是可变的,但为译码方便,一般选为 8000H。当某过程调用任一不在同一BANK中的其它过程时,BANK地址中的BANKNUMBER被送到切换BANK的译码电路,而16位的偏移地址被送往地址总线,从而实现不同BANK中的过程调用。下半部分的代码空间没有作BANK处理,它被称为ROOTBANK。这是因为C51编译器仅对过程调用产生BANK地址,而对于过程调用之外的所有其它部分如CONST等不产生BANK地址,ROOTBANK即用来存放这部分代码。除此之外, ROOTBANK一般还用来存放下列代码:C51的库函数、所有的变量初始化数据、中断服务程序代码、CSTARTUP代码。编译器总是以 NONBANK方式对这一类代码进行操作。

3使用C51BANK模式的步骤

假设软件已经按C51的大模式进行了设计,那么为了使用C51的BANK模式,要进行以下3个步骤的工作。

3.1设计硬件

C51的BANK模式需要硬件来支持。硬件必须设计适当的译码电路来支持存储器的页面结构。尽管C51编译系统可支持256个存储器BANK页面,但一般的应用系统4个~8个存储器页面即可满足设计要求。在确定了所需存储器页面的个数后,BANK页面的译码地址位也就确定了。假设译码的地址为n位,那么n与BANK页面数的关系满足式(1)。

2n≥最大所需的BANK页面数n取最小值(1)

支持页面结构存储器的译码电路,因使用存储器芯片的空间大小和片数多少的不同而不同。对于n位译码地址的锁存,则有两种方法,最为简单的方法是直接使用CPU多余的口线,若没有多余的口线可用,则需要使用第二种方法,即扩展锁存器对BANK译码地址进行锁存,这时锁存器的锁存地址既可以使用外部RAM空间译码产生,也可以用外部ROM空间译码产生,如使用 ROM空间译码产生,要注意地址不能与代码可能占用的地址空间冲突。

3.2写BANK模式的源程序

C51BANK模式下的源程序与大模式下的源程序没有太大区别,只是在BANK模式下要注意以下几点:

(1)合理规划代码空间

规划代码空间就是决定哪一部分代码放在ROOTBANK 中,哪一部分代码放在BANK中。前面已经提到,有几种类型代码是必须放在ROOTBANK中的,而对于其它代码来说,既可以放在BANK中,也可以放在 ROOTBANK,但为了提高系统的运行效率,对经常被调用的公共程序模块,应尽可能放在ROOTBANK中,以减少BANK的切换。而对于用汇编语言编写的程序模块,如果将其放在BANK中,则需要人工在汇编程序中添加对BANK切换的操作,这项工作非常繁琐,因此用汇编语言编写的程序模块,一般也放在 ROOTBANK中。

(2)检查源程序模块大小

任一个C程序模块,在编译时都要生成一个CODE段,而 linker不可能把一个模块的CODE分配到多个BANK中,因此每个程序模块的大小都必须小于或等于一个BANK空间,否则就要把一个程序模块分为两个或多个模块。只要不超出BANK的空间,linker可以把多个程序模块的代码放入一个BANK中,由此看出将每个程序模块最小化,便可以充分利用 BANK的空间资源。


上一页 1 2 下一页

关键词: 51 BANK 编译模式

评论


相关推荐

技术专区

关闭