MCU寻址方式及Bank概念学习Word下载.docx
- 文档编号:21808005
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:12
- 大小:430.76KB
MCU寻址方式及Bank概念学习Word下载.docx
《MCU寻址方式及Bank概念学习Word下载.docx》由会员分享,可在线阅读,更多相关《MCU寻址方式及Bank概念学习Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
4:
Flash存放DATA的方式
20111008
一:
Xdata/MCU寻址范围
在KeilC软体中,点Help->
UVisionHelp,
搜索Xdata,可得到以下内容:
Xdata表示的是外部数据(MCU外部),它可以寻址的空间最大为64Kbyte.
我们的MCU为51内核的8bit的MCU,地址总线一般为8bit,最大可寻址的空间为256bytes,很小,可是,51的MCU,有两路地址总线是可以搭配来当作16bit的地址总线来使用,它可以寻址的空间大小为64Kbyte。
我们用到的xdata即是用的16bit的地址总线来寻址的。
在大学里学的89S51是P0.0~P0.7与P2.0~P2.7地址总线共用,如下所示:
二:
MCU支持的最大寻址空间为64Kbyte,如果CODE过大,超过64Kbyte,MCU怎么寻址呢?
标准的8051内核的MCU,支持Bank功能,最大支持32个Bank,最大2Mbytes的寻址空间。
注意:
我们常用的2MFlash,的单位是bit。
64Kbytes的单位是byte。
即:
2MBit=4x64Kbytes,所以,2M的FLSAH,只需要用4个BANK就OK。
搜索Bank,找到左侧中的codebanking可得到以下内容:
放大右侧的BANK描述图:
由上图可得:
一个Bank又被拆分为CommonBank和BankX两个部份。
其中,每个Bank都会有CommonBank,并且,每个Bank中的CommonBank的Data都是一模一样的。
由上图可知,一个Bank的存储范围为0x0000~0xFFFF,为64KByte
其中,0x0000~0x7FFF为CommonBank的范围,0x8000~0xFFFF为各个BankX的数据存储范围。
在CODE调用时,Common区的Data与BankX区中的Data可以任意调用,可是,各个BankX区的Data之间的多次调用,经常会有很奇怪的现象出现,比如OSD乱码,画异等等。
所以,不建议各个BankX之间进行数据的直接多次调用。
怎样看软体中设定的CommonBank的大小及文件是属于哪个Bank?
1:
查看CommonBank的大小
以Lenovo_Li2361D的机种CODE为例,在keilC中,点击OptionsforTarget选项,在出现的对话框中,打开target选项,可以看到,BankXArea是从0x3000~0xFFFF,可知,CommonBank是从0x0000~0x2FFF(注意,CommonBank的大小在改动时,需要考虑到后面的BankX的数据长度,在64Kbyte空间固定的前提下,增大了CommonBank的长度,等于间接减少了BankX的长度)。
查看文件是属于哪个Bank
软体中的每一个.C/.H文件都会定义好它是属于哪个Bank,以此来规划各个文件之前的参数及函数的调用。
以Lenovo_Li2361D的机种CODE为例,在keilC中,点击Project文件夹,右键OptionsforGroup‘Project’:
,在出现的对话框中,我们可以看到:
表示Project这个文件夹中的文件在默认下,都是存放在Bank中的CommonBank区。
当我们展开Project这个文件夹,右键到
RTD2743PD_TPV_LENOVO_LI2361D_LG_LM230WF8.h文件,打开对话框。
可以看到,RTD2743PD_TPV_LENOVO_LI2361D_LG_LM230WF8.h这个文件的CodeBank=<
default>
,表示它的存放位置是与它的上一层文件夹的存放位置相同,即,也存放在CommonBank.
也会有另外一种情况:
子文件与上层文件夹的数据存放位置不相同,如下所示:
右键Scaler,属性,可以知道,Scaler文件夹中的文件存放位置为Bank0,表示在默认情况下,子文件夹中的文件存放位置也是在Bank0。
可是,我们在图的左侧可以看到,Scaler文件夹下,有些文件名前面会有三个竖排的红点,有些文件名前面没有三个竖排的红点。
当我们右键任意一个带竖排红点的文件,属性时,可以发现,它的存放位置,与上层文件夹是不同Bank的。
右键Scaler文件夹下的Adjust.c文件,属性,可以看到,它的存放位置为Bank3,与Scaler文件的Bank0并不相同。
当我们右键任意一个不带竖排红点的文件,属性时,可以发现,它的存放位置为<
,表示它的存放位置与Scaler文件夹相同,也为Bank0
Realtek的KeilC的各个文件及文件夹的Bank属性规划,是按功能相近原则来存放,与Mstar的Bank相同的存放原则不同。
BankXDataOverFlow/移Bank
在KeilC中,点击OptionsforTarget‘LENOVO_LI2361D_LG_LM230WF8’,打开对话框,在Bl51Locate中,可以看到,在编译完成后,会outputLENOVO_LI2361D_RTD2743PD_LG_LM230WF8.m51这个文件,使用它可以查看我们Common的大小使用了多少,及各个BankX使用的情况
生成的文件如右所示:
打开后,可以看到,CODEMEMORY的最大范围为0x2BC4+8=0x2BCC,在前面的查看CommonBank的大小,我们可以知道,设定的Commonbank的大小为0x0000~0x2FFF,所以,CommonBank未溢出。
Bank0的最大范围为0xE0ED+1=0xE0EE。
Bank1的最大范围为0xBBF5+0x0133=0xBD28。
Bank2的最大范围为0xF946+1=0xF947。
Bank3的最大范围为0xAEDE+1=0xAEDF。
Bank0~Bank3的最大范围,都未超过0xFFFF,均未溢出,并且Bank2的Data值最多;
Bank3的Data值最少。
当改CODE的时候,有可能未考虑到BankX区间,造成数据超过了0xFFFF,就产生了溢出,此时,需要查看XXXX.m51文件,看是哪个BankX溢出了,溢出了多少个BYTE,并且看哪个BankX还有足够空间存放这些溢出的BYTE。
从上面的.m51文件,我们可知,此时的Bank2的范围已经是0xF947,离0xFFFF,只有0x6B8个BYTE,我们手动把adjust.c从Bank3设定到Bank2,造成Bank2的Data溢出。
编译后,可以看到Bank2溢出了0x67个BYTE,此时就出现了需要移BANK的情况。
4:
Flash存放DATA的方式
此机种使用的是一颗2Mbit的FLASH,可以分为4个64Kbyte的Bank。
回顾前面看到个CommonBank及Bank0~Bank3各个范围如下:
CommonBank最大范围为0x2BC4+8=0x2BCC,
经过KeilC的编译后,生成的二进制的Bin文件,是我们要烧录到2MFlash的资料。
以下为生成的bin文件
打开此文件,我们可以看到:
=====================================================================
Bank0中:
CommonBank的data如下,长度0x2BCC
……………………………………
Bank0的data如下,长度为0xE0EE
Bank1中:
Bank1的data如下,长度为0xBD28
Bank2中:
Bank2的data如下,长度为0xF947
Bank3中:
Bank3的data如下,长度为0xAEDF
由上可得,Bank0~Bank3中的CommonBank的内容都是一模一样的,且各个Bank的数据长度与.m51中秀出来的长度也一样。
烧录到2M的flash的内容为KeilC转换成的二进制代码。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCU 寻址 方式 Bank 概念 学习