AVR中的EEPROM不起作用

时间:2015-05-21 15:11:12

标签: avr eeprom

我是C语言的初学者。我试图在我的ATmega 8和ATtiny2313上操作EEPROM存储器。 根据{{​​3}},我创建了以下代码:

1)在uC的eeprom

中写一个数字5
#define F_CPU 1000000UL
#include <avr/eeprom.h>


int main()
{
    number=5;

    eeprom_update_byte (( uint8_t *) 5, number );

    while (1);
    {
    }
}

2)LED闪烁n次,其中n是eeprom中从5位读取的数字

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>


int main()
{
    DDRB=0xFF;
    _delay_ms(1000);

    int number;

    number=eeprom_read_byte (( uint8_t *) 5) ;

    for (int i=0; i<number; i++) //blinking  'number' times
    {
        PORTB |= (1<<PB3);
        _delay_ms(100);
        PORTB &= (0<<PB3);
        _delay_ms(400);
    }

    while (1);
    {
    }
}

第二个程序多次闪烁led,并且它永远不会出现在eeprom中的数量。问题是什么?在atmega8和attiny2313都会发生这种情况。

编辑: 编译第一个程序后的控制台结果:

18:01:55 ****增量构建配置发布项目eeprom **** 做所有 调用:打印尺寸 avr-size --format = avr --mcu = attiny2313 eeprom.elf

AVR内存使用

设备:attiny2313

程序:102字节(5.0%已满) (.text + .data + .bootloader)

数据:0字节(0.0%完整) (.data + .bss + .noinit)

成品建筑:sizeummy

18:01:56构建完成(耗时189毫秒)

1 个答案:

答案 0 :(得分:2)

这是初学者每次失败之一: - )

如果只使用avr-gcc <source> -o <out>进行编译,则会在此处得到错误的结果,因为您需要进行优化!必须优化写过程以实现正确的写访问!所以请使用&#39; -Os&#39;或者&#39; -O3&#39;用avr-gcc进行编译!

如果您不知道问题来自读取或写入eeprom,请使用avarice / avrdude或类似工具阅读您的eeprom数据。

下一个陷阱可能是,如果您对闪存进行编程,则会删除eeprom部分。那么请看看你的程序员真的做了什么!全芯片擦除也会擦除eeprom。

下一个陷阱:你设置了多少融合?您正在以预期的时钟速率运行?也许你已编程内部时钟,你的外部水晶似乎工作速度错误?

另一个:再次看一下保险丝! JTAG引脚是否已关闭?也许你只看到JTAG闪烁: - )

请在您的问题中添加编译器和编程命令!