Vladimir Ljaschko (25.08.2009 18:06, просмотров: 112) ответил Vit на Мне кажется путается святое с праведным;) - описание + хранение настроек и описание + хранение архива вмешательств - и то и то смесь ужа и ежа.
А я частный случай совпадения размеров записи структуры и использую. Все достаточно удобно. Функции промежуточного уровня доступа к архиву имеет два параметра - тип записи (enum одного из параметров макросов) и номер записи этого типа (например, находится последняя по времени запись в массиве, или индекс этой записи хранится в другой структуре).
Но вот внутри этой функции действительно есть некрасивое место определения параметров для функции уже записывающей EEPROM:
char GetRecordParametersError(uchar area, uchar index)
{ switch (area)
{ case SETUP_DATA: record_parameters.eeprom_offset=OFFSET(EEPROM_TYPE,se[index]);
record_parameters.bytes_qty=sizeof(SETUP_DATA_TYPE);
record_parameters.ram_address=(uchar *) &se;
record_parameters.checksum_address=&se.checksum;
break;
case FULL_STATISTIC: record_parameters.eeprom_offset=OFFSET(EEPROM_TYPE,stat[index]);
record_parameters.bytes_qty=sizeof(FULL_STATISTIC_TYPE);
record_parameters.ram_address=(uchar *) &stat;
record_parameters.checksum_address=&stat.checksum;
break;
...
Можно перевести все на константные массивы. Но пока не буду - и так инструментарий много времени занял.