Forum: Mikrocontroller und Digitale Elektronik Compiler optimizations disabled


von Martin W. (maddin265)


Lesenswert?

Hallo, vorab schonmal ich bin kompletter Neueinsteiger im Gebiet der 
Microcontroller Programmierung, also verzeiht bitte wenn das Problem was 
ich habe ganz simpel zu lösen ist..

Habe bereits in diversen Foren nach gelesen, jedoch bringen die dort 
erklärten Hilfestellungen keine Verbesserung mit sich..

Habe mir aus diversen Programmbeispielen mal ein paar Textzeilen 
herauskopiert um 4 LED´s an PA0, PA1, PD2 und PD3 dauerhaft von meinem 
Attiny2313 einschalten zu lassen.

Nun wollte ich das beim ersten Anlaufen des Programms PA0 und PA1 
angehen, 500ms gewartet wird und dannach PD2 und PD3 angehen, um zu 
testen wie das mit der Zeitverzögerung funktioniert..

hier mein Qq
1
//----------------------------------------------------------------------
2
#define F_CPU 100000UL //
3
#include <avr/io.h> //
4
#include <util/delay.h>
5
6
//----------------------------------------------------------------------
7
main ()
8
{
9
  // Pin 1 von Port A (PA1) als Ausgang schalten
10
  DDRA = (1 << PA0) | (1 << PA1);
11
  DDRD = (1 << PD2) | (1 << PD3);
12
  // Endlosschleife
13
  while (1) 
14
  {
15
16
    {
17
      PORTA |= (1 << PA0)| (1 << PA1); 
18
      _delay_ms(250);        // Warte 250ms           
19
      PORTD |= (1 << PD2)| (1 << PD3);
20
    }
21
  }
22
  return  (0);
23
}
24
//----------------------------------------------------------------------

Habe dazu zusätzlich die util\delay.h eingebunden, jedoch kommt jedes 
mal folgende Fehlermeldung:

Hinweis: Es wird die im Quelltext angegebene Sprache verwendet: C
Hinweis: Es wird die im Quelltext angegebene Einstellung des Prozessors 
verwendet: ATtiny2313
Hinweis: Um den vollen Funktionsumfang von C/C++ nutzen zu können, 
verwenden Sie bitte die Dateiendung '.cc' oder '.cpp'
compilieren ...  In file included  from LED.c:17:

c:/program files 
(x86)/myavrworkpadplus/winavr/lib/gcc/../../avr/include/util/delay.h:90: 
3:  warning: #warning "Compiler optimizations disabled; functions from 
won't work as designed"
linken ... vorbereiten ...
brennen ...
benutze: mySmartUSB Light an com3 mit ATtiny2313
schreibe Flash: 3420 Bytes
schreibe EEPROM: 1 Bytes
»baud=25600
Timeout beim Schreiben des Flash.


Die Compiler optimierung steht im Makefile auf s, also laut diversen 
anderen Foren sollte die Optimierung eingeschaltet sein..

Gruß Martin

: Bearbeitet durch User
von Timmo H. (masterfx)


Lesenswert?

Martin W. schrieb:
> Die Compiler optimierung steht im Makefile auf s, also laut diversen
> anderen Foren sollte die Optimierung eingeschaltet sein..
also hast du im Makefile "-Os"?

von Martin W. (maddin265)


Lesenswert?

Auszug aus dem makefile

# Optimization level, can be [0, 1, 2, 3, s].
#     0 = turn off optimization. s = optimize for size.
#     (Note: 3 is not always the best optimization level. See avr-libc 
FAQ.)
OPT = s

Muss dort -Os drin stehen?

von SeriousSam (Gast)


Lesenswert?

Was ist denn nun das eigentliche Problem? Dass für delay.c die 
Optimierungen deaktiviert sind, ist vermutlich so gewollt, da sonst das 
delay vom compiler wegoptimiert wird. Ich denke das bezieht sich nur auf 
delay.c.

Das das brennen nicht funktioniert, hat eine andere Ursache. Dein 
Programm compiliert und linkt, ist also syntaktisch korrekt.

von holger (Gast)


Lesenswert?

>OPT = s
>
>Muss dort -Os drin stehen?

Nein, das ist richtig so. Das wird dann weiter unten zu -Os
zusammengebaut.

von Timmo H. (masterfx)


Lesenswert?

holger schrieb:
>>OPT = s
>>
>>Muss dort -Os drin stehen?
>
> Nein, das ist richtig so. Das wird dann weiter unten zu -Os
> zusammengebaut.

Aber auch "weiter unten" noch steht "CFLAGS += -O$(OPT)"
Aber das Makefile haben wir bisher ja nicht gesehen.

von Martin W. (maddin265)


Lesenswert?

Das Problem ist, wenn ich die Programmzeilen #include <util/delay.h> und 
delay_500ms rausnehme, wird das Programm einwandfrei gebrannt und die 
LED´s leuchten...
Dann kann nach meiner Ansicht nach ja nur entweder der Qq mit dem delay 
nicht stimmen, oder die Optimierung einen Fehler haben welche auch die 
Fehlermeldung bringt..
Ist es dann ein Programmfehler das man dies garnicht so schreiben kann?

von holger (Gast)


Lesenswert?

>Aber auch "weiter unten" noch steht "CFLAGS += -O$(OPT)"
>Aber das Makefile haben wir bisher ja nicht gesehen.

Das ist natürlich richtig. Die Vermutung liegt nahe das das
makefile nicht vollständig ist.

von Martin W. (maddin265)


Lesenswert?

Am Makefile habe ich so nichts geändert, habe mal die Optionen 
herauskopiert, glaube die meintest du mit CFLAGS

#---------------- Compiler Options C ----------------
#  -g*:          generate debugging information
#  -O*:          optimization level
#  -f...:        tuning, see GCC manual and avr-libc documentation
#  -Wall...:     warning level
#  -Wa,...:      tell GCC to pass this to the assembler.
#    -adhlns...: create assembler listing
CFLAGS = -g$(DEBUG)
CFLAGS += $(CDEFS)
CFLAGS += -O$(OPT)
CFLAGS += -funsigned-char
CFLAGS += -funsigned-bitfields
CFLAGS += -fpack-struct
CFLAGS += -fshort-enums
CFLAGS += -Wall
CFLAGS += -Wstrict-prototypes
#CFLAGS += -mshort-calls
#CFLAGS += -fno-unit-at-a-time
#CFLAGS += -Wundef
#CFLAGS += -Wunreachable-code
#CFLAGS += -Wsign-compare
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
CFLAGS += $(CSTANDARD)


Ich versuche mal ein anderes Makefile zu bekommen und dieses 
auszutauschen

von Timmo H. (masterfx)


Lesenswert?

Oder hast du ihm irgendwie gesagt, C++ zu verwenden (siehe Hinweise)? 
Dann wird IMHO "CPPFLAGS += -O$(OPT)" verwendet und wenn das raus 
ist...?!

von holger (Gast)


Lesenswert?

>Am Makefile habe ich so nichts geändert, habe mal die Optionen
>herauskopiert, glaube die meintest du mit CFLAGS

Mein Gott zeig das ganze Teil;)

Wird das makefile überhaupt benutzt?

von Martin W. (maddin265)


Angehängte Dateien:

Lesenswert?

habe das Makefile angehängt.. Also als Sprache steht oben im Header C 
drin, habe auch einfach mal ausprobiert die Endung in CC bzw in CPP zu 
ändern, der Fehler bleibt aber trotzdem...
Wo sehe ich ob das Makefile benutzt wird?

von Onkel Tom (Gast)


Lesenswert?

SeriousSam schrieb:
> Dass für delay.c die
> Optimierungen deaktiviert sind, ist vermutlich so gewollt, da sonst das
> delay vom compiler wegoptimiert wird.

Weist du's oder rätst du?

Was ist an der Warnung "Compiler optimizations disabled; functions from 
<util/delay.h> won't work as designed" mißverständlich?

Ohne Optimierung macht delay.c Mist - so einfach ist das.

von Timmo H. (masterfx)


Lesenswert?

Martin W. schrieb:
> habe das Makefile angehängt.. Also als Sprache steht oben im Header C
> drin, habe auch einfach mal ausprobiert die Endung in CC bzw in CPP zu
> ändern, der Fehler bleibt aber trotzdem...
> Wo sehe ich ob das Makefile benutzt wird?
Nunja, dass das nicht funzt ist klar:
1
CFLAGS += -Os(OPT)

von Martin W. (maddin265)


Lesenswert?

Sorry das war mein Fehler, das s wird durch ein $ ersetzt, war nur ein 
Makefile mit dem ich mal was ausprobiert habe ob der Fehler so weg geht, 
also es steht im richtigen Makefile CFLAGS += -O$(OPT) drin..

von Martin W. (maddin265)


Angehängte Dateien:

Lesenswert?

So ist es im Ordner drin.. und bringt trotzdem den Fehler...

von Timmo H. (masterfx)


Lesenswert?

Was soll diese wpo Endung überhaupt? Make erwartet doch einfach nur ein 
"makefile" ohne wpo.

von Martin W. (maddin265)


Lesenswert?

Habe jetzt den Makefile aus dem Sample Ordner kopiert.. Im mfile Ordner 
gibt es noch einen Makefile_template ohne Endung welcher komplett 
identisch mit dem wbo ist.

Oder bin ich am falschen Makefile?

Dies waren die beiden einzigen, bei denen man die Optimierung über 
dieses s ändern konnte..

von holger (Gast)


Lesenswert?

>Oder bin ich am falschen Makefile?

Kann es sein das du SySi und Workpad benutzt?
Dann solltest du evtl. besser nicht im makefile rumhacken.
Ich denke mal dann du musst die Optimierung in deiner IDE einstellen.

von Martin W. (Gast)


Lesenswert?

Ja mit Workpad arbeite ich, habe gerade nochmal komplett meine 
Sicherheitskopie die ich gemacht habe neu reinkopiert, also alles auf 0 
zurück gesetzt..

Compiler Optimierung steht auf s und der Fehler ist immernoch der 
gleiche, also am geänderten Makefile liegts wohl nicht...

Wie kann ich die Optimierung denn über IDE ändern?

von Martin W. (maddin265)


Lesenswert?

Hat keine sonst eine Idee?
Wie stelle ich die Optimierung in der IDE ein?

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.