MCU寻址方式及Bank概念学习.docx

上传人:b****6 文档编号:8671805 上传时间:2023-02-01 格式:DOCX 页数:12 大小:430.76KB
下载 相关 举报
MCU寻址方式及Bank概念学习.docx_第1页
第1页 / 共12页
MCU寻址方式及Bank概念学习.docx_第2页
第2页 / 共12页
MCU寻址方式及Bank概念学习.docx_第3页
第3页 / 共12页
MCU寻址方式及Bank概念学习.docx_第4页
第4页 / 共12页
MCU寻址方式及Bank概念学习.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

MCU寻址方式及Bank概念学习.docx

《MCU寻址方式及Bank概念学习.docx》由会员分享,可在线阅读,更多相关《MCU寻址方式及Bank概念学习.docx(12页珍藏版)》请在冰豆网上搜索。

MCU寻址方式及Bank概念学习.docx

MCU寻址方式及Bank概念学习

*******************************************************************************

学习内容:

1:

Xdata/MCU寻址范围

2:

Bank的概念,CommonBank/Bank0/Bank1/Bank2/Bank3

3:

BankXDataOverFlow/移Bank

4:

Flash存放DATA的方式

20111008

*******************************************************************************

一:

Xdata/MCU寻址范围

1:

在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地址总线共用,如下所示:

二:

Bank的概念,CommonBank/Bank0/Bank1/Bank2/Bank3

MCU支持的最大寻址空间为64Kbyte,如果CODE过大,超过64Kbyte,MCU怎么寻址呢?

标准的8051内核的MCU,支持Bank功能,最大支持32个Bank,最大2Mbytes的寻址空间。

注意:

我们常用的2MFlash,的单位是bit。

64Kbytes的单位是byte。

即:

2MBit=4x64Kbytes,所以,2M的FLSAH,只需要用4个BANK就OK。

在KeilC软体中,点Help->UVisionHelp,

搜索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=,表示它的存放位置是与它的上一层文件夹的存放位置相同,即,也存放在CommonBank.

也会有另外一种情况:

子文件与上层文件夹的数据存放位置不相同,如下所示:

右键Scaler,属性,可以知道,Scaler文件夹中的文件存放位置为Bank0,表示在默认情况下,子文件夹中的文件存放位置也是在Bank0。

可是,我们在图的左侧可以看到,Scaler文件夹下,有些文件名前面会有三个竖排的红点,有些文件名前面没有三个竖排的红点。

当我们右键任意一个带竖排红点的文件,属性时,可以发现,它的存放位置,与上层文件夹是不同Bank的。

右键Scaler文件夹下的Adjust.c文件,属性,可以看到,它的存放位置为Bank3,与Scaler文件的Bank0并不相同。

当我们右键任意一个不带竖排红点的文件,属性时,可以发现,它的存放位置为,表示它的存放位置与Scaler文件夹相同,也为Bank0

Realtek的KeilC的各个文件及文件夹的Bank属性规划,是按功能相近原则来存放,与Mstar的Bank相同的存放原则不同。

3:

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,

Bank0的最大范围为0xE0ED+1=0xE0EE。

Bank1的最大范围为0xBBF5+0x0133=0xBD28。

Bank2的最大范围为0xF946+1=0xF947。

Bank3的最大范围为0xAEDE+1=0xAEDF。

经过KeilC的编译后,生成的二进制的Bin文件,是我们要烧录到2MFlash的资料。

以下为生成的bin文件

打开此文件,我们可以看到:

=====================================================================

Bank0中:

CommonBank的data如下,长度0x2BCC

……………………………………

Bank0的data如下,长度为0xE0EE

……………………………………

=====================================================================

Bank1中:

CommonBank的data如下,长度0x2BCC

……………………………………

Bank1的data如下,长度为0xBD28

……………………………………

=====================================================================

Bank2中:

CommonBank的data如下,长度0x2BCC

……………………………………

Bank2的data如下,长度为0xF947

……………………………………

=====================================================================

Bank3中:

CommonBank的data如下,长度0x2BCC

……………………………………

Bank3的data如下,长度为0xAEDF

……………………………………

=====================================================================

由上可得,Bank0~Bank3中的CommonBank的内容都是一模一样的,且各个Bank的数据长度与.m51中秀出来的长度也一样。

烧录到2M的flash的内容为KeilC转换成的二进制代码。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1