Forum: Mikrocontroller und Digitale Elektronik typdef struktur pointer?


von Rudi S. (erwin)


Lesenswert?

moin C-Freaks,

ich blicke nicht mehr durch.
Für eine Anwendung auf einem RX Controller von RENESAS gibt es eine 
RENESAS-API, die ich mit dem RENESAS Compiler auch problemlos und 
fehlerlos kompilieren kann. Da jedoch der Compiler nur begrenzt 
verfügbar ist (Begrenzung auf 64k) habe ich den GNU-Compiler verwendet 
und dort tritt mir dann beim Compilieren der obigen API an dieser 
Stelle:

"
/* A pointer to the CAN peripheral registers memory map structure. */
typedef volatile struct st_can __evenaccess * can_st_ptr;
"

folgende Fehlermeldung auf:

"
error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
"

Kann mir jemand erklären, was beim "tydef..." dort vor sich geht? Ich 
verstehe es so, dass die Struktur von "st_can" auf "__evenaccess" 
kopiert wird, oder ist das auch schon falsch gedacht? Und was passiert 
dann mit "__evenaccess" im Bereich der Pointerzuweisung? Soweit ich 
weiß, hält sich GNU ziemlich an den ANSI Standard - wurde der hier von 
RENESAS vernachlässigt?

Für Erklärungen, die auch ich verstehen kann, wäre ich sehr dankbar.

Rudi

von Stefan E. (sternst)


Lesenswert?

Rudi S. schrieb:
> Kann mir jemand erklären, was beim "tydef..." dort vor sich geht? Ich
> verstehe es so, dass die Struktur von "st_can" auf "__evenaccess"
> kopiert wird, oder ist das auch schon falsch gedacht?

Ja.

Der neu angelegte Typ heißt "can_st_ptr" und ist ein Zeiger auf ein
"volatile struct st_can __evenaccess".

Der Knackpunkt ist das __evenaccess darin. Das stellt wohl eine 
zusätzliche Eigenschaft der Struktur (struct st_can) dar. Bring in 
Erfahrung, was genau das bedeutet (der Name lässt es allerdings schon 
erahnen), und dann musst du das in was entsprechendes für den GCC 
überführen. Oder es stellt sich raus, dass du es für den GCC gar nicht 
brauchst.

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.