Hallo,
ich habe mich immer gefreut hier meine Frage zu stellen und ich habe
fast immer eine Antwort bekommen.
ich habe den folgende Code Teil gefunden aber leider nicht genau
verstanden, wofür bracht man so ein Makro und welsche Vorteil hat er.
was bedeutet diese befehle.
N.B __root,__no_init.
Makro:
#define Item(Type, Str) typedef Type X_##Str##_n; __root __no_init
static Type INT_##Str##_n @ "Variabl"; _Pragma("diag_suppress=Pe10")
__root __no_init static Type Y_##Str##_k @ "Variabl"
_Pragma("diag_default=Pe10");
Danke
Mit dem Makro werden 3 Datentypen mit unterschiedlichen Eigenschaften deklariert. Und zwar mit dem Typ "Type". "Str" dient dazu den Typen einen eindeutigen Namen zu verpassen. Die Typen unterscheiden sich dann z.B ob sie oder ob sie nicht ( __no_init) initialisiert werden oder ob sie auch weg optimiert werden dürfen (__root).
Google "IVR _no_init _root" : _no_init: Compiler initialisiert Variable nicht (wird sonst bei Programmstart mit 0 initialisiert) _root: Compiler(eher Linker) darf beim Optimieren die Variable nicht entfernen, auch wenn sie ungenutzt ist. Manuella schrieb: > wofür bracht man so ein Makro Hier: Zwei Variablen auf einmal deklarieren Manuella schrieb: > welche Vorteil hat er Tipparbeit sparen, und nicht jeder muss über _no_init und _root bescheid wissen. Es reicht, wenn sich der Makro-Schreiberling auskennt, und die Verwendung seines Makros dokumentiert.
Hallo,
vielen dank für die schnelle Antwort
ok das habe ich verstanden.
aber was bedeutet das.
static Type INT_##Str##_n @ "Variabl"; _Pragma("diag_suppress=Pe10")
__root __no_init static Type Y_##Str##_k @ "Variabl"
_Pragma("diag_default=Pe10");
eigentlich alles sollte in eine Zeile dargestellt worden.
alles gehört zu den makro.
1 | Item(float, Fooo) |
2 | |
3 | // wird mit dem gcc-Preprozessor (habe kein IAR) zu
|
4 | |
5 | typedef float X_Fooo_n; |
6 | |
7 | __root __no_init static float INT_Fooo_n @ "Variabl"; |
8 | |
9 | #pragma diag_suppress=Pe10
|
10 | __root __no_init static float Y_Fooo_k @ "Variabl" |
11 | #pragma diag_default=Pe10
|
12 | ;
|
Was __root und __no_init bedeutet, wurde erwähnt, das @ steht in der IAR-Doku: https://www.iar.com/support/tech-notes/compiler/linker-error-for-absolute-located-variable/ Wozu man den typedef und die Variablen namens INT_Fooo_n und Y_Fooo_k braucht, hat der Ersteller dieses wunderschönen Makros hoffentlich dokumentiert.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.