刚刚从ICCAVR转到WINAVR,使用起来非常不习惯,在ICC中EEPROM的读写程序,我都是根据手册来编写的。
在“芯艺”的“AVR单片机GCC程序设计”中,提到,要使用EEPROM,在GCCAVR中,有两种方法可以实现。
1、直接通过地址的方式来读和写操作
写操作: eeprom_write_byte(0,a);
说明: 直接向EEPROM地址0写个数据a.
读操作:unsigned char val=eeprom_read_byte(0);
说明:读EEPROM地址0的数据到val.
2、通过预先声明一个数据是存储在EEPROM中:uint8_t val __attribute__((section(".eeprom")));
写操作: eeprom_write_byte(&val,a);
说明: 如上面声明的话,那么val值存储的地址是由系统默认的,并不知道具体的地址。
读操作:unsigned char val=eeprom_read_byte(&val);
3、1和2共同存在在一个程序里面,那么实验出来,直接操作是无效的。我测试的时候是直接对地址0操作。
假如说需要知道数据的具体地址,那么可以预先声明的时候在后面确定具体地址,uint8_t val __attribute__((section(".eeprom")))=0;
如下实例:
/*

本文介绍了在AVR Studio6中使用GCC进行EEPROM读写操作的两种方法。第一种是直接通过地址进行读写,第二种是声明变量存储在EEPROM中。在同一个程序中同时使用两种方法可能导致直接操作无效。文中还提供了示例代码进行说明。

5186

被折叠的 条评论
为什么被折叠?



