打印
[AVR单片机]

问个icc使用内部EEPROM的问题

[复制链接]
2289|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
地方女大夫|  楼主 | 2013-8-4 13:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序先是定义了一个结构数组,和一个结构变量,我用ICCAVR自带的库函数EEPROM_READ读取,用结构数组LearnedCMD能编译通过,但用结构变量EEPROM_READ( 0x10 , curCMD );  就不能编译通过,这是啥原因呢?
typedef struct {
                unsigned char addrl;        // 地址低位
                unsigned char addrh;        // 地址高位
                unsigned char data;         // 指令码
                unsigned char datainv;      // 指令反码
                } _IRCMD;

volatile _IRCMD LearnedCMD [TOTAL_OUTPUT_COUNT];
volatile _IRCMD curCMD;
   
EEPROM_READ( 0x10 ,  LearnedCMD );  

相关帖子

沙发
huangxz| | 2013-8-4 19:32 | 只看该作者
那只能说明EEPROM_READ的第二个参数是指针类型的,你看看EEPROM_READ的声明就知道了啊

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
地方女大夫 + 1 赞一个!
板凳
地方女大夫|  楼主 | 2013-8-4 23:04 | 只看该作者
huangxz 发表于 2013-8-4 19:32
那只能说明EEPROM_READ的第二个参数是指针类型的,你看看EEPROM_READ的声明就知道了啊 ...

EEPROM_READ的声明里是有取地址的
#define EEPROM_READ(addr, dst)     EEPROMReadBytes(addr, &dst, sizeof (dst))
结构数组和结构变量不都是可以取地址的吗?

使用特权

评论回复
地板
huangxz| | 2013-8-5 08:04 | 只看该作者
地方女大夫 发表于 2013-8-4 23:04
EEPROM_READ的声明里是有取地址的
#define EEPROM_READ(addr, dst)     EEPROMReadBytes(addr, &dst, siz ...

对啊,那你直接取变量名就不对了,应该取变量的地址哦

使用特权

评论回复
5
地方女大夫|  楼主 | 2013-8-5 10:57 | 只看该作者
huangxz 发表于 2013-8-5 08:04
对啊,那你直接取变量名就不对了,应该取变量的地址哦

那之前我先随意定义一个变量   unsigned char i;
    再调用EEPROM函数            EEPROM_READ(0X10, i)
  也是直接可以编译通过的,
不用加取变量的地址的,回过头看还是不明白变量取结构数组是可以的 ,取结构变量就不行的原因

使用特权

评论回复
6
huangxz| | 2013-8-5 12:45 | 只看该作者
地方女大夫 发表于 2013-8-5 10:57
那之前我先随意定义一个变量   unsigned char i;
    再调用EEPROM函数            EEPROM_READ(0X10, i) ...

如果你那样用,你想把数据读到哪里去啊;P

使用特权

评论回复
7
地方女大夫|  楼主 | 2013-8-5 15:18 | 只看该作者
huangxz 发表于 2013-8-5 12:45
如果你那样用,你想把数据读到哪里去啊

按照ICC编译器说明:EEPROM_READ(int location, object)
    这个宏调用了 EEPROMReadBytes 函数从 EEPROM 指定位置读取数据送给数据对象
"object"可以是任意程序变量包括结构和数组
我的理解么,在我这段程序里取unsigned char i,就是把1个字节数据读到变量i里,
                 取结构变量curCMD,就是把4个字节的数据读到结构变量curCMD里,
              取结构数组变量LearnedCMD,就是把4*N个字节的数据读到结构数组变量LearnedCMD里,

使用特权

评论回复
8
地方女大夫|  楼主 | 2013-8-6 10:37 | 只看该作者
huangxz 发表于 2013-8-5 12:45
如果你那样用,你想把数据读到哪里去啊

现在在结构变量这里增加定义了一个结构指针,指向结构变量,volatile _IRCMD curCMD,*u =&curCMD;
再调用 EEPROM_READ( 0x01 ,  u ); 编译通过了,谢谢

使用特权

评论回复
9
地方女大夫|  楼主 | 2013-8-17 13:42 | 只看该作者
huangxz 发表于 2013-8-5 12:45
如果你那样用,你想把数据读到哪里去啊

想结贴给分,为何显示分数未分配完或存在错误

使用特权

评论回复
10
qazq123| | 2015-11-4 08:44 | 只看该作者
能问下为啥我写入eeprom的值有uchar型的 a=1,b=0,c=0  然后初始化先读取出来,为啥数值是错误的

使用特权

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

本版积分规则

3

主题

9

帖子

0

粉丝