51代码超出64k后Bank处理

1. 目前,只有Keil能完全解决这个问题

2. 将代码分成多少个Bank,跟硬件有关,手册上会有相关说明只能分成几块

3. 分成了n个Bank那么就要建立n-1个Bank+1个Common文件夹

4. 右键设置好 文件夹属于Common或Bank #n

5. 为了编译通过 把target options中的device页中选上"Use LX51 ...",然后在LX51 Misc页中的Misc Control中填入"REMOVEUNUSED",确认后重新编译即可自动去掉未调用的函数。

6.  一个bank最大能支持32KB, 那4个bank能支持128KB, 8个bank支持256KB, 以此类推。。。 一般地,一个MCU能支持2MB以上的code size

7. 051是基于哈佛的体系架构。 code memory是16位寻址,data memory是8位寻址。 这样分开寻址的特点适合比较的固定,且比较小的固化程序,而且稳定性相对较强,比如data access不会误指到code指令。

 反思:  任何一款芯片里面的存储器间接或直接影响到你编写的代码存放的位置

 

C8051F120 物理存储器划分:

0x0000   -      0x7FFF    块0 32k

0x8000   -      0xFFFF    块1 32k

0x10000  -     0x17FFF  块2 32k

0x18000  -     0x1FFFF  块3: (其中, 0x1FC00 - 0x1FFFF保留空间, 能用的只有0x18000 - 0x1FbFF  31k)

 四块加起来刚好 127k + 1k保留空间 正好 128k

程序和数据共用一块FLASH

而51内核,地址范围: 0x0000 - 0xFFFF
       其中, 0x0000 - 0x7FFF作为首选代码存储,
          0x8000 - 0xFFFF 或 0x10000 - 0x17FFF 或 0x18000 - 0x1FFFF 作为待选代码存储, 应该有个指针什么的,会指向所需要的区域
          最终达到了 突破51内核64k代码的限制.

 

转载于:https://www.cnblogs.com/embassy/p/6647104.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值