切换到宽版
爱科技/爱创意/爱折腾;电子/数码爱好者的家!欢迎访问新版数码之家网站
  • 11186阅读
  • 7回复

[MSP]keil c51中结构体要放在rom中该如何给它赋初值。 [复制链接]

上一主题 下一主题
离线decai
 

发帖
799
M币
6181
专家
13
粉丝
147
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2012-01-27
比如说我定义了一个结构体
struct
{
uchar tab[6];
uint tab0;
}code menu;

我如果和平时给一个数组一样赋值

struct
{
uchar tab[6]={1,2,3,4,5,6};
uint tab0;
}code menu;

keil就会报错。
有懂的还希望不要藏着。
网上搜了很久都没结果。

注意是放在code代码区的,不是在ram中的。
本帖最近打赏记录:共1条打赏M币+6
关键词: KeilC51ROM
离线dxf888

发帖
184
M币
462
专家
2
粉丝
24
只看该作者 1楼 发表于: 2012-01-27
不懂帮顶一下吧,这个版块好清静哦
离线玛鲁

发帖
492
M币
2291
专家
7
粉丝
19
只看该作者 2楼 发表于: 2012-01-27
重来没看到过这种写法的人飘过
离线ahyu99

发帖
2650
M币
5861
专家
5
粉丝
41
只看该作者 3楼 发表于: 2012-01-28
引用楼主decai于2012-01-27 21:39发表的 keil c51中结构体要放在rom中该如何给它赋初值。 :
比如说我定义了一个结构体
struct
{
uchar tab[6];
uint tab0;
.......


给你个建议,下面这样用:
struct  struct_list
{
unsigned char tab[6];
unsigned int tab0;
};
struct  struct_list code menu =
                {
                    {1,2,3,4,5,6},
                     0
                 };

是否满足了你的要求?
本帖最近打赏记录:共4条打赏M币+17专家+1
离线gssdcdc

发帖
73
M币
29
专家
1
粉丝
14
只看该作者 4楼 发表于: 2012-01-28
放在code区的不是变量,不能改变值得大小。

楼主留言:

对的,就是一堆常量,方便用指针。

本帖最近打赏记录:共1条打赏专家+1

发帖
364
M币
3657
专家
3
粉丝
33
只看该作者 5楼 发表于: 2012-01-30
定义一个结构只是在定义一种数据类型(如:int char 等数据类型)

系统不会为一个数据类型的定义分配内存空间

所以你在里面给属性初始化显然是不可以的 因为属性变量根本就还没有空间

只有当你用新定义的数据类型也就是你的结构体来定义一个结构体变量时

系统才会为这个对象申请一段内存空间

有了内存空间 才有可能为变量做初始化~~

这就好像你不能为int做初始化 只能为int 型变量比如int a做初始化一样~~

PS:来自于百度
本帖最近打赏记录:共1条打赏M币+7
离线lanrongye
发帖
2
M币
-17
专家
0
粉丝
1
只看该作者 6楼 发表于: 2012-02-11
楼主,实际结构体在存储时候也是线性结构,如果将常量定位于ROM区,可以使用汇编指令CSEG   AT xxxxx(地址),然后通过指针就可以遍历其中的内容
离线lxbf
发帖
12
M币
974
专家
0
粉丝
5
只看该作者 7楼 发表于: 2014-09-14
不懂帮顶一下吧,
快速回复
限80 字节
温馨提示:所有技术区严禁灌水,“沙发”“顶”字样;禁止广告贴;以免被删除
 
上一个 下一个