2013-04-18 9 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 - ваш параметр «данные» является указателем на пустоту, которая не имеет размера. Из-за этого вы не сможете использовать его как массив. Вы можете изменить декларацию:

недействительного EEPROM_write (полукокса * данные, байты DataSize)

Это исправляет ошибки компилятора. Быстрое рассмотрение семантики кода, похоже, делает то, что вы хотите. Удачи.