51单片机在Keil环境下,用C语言编程,关于片外存储区xdata中存放结构体类型的数据的问题,替朋友问的。

这个问题是替朋友问的,当然,我也不会,顺便请教,如果有回答的好的,我朋友可以充十块话费,先谢谢各位大神。是这样的,本人以前一直做硬件设计,最近一年才接触单片机的硬件和编程... 这个问题是替朋友问的,当然,我也不会,顺便请教,如果有回答的好的,我朋友可以充十块话费,先谢谢各位大神。

是这样的,本人以前一直做硬件设计,最近一年才接触单片机的硬件和编程设计,昨天在程序设计中,发现一个怪现象,就是,我程序里定义了一个结构体数据类型,如下定义:
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,是可以用的。
百度没分了,能给出详细且正确的解释的,我愿意充十块话费,谢谢!
展开
 我来答
晓非飝
推荐于2018-05-18 · 专注模数电单片机技术
晓非飝
采纳数:279 获赞数:1131

向TA提问 私信TA
展开全部
Keil本身对STC单片机缺乏支持,对外部xram没有数据库描述。在器件库中选个带xram的单片机就可以了,比如sst89x516rd.
更多追问追答
追问
那为什么对于普通数据类型的变量没有问题,而自定义结构体类型的变量就不行呢?
追答
这个只能说是Keil对STC的支持问题,同样式51单片机,用SST的和C805F等带XRAM的就能正常编译通过,结构体是可以放在XRAM中的,不
存在你说的上述问题。还有声明结构体方法有问题。
typedef struct Calender
{
........

}CALENDER;

后面的这个CALENDER是一个变量,Calender才是变量类型。只有变量类型才能声明其他变量。这两个名称最好有所区别避免混淆。
小兆86
2013-07-01 · TA获得超过802个赞
知道小有建树答主
回答量:990
采纳率:25%
帮助的人:869万
展开全部
单片机内部扩展RAM存储数据声明使用xdata。
修改内存模式,只是能使用的程序存储区的大小有变化,51的内存空间是不变的。至于报错我觉得是随着你的程序量增加所需要使用的内存也在增加。超过了256个字节。
你可以把报错信息贴出来,可以分析一下具体的原因。
当你使用关键字data声明后,结构体强制性的存放到内部内存,其它的有些内存变量可能被keil优化或者移到扩展内存了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
melody丶丨
2013-07-01 · TA获得超过1393个赞
知道小有建树答主
回答量:390
采纳率:100%
帮助的人:146万
展开全部
CALENDER xdata Calndr1;
CALENDER xdata Calndr_Temp;
这样定义的出错了?
虽然没用过这个型号 但是51内核的 这样使用过 没出现过什么问题啊
更多追问追答
追问
是的,只要放到xdata里,程序就不对,数据就乱,但是放到data里就没有问题
追答
数据乱了是通过程序运行看出来的   还是仿真查看该地址时 数据是乱的 
前者的话就好好检查下程序 看看是否是堆栈溢出了 后者的话有可能就是楼上所说keil的不支持引起的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
灿烂的小可爱4K
2024-04-09
知道答主
回答量:1
采纳率:0%
帮助的人:122
展开全部
我也是相同问题,定义了一个结构体,定义了一个该结构体类型的数组,含81个元素,在输入前52个数据赋值前52元素内时都正常,但在输入后面的数据时,不敢赋值什么数,元素都被赋值5。
请问你的问题和我一样吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式