关键词:51单片机,Keil, C语言编程,xdata, 片外数据存储器, XRAM存放结构体的问题。
是这样的,本人以前一直做硬件设计,最近一年才接触单片机的硬件和编程设计,昨天在程序设计中,发现一个怪现象,就是,我程序里定义了一个结构体数据类型,如下定义:typedef...
是这样的,本人以前一直做硬件设计,最近一年才接触单片机的硬件和编程设计,昨天在程序设计中,发现一个怪现象,就是,我程序里定义了一个结构体数据类型,如下定义:
typedef struct Calender
{
unsigned char Minute;
unsigned char Hour;
unsigned char Date;
unsigned char Month;
unsigned short Year;
}CALENDER;
CALENDER Calndr1;
CALENDER Calndr_Temp;
并且声明了两个个变量,Calndr1 和 Calndr_Temp,后来,因为程序不够,我把内存模式修改成Large模式,结果,程序就完全出错了,再后来,我找个高手问了一下,他说,51单片机的结构体数据类型所定义的变量和数组变量,是不可以放在外部RAM里的,至于详细的原因,他说他也不清楚,是经验所得的。
他后来只把变量的定义修改如下:
data CALENDER Calndr1;
data CALENDER Calndr_Temp;
程序在Large模式下就可以运行了,我想问问其他前辈,为什么自定义的结构体类型的数据不可以存放在外部存储器XRAM里呢?
另外补充的说一下,我用的是STC90C516AD,有4K的外部RAM,是可以用的。
百度没分了,能给出详细且正确的解释的,我愿意充十块话费,谢谢! 展开
typedef struct Calender
{
unsigned char Minute;
unsigned char Hour;
unsigned char Date;
unsigned char Month;
unsigned short Year;
}CALENDER;
CALENDER Calndr1;
CALENDER Calndr_Temp;
并且声明了两个个变量,Calndr1 和 Calndr_Temp,后来,因为程序不够,我把内存模式修改成Large模式,结果,程序就完全出错了,再后来,我找个高手问了一下,他说,51单片机的结构体数据类型所定义的变量和数组变量,是不可以放在外部RAM里的,至于详细的原因,他说他也不清楚,是经验所得的。
他后来只把变量的定义修改如下:
data CALENDER Calndr1;
data CALENDER Calndr_Temp;
程序在Large模式下就可以运行了,我想问问其他前辈,为什么自定义的结构体类型的数据不可以存放在外部存储器XRAM里呢?
另外补充的说一下,我用的是STC90C516AD,有4K的外部RAM,是可以用的。
百度没分了,能给出详细且正确的解释的,我愿意充十块话费,谢谢! 展开
展开全部
追问
是这样的,我在使用Large的时候,没有指定Start 和Size,就是没有按照你图中的设置,但存储普通的变量没有问题,只要是存储结构体就不行,为什么?
追答
没指定的话那就相当于开放式了,谁也不知道KEIL是怎么安排的了。只有当你给出了约束条件,你的程序才是可预期的
结构为什么会失效我不能随便下结论,不过我建议你使用small模式。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询