QUOTE (Jenya7 @ Apr 21 2016, 10:13)

а page то мы не знаем. мы знаем текущую страницу а страницу требуемой записи надо вычислять.
Мне кажется это арифметика за первый класс начальной школы.
QUOTE (Jenya7 @ Apr 21 2016, 10:13)

а что в линкере можно указать область памяти? у меня память 24LC256. я пишу по I2C.
Я не телепат.
С учетом новых исходных данных можно идти двумя путями:
1) как было сделано в avr-gcc для eeprom: В свободном месте адресного пространства (скажем, с адреса 0xA0000000) объявить регион памяти, сложить в него все относящиеся к внешней памяти секции данных. Работать с этими данными через адреса, т.е. I2C_read(&Ext_storage[page].Record[record]), старшую тетраду (байт, полуслово) адреса игнорировать. Если где-то забыли & или обратились напрямую к Ext_storage[page].Record[record] - получили исключение. Чаще всего это будет происходить во время или после сдачи изделия заказчику.
2) Освоить С++, написать класс, для которого переопределить operator=, operator[] и скрыть все обращения к внешней памяти в этих двух операторах.