打印

8个位定义,怎样把它合成一个uchar变量进行eeprom存储?

[复制链接]
3436|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gmgmgm|  楼主 | 2009-9-22 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
bit key_flag;//当前按键标志,1==按住;0==松开
bit menu;
bit stop;
bit stop2;
bit far;
bit near;
bit good;
bit bad;


前面定义了8个位标志,
在操作过程中,已经改变了上面那些位的值,0或1;在想把8个位定义值当成一个8位的普通数据存进eeprom里面,这样就可以省些eeprom的空间,需要怎样把这些位定义合成一个8位进行存储?而且自己要清楚这8位要一一对应。有哪位大侠讲解下,谢谢!

相关帖子

沙发
woshixinshou| | 2009-9-22 21:42 | 只看该作者
可以用类似IIC总线传输的方法,降UCHAR逐位赋值右移,再储存;反之逐位左移返回值。

使用特权

评论回复
板凳
ejack| | 2009-9-22 21:47 | 只看该作者
bdata

使用特权

评论回复
地板
zhugjbest| | 2009-9-22 21:49 | 只看该作者
位段

使用特权

评论回复
5
zq1987731| | 2009-9-22 22:31 | 只看该作者
typedef struct
{
    uchar key_flag : 1;
    uchar menu : 1;
    uchar stop : 1;
    uchar stop2 : 1;
    uchar far : 1;
    uchar near : 1;
    uchar good : 1;
    uchar bad : 1;
}your_type_name;

使用特权

评论回复
6
gmgmgm|  楼主 | 2009-9-23 09:13 | 只看该作者
楼上的我看不懂你这是啥意思?还望指点

使用特权

评论回复
7
zq1987731| | 2009-9-23 09:41 | 只看该作者
这就是C语言中的“位段”
我用typedef将其定义成了一个类型
那么需要用的时候只要如此定义(举例):
your_type_name X;
X.key_flag = 1;
……

将此类型存入EEPROM时,假设有如此函数:EEPROM_Write(uint address, uchar x);
只需要如此调用就行:EEPROM_Write(任意支持的地址,  *((const uchar *)&X));
从EEPROM中读回来也是一样的方法。

使用特权

评论回复
8
zq1987731| | 2009-9-23 09:45 | 只看该作者
整个位段,8个标志,正好占用1个字节
*((const uchar *)&X)的意思——
首先X是位段结构变量(这个如果不明白请看下C教科书),将其地址取出,强行转化为uchar类型,并加以只读属性,然后取出其正好一字节大小的内容后写入EEPROM

使用特权

评论回复
9
gmgmgm|  楼主 | 2009-9-23 11:20 | 只看该作者
对这个位段这个字眼还是有点陌生,我还得找教科书学习下,感谢zq1987731前辈的指点,

使用特权

评论回复
10
因特网用户| | 2009-9-23 12:17 | 只看该作者
TI 的2812的头文件就是那样子定义的

使用特权

评论回复
11
gmgmgm|  楼主 | 2009-9-23 14:09 | 只看该作者
还得请教各位了,我这样定义了:
struct menu
{
    uchar key_flag : 1;
    uchar menu : 1;
    uchar stop : 1;
    uchar stop2 : 1;
    uchar far : 1;
    uchar near : 1;
    uchar good : 1;
    uchar bad : 1;
};

我要怎样去用它的每个成员?
我这样操作:stop2=0;far=1;
这样操作编译器不认为有这些成员的存在,在网上搜了下,没找到有关成员要怎样去操作的学习资料。还望楼上的各位解说下

使用特权

评论回复
12
woshiwml| | 2009-9-23 17:05 | 只看该作者
看看c的结构体的定义

使用特权

评论回复
13
gaohq| | 2009-9-23 19:05 | 只看该作者
仔细读7楼的话

使用特权

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

本版积分规则

135

主题

766

帖子

2

粉丝