Heimrich schrieb:
> Wie finde ich denn am besten heraus, wie der IAR-Arm-Compiler folgenden
> Code umsetzt?
Was meinst du damit?
* Wie der Code dann letzten Endes auf der CPU abläuft, sprich was der
Compiler daraus generiert?
-> die meisten Compiler können ein Assembler Listing dessen erzeugen,
was sie an Code generiert haben
* Wie man dem Compiler klar macht, was es an dieser Stelle Spezielles
zu tun gibt. Sprich: wie die Dinge in der IAR-Erweiterung zur Sprache
C formuliert sind.
-> auch intrinsic.h ist ein Header File wie jedes andere. Also ein
Textfile. Das kann man mit einem Editor aufmachen und sich ansehen
wie die IAR Leute das implementiert haben. Dinge wie diese haben
normalerweise das Zeug dazu, dass sie als inline Funktionen
formuliert sind. D.h. die Chancen stehen ganz gut, dass du die
komplette Implementierung von zb __disable_interrupt() in
intrinsic.h findest.
> Würde den Code gerne etwas portabler gestalten.
Solche Sachen sind sowieso hochgradig unportabel. NOrmalerweise
postuliert man, dass zumindest das Prinzip überall gleich ist und sich
nur die Namen der Funktionen von Compiler zu Compiler verändern. D.h.
man kapselt das mit ein paar Makros
1 | #ifdef __IAR
|
2 | #include <intrinsic.h>
|
3 | #define I_STATE __istate_t
|
4 | #define GET_STATE __get_interrupt_state()
|
5 | #define CLI __disable_interrupt()
|
6 | #define RESTORE_STATE __set_interrupt_state(istate)
|
7 | #elseif _GCC
|
8 | ....
|
9 | #endif
|