码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-03-06 15:58:31      阅读:356      评论:0      收藏:0      [点我收藏+]

标签:keil   bank   

随着项目中的功能不断增加,程序代码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中。

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

标签:keil   bank   

原文地址:http://blog.csdn.net/avideointerfaces/article/details/44097367

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!