Problem mit CodeBlocks und util/atomic

OP #5139092
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
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
#5139296
Rainer V. schrieb:
> Die Option "1999 ISO C language standard [-std=c99]"
> kann ich leider nicht ausprobieren, ich habe CodeBlocks 13.12.

Wenn die IDE dem Compiler und Linker keine Optionen übergeben kann, ist 
sie Schrott.
Ich kenne allerdings keine IDE, die das nicht kann.
Notfalls läßt man die IDE ein selbstgeschriebenes make ausführen.
Gast #5140038
R. F. schrieb:
> Muss ich hier in CodeBlocks noch eine Einstellung vornehmen

In den Compiler Settings kannst Du unter "Other settings" das Logging 
der kompletten Toolchain-Aufrufe aktivieren und sie mit denen von Atmel 
Studio vergleichen.
OP #5140039
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.