Hallo Andreas,
so eine ähnliche Dekleration hatte ich auch schonmal gefunden.
Die Macros scheinen aber aus Dateien für andere AVRs kopiert zu sein.
Kann ich diese einfach so auch für die AVR32 benutzen? Jedenfalls hab
ich Probleme die include-Dateien für die verwendeten Befehle zu finden.
Hier hat jemand die Macros für AVR32 definiert:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=830416
1 | static __inline__ void IntOnParam(const unsigned int *v)
|
2 | {
|
3 | Enable_global_interrupt();
|
4 | asm volatile("");
|
5 | (void)v;
|
6 | }
|
7 |
|
8 | static __inline unsigned int IntOffRetval(void)
|
9 | {
|
10 | Disable_global_interrupt();
|
11 | return 1;
|
12 | }
|
13 |
|
14 | #define ATOMIC_BLOCK(type) for (type, t = IntOffRetval(); t; t = 0)
|
15 |
|
16 | #define FORCEON unsigned int sreg_save __attribute__((__cleanup__(IntOnParam))) = 0
|
Problem ist, dass die for-loop C99 als Compilerstandard braucht, um die
Deklaration im Schleifenkopf zu verkraften.
Mit C99 produzieren allerdings viele Dateien des Frameworks Fehler.
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=686625
Hat jemand eine Idee, wie man das Macro auf C90 bekommt? Die
typ-definition vor die for-Schleife packen, funktioniert ja nicht, wenn
man mehr als einen Block in einer Funktion hat, wenn ich das richtig
sehe.
Ansonsten werde ich wohl doch erstmal:
1 | Disable_global_interrupt();
|
2 | doSomething;
|
3 | Enable_global_interrupt();
|
verwenden und hoffen, dass ich da nichts vergesse.
Beste Grüße,
Jan