8051 keil 如何支持code size大于64KB的项目

随着项目中的功能不断增加,程序代码size也在不断往上涨,当超过64KB时,就要考虑引入bank进制。

在讲如何在现有项目中添加bank功能前,还是先讲讲其存在的背景吧。

8051是基于哈佛的体系架构。 code memory是16位寻址,data memory是8位寻址。 这样分开寻址的特点适合比较的固定,且比较小的固化程序,而且稳定性相对较强,比如data access不会误指到code指令。 当然这种体系架构的缺点也是显然的,即灵活性不够,比如不能有效的利用memory资源。 

既然是16位寻址,那就意味着只能支持64KB的程序代码。 如果项目代码超过64KB,那就要引入多个banks来支持。 一个bank最大能支持32KB, 那4个bank能支持128KB, 8个bank支持256KB, 以此类推。。。 一般地,一个MCU能支持2MB以上的code size。

接下来就讲如何在现有项目中引入bank

1) 在keil IDE 左边lane中右击项目名称,然后click "Add Group..."来添加sub group,以四个banks为例,要保证该项目名称下有4个sub groups。当然,如果已经存在groups,就不用再添加了。一般地,我们bank0又叫common,它的取址范围为0x0000~0x7FFF,其它bank#n的范围设为0x8000~0xFFFF。如下图所示。

2)接下来就是重点了, 因为keil是不会根据这些groups名字来指定它们为bank0还是bank1,2,3... 再说,开发者也可以在IDE中把bank名字改成别名,如application等。所以需要分别右击这些groups来点击opitons->properties->指定bank number号.

3)右击项目名称,然后options-> check "code banking"->select "4", 然后bank area 设为 start:0x8000, end:0xFFFF

4)最后为了通过编译,需要把L51_bank.a51文件添加进项目

5)一些需要注意的细节是, 如果勾选extended LX51 Linker instead of BL51, 为了通过编译链接,那么就需要在options->output将HEX-80改成HEX-386,并勾选merge 32K Hexfile。 此外,为了提高程序执行效率,避免不必要的bank切换,尽量把频繁被调用的code放到common bank中。

6)补充一点,照目前理解,extended LX51 for bank only exist in a few developing kits. 所以为了兼容性考虑,for bank一般选择BL51。keil编译出debug.H01, debug.H02 and debug.H03. 为了生成一个最终合成版的bin文件,需要用脚本先将各个bank文件合成一个hex,然后用hextobin来生成bin。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ltshan139

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值