2013-04-18 87 views
0

这是这里的后续工作 - Writting data to the Arduino's onboard EEPROM 我刚刚尝试在URL中使用片段,但不起作用。请帮我解决下面的错误。将数据写入Arduino EEPROM

write_to_eeprom.cpp:8:5: error: expected unqualified-id before '[' token 
write_to_eeprom.cpp: In function 'void setup()': 
write_to_eeprom.cpp:12:16: error: 'stringToWrite' was not declared in this scope 
write_to_eeprom.cpp: In function 'void loop()': 
write_to_eeprom.cpp:22:33: error: invalid conversion from 'uint8_t {aka unsigned char}' to 'char*' [-fpermissive] 
write_to_eeprom.cpp: In function 'void EEPROM_write(void*, byte)': 
write_to_eeprom.cpp:32:32: error: 'void*' is not a pointer-to-object type 

下面是代码

#include <EEPROM.h> 
#include <LiquidCrystal.h> 
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7); 
char[] stringToWrite = "Test"; 
void setup() { 
    lcd.begin(16, 2); 
    delay(5000); 
    EEPROM_write(stringToWrite, strlen(stringToWrite)); 
} 

void loop() { 
    delay(10000); 
    int addr = 0; 
    byte datasize = EEPROM.read(addr++); 
    char stringToRead[0x20];   // allocate enough space for the string here! 
    char * readLoc = stringToRead; 
    for (int i=0;i<datasize; i++) { 
    readLoc = EEPROM.read(addr++); 
    readLoc++; 
    } 
} 
// Function takes a void pointer to data, and how much to write (no other way to know) 
// Could also take a starting address, and return the size of the reach chunk, to be more generic 
void EEPROM_write(void * data, byte datasize) { 
    int addr = 0; 
    EEPROM.write(addr++, datasize); 
    for (int i=0; i<datasize; i++) { 
    EEPROM.write(addr++, data[i]); 
    } 
} 

回答

0

那么,你需要修复您的代码:

线8 - []需要去后stringToWrite 线12 - 应该得到更好的固定行8

第22行 - 您需要解除引用readLoc。在它之前添加一个'*'。

第32行 - 你的参数“data”是指向void的指针,它没有大小。因此,您将无法将其用作数组。你可以改变声明:

无效EEPROM_write(字符 *数据字节命令datasize)

修复该编译器错误。快速浏览一下代码的语义,似乎是在做你想做的事情。祝你好运。