Compiler optimizations disabled

OP #3370773
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
Gast #3370795
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.
OP #3370805
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?
Gast #3370808
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.
OP #3370821
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
Gast #3370837
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.
OP #3370867
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..
Gast #3370972
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.
Gast #3371102
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?

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