Вот, наконец-то, нормальное решение. И удобно, и максимально близко к WINAVR, используемому гораздо чаще, чем hi-tech. Работает на основе стандартного макроса
offsetof.
Код
#include <stddef.h>
typedef struct
{
int fld1;
unsigned char fld2[45];
} complex_type_t;
typedef struct
{
int memb1,memb2;
complex_type_t record;
} paramset_t;
void main(void)
{
/* blah blah blah*/
unsigned char tmp;
tmp = eeprom_read(offsetof(paramset_t,record.fld2[6]));
}
Ессно, это примитив для чтения/записи блока.
P.S. вначале написал, а потом нашел оч. красивую статью:
статья