QUOTE (Alt.F4 @ Jan 12 2017, 12:13)

Для обращения к внешней памяти надо знать смещение элемента в структуре относительно нулевого адреса.
Т.е. надо как-то определить структуру TableSets по нулевому адресу и в тоже время не размещать ее в ОЗУ МК.
Именно это и делает offsetof(). Чем именно она не подходит?
Можно убрать из нее приведение типа:
CODE
#define my_macro(struct_name, field) &(((struct_name*)0)->field)
А вообще более правильно это делать как eeprom в avr-gcc организована - выделен регион где-то далеко в несуществующих адресах, в него засунута секция, в эту секцию размещаете свои данные, а в самой программе старшие несуществующие биты адреса просто выпадают за разрядную сетку указателя.