Problem mit CodeBlocks und util/atomic

#5139092
Lesenswert?

Hallo,

ich bin von AtmelStudio (Win) auf CodeBlocks und AVR-GCC(Debian9.1) 
umgestiegen.

Unter AtmelStudio habe ich in einem Programm folgende Zeile:
1
ATOMIC_BLOCK(ATOMIC_FORCEON) {sx_kopie_rueckgabewert=sx_rueckgabewert;}
Das ganze funktioniert ohne Probleme.

Die gleiche Zeile habe ich jetzt in CodeBlocks eingegeben. Hierbei 
erhalte ich folgende Ausgabe:
1
||=== Build: Release in 0036_003_v1 (compiler: GNU GCC Compiler for AVR) ===|
2
main.c||In function ‘main’:|
3
main.c|60|error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode|
4
main.c|60|note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code|
5
main.c|51|warning: variable ‘sx_daten’ set but not used [-Wunused-but-set-variable]|
6
main.c|51|warning: variable ‘sx_adresse’ set but not used [-Wunused-but-set-variable]|
7
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 1 second(s)) ===|

Die Warnungen mit den unbenutzen Variablen kann man erst mal vergessen. 
Das Programm ist noch nicht fertig geschrieben. Zeile 60 ist die oben 
stehende Zeile mit dem Atomic-Block.
Hier meine while-Schleife in main:
1
    while(1)
2
    {
3
        //Selectrix-Bus auswerten
4
        ATOMIC_BLOCK(ATOMIC_FORCEON) {sx_kopie_rueckgabewert=sx_rueckgabewert;}
5
        sx_daten=(uint8_t)sx_kopie_rueckgabewert&255;
6
        sx_kopie_rueckgabewert>>=8;
7
        sx_adresse=(uint8_t)sx_kopie_rueckgabewert&255;
8

9

10
    }

Muss ich hier in CodeBlocks noch eine Einstellung vornehmen, und wenn 
ja, wo finde ich diese?

Ich habe bereits folgendes bei den Compilereinstellungen versucht:
"Have gcc follow the 1999 ISO C language standard [-std=c99]"
Allerdings ohne Erfolg.
#5139208
Lesenswert?

R. F. schrieb:
> Zeile 60 ist die oben stehende Zeile mit dem Atomic-Block.

Sicher, daß das die Zeile 60 ist?

> main.c|60|error: ‘for’ loop initial declarations are only allowed in C99
> or C11 mode|

Diese Meldung erscheint, wenn ein Code wie 'for (int i = 0; ...)' in 
einer älteren C-Version compiliert wird. In for(...) ist die 
Typdefinition für die Zählervariable nicht zulässig (es geht aber z.B. 
in C++ oder C99). Die Option "1999 ISO C language standard [-std=c99]" 
kann ich leider nicht ausprobieren, ich habe CodeBlocks 13.12. Ansonsten 
kann ich o.g. Code-Schnipsel compilieren, wenn ich es etwas umbaue und 
fehlende Teile ergänze. LG
#5140039
Lesenswert?

Hallo,

das Problem ist mittlerweile gelöst.

Es war definitiv die Zeile mit dem Atomic. Wenn ich diese Zeile gelöscht 
habe, war die Meldung weg.

Zur Lösung:
Ich musste den Haken wie im Eingangsposting beschrieben setzen.
Allerdings gibt es dieses Fenster 2 mal.

Der 1. Weg ist "Settings -> Compiler". Es öffnet sich das Fenster 
"Global Compiler Settings". Hier hatte ich den Haken gesetzt. Allerdings 
ohne Erfolg.

Der 2. Weg den ich gerade gefunden habe ist "Project -> Build options".
Es öffnet sich das Fenster"Project Build Options". Wenn ich hier den 
Haken setze, dann ist die Fehlermeldung weg.

Vielen Dank an alle für eure Beiträge und eure Mühe.
#5140546
Lesenswert?

Jetzt kompiliert das Ding zwar, aber ich fürchte, die meisten der 
Beteiligten haben lediglich gelernt, wie man in der IDE Compileroptionen 
einstellt.

Ohne Internet und IDE hätte man sich auf den Hosenboden setzen und 
verstehen müssen:

1. wie und warum da plötzlich eine for-Schleife ins Programm kommt
2. warum das zu einem Fehler führt
3. was ATOMIC_BLOCK() macht
4. warum es das so macht, wie es das macht
5. warum das überhaupt da steht

Schöne neue Welt.

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