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代码的限制.