#defines в скриптах компоновщика - PullRequest
1 голос
/ 26 сентября 2008

Для встроенной системы мне нужно разместить несколько структур данных по фиксированным адресам, чтобы отдельный управляющий ЦП мог получить к ним доступ в известном месте. Для этого я использую сценарии компоновщика для встроенной цели, а также #defines тех же адресов для управляющего ЦП.

Меня беспокоит, что эти адресные константы поэтому определены в двух местах: скрипт компоновщика и файл заголовка. Я хотел бы иметь только один. Лучшее решение, которое я придумала на данный момент, - это сделать Makefile для запуска cpp на скрипте компоновщика, что позволит ему #include тот же заголовок.

Есть ли лучший способ сделать это? Есть ли малоизвестная опция для ld или соглашение об именах для сценария компоновщика, который автоматически запускает его через cpp?

Ответы [ 2 ]

4 голосов
/ 26 сентября 2008

Это не совсем то решение, которое вы ищете, но один вариант - использовать систему сборки для настройки этих значений. Создайте config.h.in и target.ld.in, которые действуют как шаблоны, и система сборки создаст config.h с правильным определением и target.ld с правильным адресом для цели, которую вы строите.

Мы используем CMake для наших встроенных систем, и он поддерживает подобные вещи. GNU autoconf тоже работает, но лично мне это никогда не нравилось.

0 голосов
/ 07 декабря 2011

Вы можете использовать специальную конструкцию emdedded-C @ для размещения объекта в любом месте адресного пространства.

static struct SOMESTRUCT somestruct @ 0x40000000;
extern int someextint @ 0x3ffffffc;
char somebuffer[77] @ 0x80000000;

Предполагается 32-битный MCU.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...