尝试练习了几个题目,其中有一个是将一个数组内的的正负数以及0的个数统计写入固定地址
#include
#include
data unsigned int y1 _at_ 0x60;
#define y3 DBYTE [0x30]
#define y4 DBYTE [0x31]
#define y5 DBYTE [0x32]
void main()
{
unsigned int i,a1,b;
char j=0;
char c;
int data x=0,y=0,z=0;
unsigned int *y2=0x50;
int a[]={-50,-36,0,1,-128,0,127,89,-89,40}; //正负数数量
int data tab[]={-50,-36,0,1,-128,99,127,89,-89,40}; //对应的从小到大的十六进制为
char edg[]={34,56,89,123,90,23,12,22,77,10}; //求和
for(i=0;i<10;i++)
{
if(a[i]>0)
y3 = y3+1;
if(a[i]<0)
y4 = y4+1;
if(a[i]==0)
y5 = y5+1;
}
在一开始定义0x30地址的时候,有尝试过
data unsigned int y[3] _at_ 0x30;
但是会报错
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: DATA_GROUP
LENGTH: 003DH
直接用宏定义的话,到后面在第一个for循环开始之前,0x30地址位就会莫名其妙多出来数据
想问一下是什么问题
是用这种方法吗,一般都是用 attribute 的,我使用好像没出现过你说的情况。是不是哪个地方对这个地址有操作了?
ADDRESS SPACE OVERFLOW
这个错误不是你代码里有错误,是指资源不够了,要用到的data已经超过你单片的ram了
非增强51机就128字节ram你这超了
直接用宏定义的话,到后面在第一个for循环开始之前,0x30地址位就会莫名其妙多出来数据
这是因为你没初始化,开始时这几个地址你没清零