巧用C-51的BANK编译模式.doc

巧用C-51的BANK编译模式.doc

ID:57651691

大小:112.50 KB

页数:10页

时间:2020-08-30

巧用C-51的BANK编译模式.doc_第1页
巧用C-51的BANK编译模式.doc_第2页
巧用C-51的BANK编译模式.doc_第3页
巧用C-51的BANK编译模式.doc_第4页
巧用C-51的BANK编译模式.doc_第5页
资源描述:

《巧用C-51的BANK编译模式.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、巧用C-51的BANK编译模式朱咏梅(上海电子信息职业技术学院,上海200000)1引言随着C-51编译器被广泛地应用于51系列单片机软件的开发,大批的开发人员从繁琐的汇编语言编程中解放出来.C-51不仅缩短了软件的开发周期,而且使应用软件具有较好的结构性和可维护性.在使用C-51编译器的应用设计中,大多数程序代码都不超过51系列单片机的最大寻址空间64K,但在实际应用中也有程序代码超出64K的情况.这种情况虽然可以通过更换高档CPU来解决,但在产品批量较大且对CPU性能要求并不高时,不希望使用高档CPU,因为这样会增加产品的成本.那么能否在廉价的51系列单片机中突破代

2、码64K空间的限制而进行产品的开发呢C-51编译器的BANK模式正是为了解决此问题.作者通过对C-51编译器BANK模式的使用,总结出一套该模式的使用方法.本文对这一使用方法进行说明,并对代码和数据混合使用BANK的特殊用法作了介绍.2BANK的工作方式C-51的BANK模式对应用系统的代码存储器结构有特殊要求.图1为C-51BANK模式下代码存储器的物理结构.代码地址空间的上半部,以重叠BANK0的物理地址空间,硬件设计了n个存储器页面来存储程序代码.在任一时刻BANK0~n中,只能有一个BANK处于激活状态.当BANKi处于激活状态时,其物理地址空间为BankBas

3、eAddr~0xFFFF.只有当BANK处于激活状态时,BANK中的程序代码才可以运行.为了寻址任意BANK中的过程代码,C-51编译器为过程调用生成了如下的BANK地址:Base地址是可变的,但为译码方便,一般选为8000H.当某过程调用任一不在同一BANK中的其它过程时,BANK地址中的BANKNUMBER被送到切换BANK的译码电路,而16位的偏移地址被送往地址总线,从而实现不同BANK中的过程调用.下半部分的代码空间没有作BANK处理,它被称为ROOTBANK.这是因为C-51编译器仅对过程调用产生BANK地址,而对于过程调用之外的所有其它部分如CONST等不

4、产生BANK地址,ROOTBANK即用来存放这部分代码.除此之外,ROOTBANK一般还用来存放下列代码:C-51的库函数,所有的变量初始化数据,中断服务程序代码,CSTARTUP代码.编译器总是以NONBANK方式对这一类代码进行操作.3使用C-51BANK模式的步骤假设软件已经按C-51的大模式进行了设计,那么为了使用C-51的BANK模式,要进行以下3个步骤的工作.3.1设计硬件C-51的BANK模式需要硬件来支持.硬件必须设计适当的译码电路来支持存储器的页面结构.尽管C-51编译系统可支持256个存储器BANK页面,但一般的应用系统4个~8个存储器页面即可满足

5、设计要求.在确定了所需存储器页面的个数后,BANK页面的译码地址位也就确定了.假设译码的地址为n位,那么n与BANK页面数的关系满足式(1).2n≥最大所需的BANK页面数n取最小值(1)支持页面结构存储器的译码电路,因使用存储器芯片的空间大小和片数多少的不同而不同.对于n位译码地址的锁存,则有两种方法,最为简单的方法是直接使用CPU多余的口线,若没有多余的口线可用,则需要使用第二种方法,即扩展锁存器对BANK译码地址进行锁存,这时锁存器的锁存地址既可以使用外部RAM空间译码产生,也可以用外部ROM空间译码产生,如使用ROM空间译码产生,要注意地址不能与代码可能占用的地

6、址空间冲突.3.2写BANK模式的源程序C-51BANK模式下的源程序与大模式下的源程序没有太大区别,只是在BANK模式下要注意以下几点:(1)合理规划代码空间规划代码空间就是决定哪一部分代码放在ROOTBANK中,哪一部分代码放在BANK中.前面已经提到,有几种类型代码是必须放在ROOTBANK中的,而对于其它代码来说,既可以放在BANK中,也可以放在ROOTBANK,但为了提高系统的运行效率,对经常被调用的公共程序模块,应尽可能放在ROOTBANK中,以减少BANK的切换.而对于用汇编语言编写的程序模块,如果将其放在BANK中,则需要人工在汇编程序中添加对BANK切

7、换的操作,这项工作非常繁琐,因此用汇编语言编写的程序模块,一般也放在ROOTBANK中.(2)检查源程序模块大小任一个C程序模块,在编译时都要生成一个CODE段,而linker不可能把一个模块的CODE分配到多个BANK中,因此每个程序模块的大小都必须小于或等于一个BANK空间,否则就要把一个程序模块分为两个或多个模块.只要不超出BANK的空间,linker可以把多个程序模块的代码放入一个BANK中,由此看出将每个程序模块最小化,便可以充分利用BANK的空间资源.(3)充分利用非BANK的调用在BANK模式中,当编译器不知道调用与被调用是

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。