打印
[MCU]

怎么设定两个变量占用相同的ram地址?

[复制链接]
2373|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kodec2104|  楼主 | 2016-3-9 10:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kodec2104 于 2016-3-9 10:46 编辑

编译环境是 iar for stm8
我想把程序中一些关键数据存入flash以免掉电数据丢失。我于是定义了一个数组,我又定义了几个以其意义为名称的变量,想把这几个变量的地址跟数组中元素的地址设为一样,这样我要保存变量的时候直接把数组保存入flash就可以了。用define也可以实现相同的功能,我是我觉得把数组元素和变量设为相同的地址是更好的方法。
希望多家指教!

相关帖子

沙发
JY-DX-JY| | 2016-3-9 10:52 | 只看该作者
联合体不是可以吗

使用特权

评论回复
板凳
kodec2104|  楼主 | 2016-3-9 11:09 | 只看该作者
JY-DX-JY 发表于 2016-3-9 10:52
联合体不是可以吗

联合体只能定义一个地址多个变量的共用吧?我要把两个变量和数组的两个元素分别共用起来……

使用特权

评论回复
地板
ningling_21| | 2016-3-9 11:13 | 只看该作者
kodec2104 发表于 2016-3-9 11:09
联合体只能定义一个地址多个变量的共用吧?我要把两个变量和数组的两个元素分别共用起来…… ...

为什么不可以?

使用特权

评论回复
5
kodec2104|  楼主 | 2016-3-9 12:10 | 只看该作者

要怎么实现呢?烦请指教……

使用特权

评论回复
6
dirtwillfly| | 2016-3-9 12:27 | 只看该作者
kodec2104 发表于 2016-3-9 11:09
联合体只能定义一个地址多个变量的共用吧?我要把两个变量和数组的两个元素分别共用起来…… ...

也可以用指针和数组来实现啊

使用特权

评论回复
7
kodec2104|  楼主 | 2016-3-9 13:12 | 只看该作者
dirtwillfly 发表于 2016-3-9 12:27
也可以用指针和数组来实现啊

单片机里面用指针是不是太浪费ram了?我这样做也是为了省ram的

使用特权

评论回复
8
dirtwillfly| | 2016-3-9 19:47 | 只看该作者
kodec2104 发表于 2016-3-9 13:12
单片机里面用指针是不是太浪费ram了?我这样做也是为了省ram的

呃,你前面没说这个要求。。。。

使用特权

评论回复
9
dwq175| | 2016-3-9 20:01 | 只看该作者
定义了几个以其意义为名称的变量.(实际上,无论你使用什么方法指向数组都是都占用了ram)
只能用#define 来以其意义为名称的变量。

使用特权

评论回复
10
popeye021| | 2016-3-9 22:25 | 只看该作者
kodec2104 发表于 2016-3-9 11:09
联合体只能定义一个地址多个变量的共用吧?我要把两个变量和数组的两个元素分别共用起来…… ...

两个变量合成一个结构体,结构体和数组用联合。

使用特权

评论回复
11
江枫渔火| | 2016-3-9 23:39 | 只看该作者
这不是用一个结构体搞定的事情吗??
int array[3];     // 数据存放的真实空间
// 解析数据的结构
struct value{
    int a;
    int b;
    int c;
};
struct value *pVal;
pVal = (struct value*)array; // 强制转换,好比把这个结构模型往那块数据上套,然后就知道哪部分是哪个意思了

pVal->a 即 array[0];
pVal->b 即 array[1];
pVal->c 即 array[2];

经常会用到这样的呀,这可是C语言指针的井水。。。

使用特权

评论回复
评分
参与人数 2威望 +2 收起 理由
kodec2104 + 1 赞一个!
cov0xt + 1 赞一个!
12
McuPlayer| | 2016-3-10 09:15 | 只看该作者
指针是个好办法,如果你用的C++还有个“引用”类型的变量,可以用于这个用途

使用特权

评论回复
13
松哥无敌| | 2016-3-10 09:17 | 只看该作者
江枫渔火 发表于 2016-3-9 23:39
这不是用一个结构体搞定的事情吗??
int array[3];     // 数据存放的真实空间
// 解析数据的结 ...

:handshake

使用特权

评论回复
14
lcdi| | 2016-3-10 09:59 | 只看该作者
用结构体比较好,规整,可读性强~但要是很简单数据不多,用define也可以。define就是用来定义别名的。

使用特权

评论回复
15
LearningASM| | 2016-3-10 10:01 | 只看该作者
#define 你用的变量 指向的变量

使用特权

评论回复
16
kodec2104|  楼主 | 2016-3-10 10:37 | 只看该作者
谢谢大家的支持,可惜只有5分,江枫渔火大哥的答案很好,给他吧!

使用特权

评论回复
17
i7gly| | 2016-3-11 00:11 | 只看该作者
直接用个define 就可以了,,,,

使用特权

评论回复
18
大道至简| | 2016-3-11 21:55 | 只看该作者
联合或者是指向同一个地方的2个指针

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

70

帖子

1

粉丝