Frage

Für ein eingebettetes System, das ich brauche ein paar Datenstrukturen an festen Adressen zu platzieren, so dass eine separate Steuer-CPU sie an einem bekannten Ort zugreifen können. Ich bin Linker Skripte für das eingebettete Ziel dies zu erreichen, sowie #defines diesen gleichen Adressen für das Steuer-CPU.

Es stört mich, dass diese Adreßkonstanten daher an zwei Stellen definiert sind, die Linker-Skript und eine Header-Datei. Ich möchte nur einen haben. Die beste Lösung, die ich mit so weit kommen habe, ist den Makefile läuft cpp auf der Linker-Skript haben, so dass es den gleichen Header # include.

Gibt es einen besseren Weg, dies zu erreichen? Gibt es eine wenig bekannte Option oder eine Namenskonvention für die Linker-Skript ld, die es automatisch durch cpp laufen?

War es hilfreich?

Lösung

Das ist nicht ganz die Lösung, die Sie suchen, aber eine Option ist das Build-System zu nutzen, um diese Werte zu konfigurieren. Erstellen Sie eine config.h.in und eine target.ld.in, die als Vorlagen handeln und haben das Build-System erzeugt eine config.h mit den richtigen definieren und einer target.ld mit der richtigen Adresse für das Ziel Sie bauen.

Wir verwenden CMake für unsere Embedded-Systeme und unterstützt diese Art der Sache. GNU autoconf auch tut, aber ich nie persönlich mochte es wirklich.

Andere Tipps

Sie können das eingebetteten-C spezifisches Konstrukt @ verwenden, um ein Objekt irgendwo im Adressraum zu platzieren.

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

Unter der Annahme eines 32-Bit-MCU.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top