当我从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文件。然后我和阿夫杜德一起写了这些文件。首先,我写错了,因为我只将.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发送了好的值和garbage..but,当我把它放在这里时,USART没有发送任何东西,正如我所理解的那样,这是因为从eeprom读取0(null)。CPU正在工作,因为我有一个1秒计时器,可以暂停闪烁一个led。THis正在工作,所以问题是我从EEPORM获得了0。
另外,我也不确定如何编写EEPROM,因为到处都是关于EEPROM的大量教程,但是没有地方告诉我们如何配置EEPROM,而且只能阅读。我不想在我的代码中有这个参数,我想要他们从eeprom,我将独自编写!
编辑: uint16参数是ok的,我设法通过UART读取它,它是2000;但是字符不确定,它是空的。
编辑:测试确定,问题是函数的参数没有使用OK。我用pau8 Name[]而不是*pau8Name来更改函数,因为指针wAS初始化错误!!
发布于 2014-06-10 18:17:32
永远要注意指针!
问题是未初始化的指针。见编辑后!
https://stackoverflow.com/questions/24127172
复制相似问题