реклама на сайте
подробности

 
 
> [РЕШЕНО] Определить структуру для внешней FLASH-памяти (Си), задать адрес, но не размещать в ОЗУ
Alt.F4
сообщение Jan 12 2017, 10:13
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Здравствуйте.

Есть библиотека, которая использует структуру с настройками TableSets и массу функций возвращающих адрес на строки таким образом:
char *addr=TableSets.XXX.yyy;
return addr;


Задача: перенести TableSets во внешнюю FLASH-память не переписывая библиотеку (поэтому offsetof использовать не получится).
Для обращения к внешней памяти надо знать смещение элемента в структуре относительно нулевого адреса.

Т.е. надо как-то определить структуру TableSets по нулевому адресу и в тоже время не размещать ее в ОЗУ МК.
Подскажите, пожалуйста, возможно ли это как-то сделать?
Спасибо.

з.ы. ОЗУ МК также начинается с нулевого адреса.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Jan 12 2017, 11:42
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Alt.F4 @ Jan 12 2017, 12:13) *
Для обращения к внешней памяти надо знать смещение элемента в структуре относительно нулевого адреса.

Т.е. надо как-то определить структуру TableSets по нулевому адресу и в тоже время не размещать ее в ОЗУ МК.
Именно это и делает offsetof(). Чем именно она не подходит?

Можно убрать из нее приведение типа:
CODE
#define my_macro(struct_name, field) &(((struct_name*)0)->field)


А вообще более правильно это делать как eeprom в avr-gcc организована - выделен регион где-то далеко в несуществующих адресах, в него засунута секция, в эту секцию размещаете свои данные, а в самой программе старшие несуществующие биты адреса просто выпадают за разрядную сетку указателя.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st August 2025 - 18:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01341 секунд с 7
ELECTRONIX ©2004-2016