Forum: Mikrocontroller und Digitale Elektronik GCC: Wie Zugriff auf Symbol in CStartup.S


von ncall (Gast)


Lesenswert?

Hallo.

Ich benutze CodeSourcery (ARM7) und möchte einen Wert der in CStartup.S
definiert wurde, innerhalb einer C Prozedur benutzen.

Wie kann man den bitte vom C Code aus auf eine Konstante innerhalb
von CStartup.S zugreifen?

z.B:

In CStartup.S

 ...
 .org 0x1FC
 read_protection:
     .word 0x11111111
 ....

und  dann im C Code

  ...
  extern const long read_protection;
  ...
  ui_protected = (int)read_protection;  // irgendwie so halt !!??
  ....

Derzeit bekomme ich immer "undefined reference ..."

Kann jemand helfen ?

Danke.

Gruss

von foobar (Gast)


Lesenswert?

Oh. Schwer. Das wirst du in Assembler machen müssen:
1
LDR r0, =read_protection
2
LDR r0, [r0]

von foobar (Gast)


Lesenswert?

On a second thought: Das Label müsste man (im s-File) global 
deklarieren:
1
global read_protection

Und dann müsste man in C darauf zugreifen können:
1
extern uint32_t * read_protection;
2
ui_protected = *read_protection;

Du musst auf jeden Fall Pointer verwenden und keine long/ints.

von ncall (Gast)


Lesenswert?

Super, hat geklappt , danke sehr.

Hätte ich fast selber drauf kommen können (müssen).

Mit Pointer geht es aber nicht . Habe es schon kurz
verifiziert.

Genau muss es also heissen in CStartup.S

  .globale read_protection

der Rest dann wie anfangs beschreiben.


Danke nochmals.

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.