www.mikrocontroller.net

Forum: Compiler & IDEs WinAVR Hexfiles corrupt?


Autor: Mictlan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!
Ich hab vor ein paar Tagen meine alte Platine mit einem ATMEGA32 
rausgekramt, um damit ein paar Sachen auszuprobieren. Ich hatte noch 
alte Projekte gefunden, die ich mit PonyProg 2000 rübergeschoben habe. 
Hat alles wunderbar funktioniert. Jetzt hab ich WinAVR 20080512 und 
AVRDUDE 5.5 installiert und wollte mit dem Programmers Notepad nur ein 
paar LEDs zum Blinken bringen, um die Funktion zu testen. 'Make clean', 
'make all', und 'Program' läuft fehlerfrei durch, nur das Programm will 
nicht (alle LEDs gehen einmal an und nie wieder aus).
OK also hab ich mir ein altes Programm geschnappt und per Ponyprog 
rübergeschoben: geht. Kompiliere ich es dann einmal mit WinAVR, gehts 
nicht mehr, auch nicht mehr mit Ponyprog.
Ich nutze Windows XP und programmiere mit einem stk200 kompatiblen 
Programmer über den lpt1-Port. Der ATMEGA läuft auf internem 8 MHz Takt, 
die LEDs hängen an PORTB 2,3,4und sind so verschaltet, dass sie 
leuchten, wenn der Port low ist.
Gibt es da vllt. noch Einstellungen unter WinAVR, die man vorher machen 
muss?
Hier mal das Programm (Dateiname "bare.c"):

#include <avr/io.h>

void init(void);

int main(void)
{
    int j, k ;
  init();
  PORTB = 0x00 ;
  while (1)
  {
           for(j=0;j<10000;j++)
        for(k=0;k<1000;k++) ;
     PORTB = 0xff ;
           for(j=0;j<10000;j++)
        for(k=0;k<1000;k++) ;
     PORTB = 0x00 ;
  }
  return 0;
}
void init(void)
{
  DDRB = 0xff;  // PortB als Ausgang deklarieren
  PORTB = 0xff;  // Ports auf LOW schalten
}

Ich wäre sehr dankbar für Ratschläge.

MfG Mictlan

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin mal GCC und optimiere Dein Programm, von main() bleibt
int main (void)
{
  init();
  PORTB = 0x00;
  while (1)
  {
     PORTB = 0xff;
     PORTB = 0x00;
  }
}

Die LEDs gehen also sehr schnell an und aus, sieht aus wie ein 
durchgehendes Leuchten.

Autor: Mictlan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Georg,
Du hast vollkommen recht, nach der Optimierung bleibt von dem Blinken 
nicht mehr viel übrig... Dank Dir für die schnelle Antwort. Aber seit 
wann optimiert GCC denn schon so? Als ich die Programme geschrieben hab 
(gut ok ist auch schon anderthalb Jahre her) hats ja noch funktioniert.

MFG Mictlan

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damals hat's funktioniert, war aber schon inkorrekt.

Seit Version 4 ist GCC nochmal was aggressiver beim Optimieren, weil 
durch die interne SSA-Darstellung einige neue Optimierungsalgorithmen 
anwendbar sind.

Zudem war früher mal in GCC eingebaut, daß leere Schleifen nicht 
wegoptimiert werden, weil davon ausgegangen wurde, daß der einzige 
Grund, warum ein Programm solche Schleifen enthält, ist, daß der 
Programmierer damit eine Warteschleife im Sinn hatte. Irgendwann ist das 
rausgeflogen.

Warten kann man mit Timern oder dem Zeug in avr/delay.h.

Autor: Mictlan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Japp ich hab mal die delay Funktion genommen, funktioniert einwandfrei. 
Dank Dir nochmal für den Gedankenanstoß, da saß das Computerproblem ja 
wie so oft mal wieder vor dem Monitor... ;D

Gruß Mictlan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.