Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top