Обсуждаем контроллеры компании Atmel.
Ответить

avr & eeprom_update_block()

Вт мар 26, 2024 06:11:12

день добрый, товарищи колдуны!

Код:
#include <avr/eeprom.h>
eeprom_update_xxx()     // - набор функций для типов byte,dword,float,word
eeprom_update_block()   // - работа с "блоком памяти"


если с 1м набором функций все понятно:
- обновление/запись "области eeprom"/кастомного типа происходит, если данные не совпадают

по поводу 2го типа - не совсем понятно.
допустим имеется структура

Код:
typedef struct
{
uint8_t  a;
uint16_t b;
uint32_t c;
} TSet;


то при вызове "апдейта", в случае неравенства одного из полей структуры - будет обнавлен только "одно" поле, или вся структура?!
судя по описанию - обновиться/будет перезаписана вся структура.

за удобство загрузки/сохранения одним махом целой структуры - я не говорю, реально удобно!
НО...получается, что если есть необходимость поотдельно работать с полями структуры, и менять периодически значения (не все сразу), то в данном случае eeprom_update_block() является не очень эфективным (в плане циклов перезаписи ячеек памяти)?!

обычно я сам составляю карту EEPROM, сам расчитываю указатели к переменным и, следовательно, не имею "указанных" проблем, обращаюсь напрямую, читаю/пишу/обновляю переменные "персонально".

сейчас решил разобраться более детально, ну и "удобства - скопом за раз" читать/сохранять структуры очень заманчиво!

какие будут мнения по этому поводу?!
спасибо.

p.s.
уточнение: чтени/перезапись идет во внутр. цикле побайтно! тут все понятно!
URL

что по поводу оптимального доступа к отдельным полям структуры (имеется в виду - запись/обновление в eeprom)?

Re: avr & eeprom_update_block()

Вт мар 26, 2024 10:42:12

если с 1м набором функций все понятно:
- обновление/запись "области eeprom"/кастомного типа происходит, если данные не совпадают

по поводу 2го типа - не совсем понятно.

Боюсь, что и с 1-м не понятно. Обновление ТОЛЬКО побайтовое. Во всех случаях.
Ответить