关于 c:AVR 内部 eeprom 读取问题

AVR Internal eeprom reading issue

我正在使用 atmega8A 的内部 EEPROM,使用 avr\\'s EEPROM 库。我的代码看起来像这样

1
2
3
4
5
6
7
8
9
10
11
12
 #define EEPROM_ADDR    0x0A

int main(void)
{
    _delay_ms(2000);
    LED_Initialize();
    vBlink_Led(100, 2);

    //eeprom_write_byte((uint8_t*)EEPROM_ADDR, 8);
    val = eeprom_read_byte((uint8_t*)EEPROM_ADDR);
    while (1);
}

当我取消注释行 eeprom_write_byte((uint8_t*)EEPROM_ADDR, 8); 然后使用 val = eeprom_read_byte((uint8_t*)EEPROM_ADDR); 读取时,会读取正确的值 8。但是当我对该行进行注释然后重新刷新代码时,值将更改为 255。

有什么建议吗?

注意 - 我已取消选中 avrdudes 中用于擦除闪存和 eeprom 的框


通常,当执行"芯片擦除"操作时,EEPROM 也会被清除。

为了防止这种情况,您必须编程(即设置为零)EESAVE 熔丝位,它是高熔丝字节中的第 3 位(请参阅数据表第 29.2 章熔丝位)