gpt4 book ai didi

c - 读取 EEPROM AVR

转载 作者:行者123 更新时间:2023-11-30 17:32:31 27 4
gpt4 key购买 nike

当我从 eeprom 接收数据时遇到问题。

首先我编写了以下代码:

#include <avr/io.h>
#include <avr/eeprom.h>

char NAME[5] EEMEM = "a001";
char UNIT[2] EEMEM = "C";
uint16_t CYCLICITY EEMEM = 2000;

int main(void)
{
while(1)
{
//TODO:: Please write your application code
}
}

从中我提取了 .hex 和 .eep 文件。然后我用avrdude写了这个文件。首先,我写错了,因为我只将 .hex 文件放在 eerpom:w 上,并且破坏了一些字节,这并不那么重要。之后,我使用正确的命令进行写入,并看到部分数据,如下一个打印屏幕所示。

dumpeeprom

我正在保存一个数字、一个 C 和 a001 。正如您在第一行看到的那样,有 ..C.a001。这是我写的9个字节。

现在在另一个程序中!我尝试这样做:

char     EEMEM NAME[5]  ;  
char EEMEM UNIT[2] ;
uint16_t EEMEM CYCLICITY;

void _vReadEEPROM(char *au8Name,char *au8Unit,uint16_t *u16Cyclicity)
{
eeprom_read_block((void *)&au8Name,(const void *)NAME,5);
eeprom_read_block((void *)&au8Unit,(const void *)UNIT,2);
*u16Cyclicity = eeprom_read_word(&CYCLICITY);
}

参数位于全局结构中:

typedef struct 
{
uint16_t u16Cyclicity;
uint16_t u16Value;
char pu8Name[5];
char pu8Unit[2];
}EEH_layout;

在我发送“损坏的UART”的主要内容时(我有另一个主题)。在此代码之前,USART 发送了良好的值和垃圾。但是当我输入此代码时,USART 没有发送任何内容,并且我相信这是由于从 eeprom 读取 0(空)而导致的。CPU 正在工作,因为我有一个 1 秒定时器,可以中断 LED 闪烁。这是有效的,所以问题是我从 EEPORM 得到了 0。

另外,我不确定我是否理解如何写入 EEPROM,因为到处都有很多关于 EEPROM 的教程,但没有任何地方告诉我们如何配置 EEPROM 并且只读取。我不想在我的代码中包含这些参数,我希望它们来自 eeprom,我将单独编写!

编辑:uint16参数没问题,我设法通过UART读取它,它是2000;但字符不行,它是空的。

编辑:测试正常,问题是函数的参数没有使用正常。我用 pau8Name[] 而不是 *pau8Name 更改函数,因为指针初始化错误!!

最佳答案

始终注意指针!

问题出在未初始化的指针上。请参阅帖子中的编辑!

关于c - 读取 EEPROM AVR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24127172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com