typdef struktur pointer?

OP #3169249
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
#3169257
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren