Siro
22.12.2010, 12:20
Hallo zusammen, ich habe vermutlich mal wieder etwas in "C" nicht richtig verstanden.
ich habe folgende Definitionen in einer originalen Datei von NXP gefunden:
static inline void __enable_irq() { asm volatile ("cpsie i"); }
static inline void __disable_irq() { asm volatile ("cpsid i"); }
Vom Verständnis her kein Problem. es gibt eine Unterfunktion __enable_irq , welche keinen Parameter benötigt. Der Programmcode selbst ist in Assembler codiert. Das reservierte Wort "inline", welches es erst ab der Erweiterung in C99 gibt, zwingt den Compiler dazu, keinen Unterprogrammaufruf zu tätigen, sondern den Code jeweils direkt einzusetzen. Soweit alles klar. "volatile" ist wahrscheinlich, vorsichtshalber angegeben worden, damit der Compiler nix wegoptimiert. (Reine Vermutung von mir) Aber wozu noch "static" Bei Variablen wäre es eine zur Laufzeit immer verfügbare Variable. Es handelt sich aber nicht um eine Variable sondern um eine Funktion und hierbei wäre, meiner Meinung nach, die Bedeutung "nur in diesem Modul verfügbar". Was bewirkt die Angabe "static" in diesem Falle ?
Übrigens habe ich es in meiner Software bisher wie folgt gelöst:
#define DISABLE __asm("CPSID I") /* Disable Interrupts */
#define ENABLE __asm("CPSIE I") /* Enable Interrupts */
und das funktioniert auch einwandfrei, zumindest mit dem IAR Compiler.
Danke Euch vorab,
mfg. Siro
ich habe folgende Definitionen in einer originalen Datei von NXP gefunden:
static inline void __enable_irq() { asm volatile ("cpsie i"); }
static inline void __disable_irq() { asm volatile ("cpsid i"); }
Vom Verständnis her kein Problem. es gibt eine Unterfunktion __enable_irq , welche keinen Parameter benötigt. Der Programmcode selbst ist in Assembler codiert. Das reservierte Wort "inline", welches es erst ab der Erweiterung in C99 gibt, zwingt den Compiler dazu, keinen Unterprogrammaufruf zu tätigen, sondern den Code jeweils direkt einzusetzen. Soweit alles klar. "volatile" ist wahrscheinlich, vorsichtshalber angegeben worden, damit der Compiler nix wegoptimiert. (Reine Vermutung von mir) Aber wozu noch "static" Bei Variablen wäre es eine zur Laufzeit immer verfügbare Variable. Es handelt sich aber nicht um eine Variable sondern um eine Funktion und hierbei wäre, meiner Meinung nach, die Bedeutung "nur in diesem Modul verfügbar". Was bewirkt die Angabe "static" in diesem Falle ?
Übrigens habe ich es in meiner Software bisher wie folgt gelöst:
#define DISABLE __asm("CPSID I") /* Disable Interrupts */
#define ENABLE __asm("CPSIE I") /* Enable Interrupts */
und das funktioniert auch einwandfrei, zumindest mit dem IAR Compiler.
Danke Euch vorab,
mfg. Siro