Domanda

Per un sistema embedded ho bisogno di posizionare alcune strutture di dati su indirizzi fissi, in modo che una CPU di controllo separata possa accedervi in ??una posizione nota. Sto usando gli script di linker per l'obiettivo incorporato per raggiungere questo obiettivo, oltre a #define di quegli stessi indirizzi per la CPU di controllo.

Mi preoccupa il fatto che queste costanti di indirizzo siano pertanto definite in due posizioni, lo script del linker e un file di intestazione. Mi piacerebbe averne solo uno. La soluzione migliore che ho trovato finora è far eseguire a Makefile cpp sullo script del linker, consentendogli di includere la stessa intestazione.

C'è un modo migliore per raggiungere questo obiettivo? Esiste qualche opzione poco nota a ld o una convenzione di denominazione per lo script del linker che lo eseguirà automaticamente tramite cpp?

È stato utile?

Soluzione

Questa non è proprio la soluzione che stai cercando, ma un'opzione è quella di utilizzare il sistema di build per configurare questi valori. Crea un file config.h.in e un target.ld.in che funge da modello e fai in modo che il sistema di generazione produca un file config.h con la definizione corretta e un target.ld con l'indirizzo corretto per la destinazione che stai costruendo.

Usiamo CMake per i nostri sistemi embedded e supporta questo tipo di cose. Lo fa anche GNU autoconf, ma non mi è mai piaciuto molto personalmente.

Altri suggerimenti

È possibile utilizzare il costrutto specifico incorporato-C @ per posizionare un oggetto ovunque nello spazio degli indirizzi.

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

Supponendo un MCU a 32 bit.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top