我的硬件上有1块片外RAM,大小为128K(超过64K范围了),硬件设计上每32K分一页,这样分成了4页了,地址用扩展的8255的IO来选取,
在Keil的option-target里有off-chip Xdata Memory的设置,要怎么用呢? 只能设置成32K吧,如果是这样,那就是要手动来分配内存了?? 我是想定义一个比如说是100K大小的数组,kkk[100*1024] 不使用banking方法,肯定是编译不过的,
现在查了一些资料,可以用xbanking.a51来解决,用far来定义,使得整个RAM区就像一个整体,使用上可以透明的访问,
做了如下设置, 在device标签页选用LX51和AX51作为链接器,在target页选用far memory支持及中断保存地址,在lx51 locate标签页的user classes填入: XDATA(X:0x0000-X:0x7FFF),HDATA(X:0x010000-X:0x027FFF) 加入xbanking.a51 编译工程,可以通过; 其中定义了如下空间: uchar far kkk[90*1024]; uchar xdata xxx[30000];
编译通过后,进入仿真时,查看变量xxx被分配在0x0000的起始位置了,kkk被分配到了0x10000的起始位置了,这都是符合设置的; 写了个赋值及加减运算, 发现xxx可以在变量区看到变化,且正确的; 而kkk在变量区则无法看到变化,????
现有一事不明,我要如何修改xbanking.a51呢?kkk如何才能显示出来呢?
|