Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 64528|回复: 47

使用共用体存储各类型数据到EEPROM

  [复制链接]
发表于 2013-2-27 02:06 | 显示全部楼层 |阅读模式
你可能发现了,使用Arduino提供的EEPROM API,只能将字节型的数据的存入EEPROM。如果要存储字节以外的数据类型,又需要怎么做呢?

一个float类型的数据,需要占用4个字节的存储空间。因此我们可以把一个float拆分为4个字节,然后逐字节的写入EEPROM,来达到保存float数据的目的。
这里我们使用共用体,把float数据拆分为4个字节。
共用体:几个不同的变量共同占用一段内存的结构,在C语言中,被称作共用体类型结构,简称共用体。
首先定义一个名为data的共用体结构,共用体中有两个类型不同的成员变量:
  
union data
  
{
  
   float a;
  
   byte b[4];
  
};
  
再申明一个data类型的变量col:
  
data col;
  
现在你可以通过col.a访问这个共用体中的float类型成员a,通过col.b访问这个共用体中的byte类型成员b。col.a和col.b共同占用四个字节的地址。给col.a赋值后,通过col.b即可拆分float的目的。


这里我们提供一个将float类型存入EEPROM的例程。

  1. /*
  2. OpenJumper Examples
  3. 写入float类型到EEPROM
  4. 奈何col  2013.2.2
  5. */

  6. #include <EEPROM.h>
  7. union data
  8. {
  9.   float a;
  10.   byte b[4];
  11. };
  12. data col;
  13. int addr = 0;
  14. int led = 13;

  15. void setup()
  16. {
  17.   col.a=987.65;
  18.   for(int n=0;n<4;n++)
  19.   EEPROM.write(n, col.b[n]);
  20.   pinMode(led, OUTPUT);     
  21. }

  22. void loop()
  23. {
  24.   //LED闪烁,提示任务已完成
  25.   digitalWrite(led, HIGH);
  26.   delay(1000);
  27.   digitalWrite(led, LOW);
  28.   delay(1000);   
  29. }
复制代码



读出储存在EEPROM中的float类型数据思路和写入时相同,完整代码如下:



  1. /*
  2. OpenJumper Examples
  3. 从EEPROM读出float类型
  4. 奈何col  2013.2.2
  5. <a href="http://www.openjumper.com" target="_blank">www.openjumper.com</a>
  6. */

  7. #include <EEPROM.h>
  8. union data
  9. {
  10.   float a;
  11.   byte b[4];
  12. };
  13. data c;
  14. int addr = 0;
  15. int led = 13;

  16. void setup(){
  17.   for(int n=0;n<4;n++)
  18.   c.b[n]=EEPROM.read(n);
  19.   Serial.begin(9600);     
  20. }

  21. void loop(){
  22.   //输出
  23.   Serial.println(c.a);
  24.   delay(1000);   
  25. }
复制代码

发表于 2013-3-2 00:19 | 显示全部楼层
支持一下,忽略理解共同体的妙处了,哈
发表于 2013-3-7 20:01 | 显示全部楼层
很不错啊,谢谢了
发表于 2013-3-9 10:56 | 显示全部楼层
学习了,谢谢楼主
发表于 2013-4-7 17:36 | 显示全部楼层
原来共用体可以这样活用,谢谢楼主分享
发表于 2013-8-30 09:58 | 显示全部楼层
很感谢,呵呵
发表于 2013-9-9 18:48 | 显示全部楼层
支持一下,忽略理解共同体的妙处了,哈
发表于 2013-10-23 17:33 | 显示全部楼层
共用体使使几种不同类型的变量存放到同一段内存单元中
发表于 2013-10-31 15:44 | 显示全部楼层
very useful, good for you landlord
发表于 2013-12-11 11:47 | 显示全部楼层
原來 union 是這麼使用法, 謝謝樓主的範例解說, 學了一課。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|好玩手机游戏盒子|196体育|Arduino爱好者

GMT+8, 2023-4-2 13:31 , Processed in 0.095711 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表