当我从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并且我销毁了一些字节,这不是那么重要。之后,我使用正确的命令编写,我会看到部分数据,如下一个打印屏幕。
我正在保存一个数字,一个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(null)。 CPU正在工作,因为我有一个1秒的计时器,它会中断以使LED闪烁。这是有效的,所以问题是我从EEPORM获得了0。
另外我不确定我如何写EEPROM因为EEPROM上有很多补习,但无论如何配置EEPROM并且只读。我不希望在我的代码中使用这个参数,我希望它们能从eeprom中获取,我会单独写出来!
编辑:uint16参数没问题,我设法通过UART读取它,它是2000;但是这些字符不好,它是空的。
编辑: 测试好了,问题是函数的参数没有使用正常。我使用pau8Name []而不是* pau8Name更改函数,因为指针已初始化错误!!
答案 0 :(得分:0)
始终注意指针!
问题在于未初始化的指针。见帖子编辑!