Доброго всем добрым котам. Не добрым -- не доброго
Вопрос по явному заданию адреса для циклического чтения (ну и записи) в EEPROM при работе со стандартной библиотекой eeprom.h
функция чтения байта из памяти там выглядит таким образом
Если я правильно понимаю, то в функции используется указатель на адрес ячейки в EEPROM. Мне необходимо инициализировать начальную ячейку адресного пространства 0x0010 и последовательно читать до адреса 0x01FF (512 байт памяти). И вопрос собственно в организации адресации. Поскольку памяти 512 байт, то для адресации надо использовать двухбайтную переменную, в то время, как для указателя функция требует однобайтное значение. Как это правильно сделать, насколько корректно то, что я наваял?
Поскольку памяти 512 байт, то для адресации надо использовать двухбайтную переменную, в то время, как для указателя функция требует однобайтное значение. Как это правильно сделать,
Вы неверно понимаете указатели в Си. Если мы берем указатель uint8_t*, то он указывет на один байт данных, и читать с его помощью вы будете по байту. Если указатель будет uint16_t* то он будет указывть на два байта. Если к такому указателю прибавить единицу, то он будет указывать на следующие два байта данных.
[uquote="JackSmith",url="/forum/viewtopic.php?p=4296249#p4296249"]Вы неверно понимаете указатели в Си. Если мы берем указатель uint8_t*, то он указывет на один байт данных, и читать с его помощью вы будете по байту.[/uquote]
Мне и надо читать по байту. В чем неверность понимания?
Большое спасибо за помощь. В таком виде вроде работает:
допустим надо записать массив в EEPROM... и прочитать EEPROM в массив...
unsigned char x; // x - счёт
unsigned char E_int[128]={}; // E_int[128] - массив
//запись EEPROM:
for (x=0;x<128;x++) {
EEAR = x; // адрес
EEDR = E_int[x]; // дата
EECR |= 0b00000100; // разрешение записи EEPROM
EECR |= 0b00000010; // запись EEPROM
while(EECR & 0b00000010); // ждём окончания записи EEPROM
};
//чтение EEPROM:
for (x=0;x<128;x++) {
EEAR = x; // адрес
EECR |= 0b00000001; // чтение EEPROM
E_int[x]=EEDR; // дата
};
А как записать в прямую в епром , ну к примеру я хочу записать в атмегу 8 в епром с адресом 000Ф , значение 0Ф ! Это вопрос для среды программирования CVAVR ?
Не спрашивай по ком звонит колокол, он звонит по тебе !