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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
巧用C-51的BANK编译模式.

巧用C-51的BANK编译模式 朱咏梅 (上海电子信息职业技术学院,上海200000) 1引言 随着C-51编译器被广泛地应用于51系列单片机软件的开发,大批的开发人员从繁琐的汇编语言编程中解放出来.C-51不仅缩短了软件的开发周期,而且使应用软件具有较好的结构性和可维护性.在使用C-51编译器的应用设计中,大多数程序代码都不超过51系列单片机的最大寻址空间64K,但在实际应用中也有程序代码超出64K的情况.这种情况虽然可以通过更换高档CPU来解决,但在产品批量较大且对CPU性能要求并不高时,不希望使用高档CPU,因为这样会增加产品的成本.那么能否在廉价的51系列单片机中突破代码64K空间的限制而进行产品的开发呢 C-51编译器的BANK模式正是为了解决此问题.作者通过对C-51编译器BANK模式的使用,总结出一套该模式的使用方法.本文对这一使用方法进行说明,并对代码和数据混合使用BANK的特殊用法作了介绍. 2BANK的工作方式 C-51的BANK模式对应用系统的代码存储器结构有特殊要求.图1为C-51BANK模式下代码存储器的物理结构. 代码地址空间的上半部,以重叠BANK0的物理地址空间,硬件设计了n个存储器页面来存储程序代码.在任一时刻BANK0~n中,只能有一个BANK处于激活状态.当BANKi处于激活状态时,其物理地址空间为BankBaseAddr~0xFFFF.只有当BANK处于激活状态时,BANK中的程序代码才可以运行.为了寻址任意BANK中的过程代码,C-51编译器为过程调用生成了如下的BANK地址: Base地址是可变的,但为译码方便,一般选为8000H.当某过程调用任一不在同一BANK中的其它过程时,BANK地址中的BANKNUMBER被送到切换BANK的译码电路,而16位的偏移地址被送往地址总线,从而实现不同BANK中的过程调用.下半部分的代码空间没有作BANK处理,它被称为ROOTBANK.这是因为C-51编译器仅对过程调用产生BANK地址,而对于过程调用之外的所有其它部分如CONST等不产生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个存储器页面即可满足设计要求.在确定了所需存储器页面的个数后,BANK页面的译码地址位也就确定了.假设译码的地址为n位,那么n与BANK页面数的关系满足式(1). 2n≥最大所需的BANK页面数n取最小值(1) 支持页面结构存储器的译码电路,因使用存储器芯片的空间大小和片数多少的不同而不同.对于n位译码地址的锁存,则有两种方法,最为简单的方法是直接使用CPU多余的口线,若没有多余的口线可用,则需要使用第二种方法,即扩展锁存器对BANK译码地址进行锁存,这时锁存器的锁存地址既可以使用外部RAM空间译码产生,也可以用外部ROM空间译码产生,如使用ROM空间译码产生,要注意地址不能与代码可能占用的地址空间冲突. 3.2写BANK模式的源程序 C-51BANK模式下的源程序与大模式下的源程序没有太大区别,只是在BANK模式下要注意以下几点: (1)合理规划代码空间 规划代码空间就是决定哪一部分代码放在ROOTBANK中,哪一部分代码放在BANK中.前面已经提到,有几种类型代码是必须放在ROOTBANK中的,而对于其它代码来说,既可以放在BANK中,也可以放在ROOTBANK,但为了提高系统的运行效率,对经常被调用的公共程序模块,应尽可能放在ROOTBANK中,以减少BANK的切换.而对于用汇编语言编写的程序模块,如果将其放在BANK中,则需要人工在汇编程序中添加对BANK切换的操作,这项工作非常繁琐,因此用汇编语言编写的程序模块,一般也放在ROOTBANK中. (2)检查源程序模块大小 任一个C程序模块,在编译时都要生成一个CODE段,而linker不可能把一个模块的CODE分配到多个BANK中,因此每个程序模块的大小都必须小于或等于一个BANK空间,否则就要把一个程序模块分为两个或多个模块.只要不超出BANK的空间,linker可以把多个程序模块的代码放入一个BANK中,由此看出将每个程序模块最小化,便可以充分利用BANK的空间资源. (3)充分利用非BANK的调用

您可能关注的文档

文档评论(0)

sdgr + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档