Forum: Mikrocontroller und Digitale Elektronik Welcher compiler wird verwendet?


von Marc (Gast)


Lesenswert?

Guten morgen,
ich habe einen Code und wollte jetzt ein paar Warnings entfernen.
1
for(i=0; i<59; i++)
2
{
3
    seconds[i] = {0};
4
    minutes[i] = {0};
5
    hours[i] = {0};
6
}

hier sagt er mir zu jeder initialisierung
warning: extended initializer lists only available with -std=c++11 or 
-std=gnu++11

wo kann ich denn nachgucken, welchen compuler ich verwende? Ich benutze 
Atmel-Studio 7

von TestX (Gast)


Lesenswert?

Avr-gcc

Einfach in den Einstellungen die anhezeigten flags setzen..dann klappt 
deine initialisierung mit {0}

von nur mal so (Gast)


Lesenswert?

Was sind denn seconds, minutes und hours fuer Datentypen?

von Bernd (Gast)


Lesenswert?

Zwei Hinweise von mir:

Falls es sich um Integer Arrays handelt, kannst du die Initialisierung 
einfach mit = 0 machen. Dann ist die Warnung auch weg.

Bist du sicher, dass das hours Array 60 Einträge hat? Falls nicht, wir 
ein anderer Speicherbereich überschrieben.

von Marc (Gast)


Lesenswert?

Da ich die LEDs in rgb ansteuern kann, ist es in einem struct gepact.
1
    WS2818::cRGB seconds[60];
2
    WS2818::cRGB minutes[60];
3
    WS2818::cRGB hours[60];
4
5
    struct cRGB
6
    {
7
        uint8_t g;
8
        uint8_t r;
9
        uint8_t b;
10
    };

Später im Code schreibe ich alle übereinander zu einemn Array, den ich 
dann auf dem Stripe schicke. (Dadurch sollten dann wenn minuten und 
sekunden gleich sind eine neue Farbe ergeben).
1
for(i=0; i<60; i++)
2
{
3
  timerArray[i].r = seconds[i].r + minutes[i].r + hours[i].r;
4
  timerArray[i].g = seconds[i].g + minutes[i].g + hours[i].g;
5
  timerArray[i].b = seconds[i].b + minutes[i].b + hours[i].b;
6
}

von Yalu X. (yalu) (Moderator)


Lesenswert?

Marc schrieb:
> WS2818::cRGB seconds[60];

Marc schrieb:
> for(i=0; i<59; i++)
> {
>     seconds[i] = {0};
>     minutes[i] = {0};
>     hours[i] = {0};
> }

Ist es Absicht, dass von den 60 Array-Elementen nur die ersten 59 auf 0
gesetzt werden?

Statt

1
  seconds[i] = {0};

könntest du auch schreiben:

1
  seconds[i].r = 0;
2
  seconds[i].g = 0;
3
  seconds[i].b = 0;

Aber vielleicht verwendet der Code noch weitere C++11-Features. Deswegen
ist es besser, einfach wie vom Compiler vorgeschlagen die Option
-std=c++11 einzustellen.

von Marc (Gast)


Lesenswert?

Yalu X. schrieb:
> Ist es Absicht, dass von den 60 Array-Elementen nur die ersten 59 auf 0
> gesetzt werden?

Nein, ist natürlich jetzt auf <=59 gesetzt worden.

Yalu X. schrieb:
> Aber vielleicht verwendet der Code noch weitere C++11-Features. Deswegen
> ist es besser, einfach wie vom Compiler vorgeschlagen die Option
> -std=c++11 einzustellen.

Das werde ich wohl machen
Wo kann man das denn einstellen?

von Frickelfritze (Gast)


Lesenswert?

Marc schrieb:
> WS2818::cRGB hours[60];

Is aba irgendwie doof wenn ein Tag 2.50 Tage lang ist.

von Marc (Gast)


Lesenswert?

Frickelfritze schrieb:
> Is aba irgendwie doof wenn ein Tag 2.50 Tage lang ist.

Wieso? Ich lasse einen Timer laufen.
Alle 60 Sekunden werden die Minuten um eins erhöht.
Alle 60 Minuten werden die Stunden um eins erhöht.
Die Stunden werden dann für die LED's mit fünf multipliziert. Damit 
steuere ich dann die LED der stunde an und setze alle anderen auf null

von Stefan F. (Gast)


Lesenswert?

> -std=c++11
> Wo kann man das denn einstellen?

Das ist eine Kommandozeilenoption für den Aufruf des gcc. Im Atmel 
Studio wirst du ein entsprechendes Engabefeld sicher irgendwo in den 
Projekteinstellungen finden. Oder im Makefile, falls du eins verwendest.

von Roland F. (rhf)


Lesenswert?

Hallo,

>> -std=c++11
>> Wo kann man das denn einstellen?
>
> Das ist eine Kommandozeilenoption für den Aufruf des gcc. Im Atmel
> Studio wirst du ein entsprechendes Engabefeld sicher irgendwo in den
> Projekteinstellungen finden. Oder im Makefile, falls du eins verwendest.

in AtmelStudio das Projekt laden, dann im Menue
Projekt -> <Projekt> Properties... -> Toolchain -> AVR/GNU C Compiler -> 
Miscellaneous -> Other flags:

rhf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.