Forum: PC-Programmierung Mikrocontroller: Struktur auf eine bestimmt Adresse legen


von Leo (Gast)


Lesenswert?

Hallo,

eine bestimmt Struktur soll auf eine Adresse gesetzt werden Wie wird 
sowas in C realisiert?

von Felix U. (ubfx)


Lesenswert?

C kennt keinen Mechanismus dafür.

Je nachdem welche Toolchain du benutzt, gibt es aber oft Möglichkeiten, 
das zu spezifizieren.

zB für ARM GCC: 
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0474f/BABDJCAA.html

: Bearbeitet durch User
von CC (Gast)


Lesenswert?

1
struct dein_struct *ps = (struct dein_struct*)adr;

oder stehe ich auf dem Schlauch?
Auf den Speicher musst Du natürlich zugreifen dürfen...

von Felix U. (ubfx)


Lesenswert?

CC schrieb:
> oder stehe ich auf dem Schlauch?
> Auf den Speicher musst Du natürlich zugreifen dürfen...

Ich denke es geht um Read-Only Programm/Flashspeicher

von M.K. B. (mkbit)


Lesenswert?

CC schrieb:
> Auf den Speicher musst Du natürlich zugreifen dürfen...

Und der Compiler/Linker darf die Adresse nicht für etwas anderes 
verwenden.

Mir fallen da spontan zwei Anwendungsfälle ein:
1) Struct abstrahiert eine Registerstruktur. => Vorschlag von CC
2) Struct soll in einem Shared-Memory für ein anderes Modul sein.
   => Über den Linker das Objekt an eine bestimmte Adresse legen lassen.

von Nikolaus S. (Firma: Golden Delicious Computers) (hns)


Lesenswert?

CC schrieb:
>
1
> struct dein_struct *ps = (struct dein_struct*)adr;
2
>
>
> oder stehe ich auf dem Schlauch?
> Auf den Speicher musst Du natürlich zugreifen dürfen...

struct dein_struct *ps = (struct dein_struct*)(void *) 0x1234;

von Leo (Gast)


Lesenswert?

Das habe ich vergessen zu sagen wofür ich dies benötige.
Mit dieser Struktur sollen Zählerstände ausgelesen werden ==> Read 
Memory

von A. S. (Gast)


Lesenswert?

Leo schrieb:
> Zählerstände

?? Meinst Du Counter? Also Register?

von PittyJ (Gast)


Lesenswert?

Zählerstände??
Ist nicht alles ein Zähler: Register, Speicher, IO-Ports...

Bei mir kommen sie übrigens immer einmal im Jahr vorbei, um die Zähler 
zu lesen. Meist bin ich nicht da, dann schicke ich eine Postkarte hin.
Wie wäre es, wenn du den Zähler einfach ausdruckst, dann kann man den 
auch lesen.

von Leo (Gast)


Lesenswert?

1
struct dein_struct *ps = (struct dein_struct*0x10000000;

PS ist somit ein Pointer vom Typ dein_struct ab der Adresse 0x1000000.
Wie kann ich nun auf diese Strukturelemente im Quellcode zugreifen?

von Leo (Gast)


Lesenswert?

Hab den Fehler gesehen. Es funktioniert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.