mikrocontroller.net

Forum: Compiler & IDEs Merkwürdiges Verhalten von WinAVR


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

Bewertung
0 lesenswert
nicht lesenswert
Ich arbeite mit WinAVR und AVRStudio, jeweils die aktuellste Version.
Bin auf folgendes Problem gestossen. Es geht bei folgender Routine um
die while-Schleife. Die Routine wird von WinAVR ohne zu meckern
compiliert.
Sehe ich mir die while-Schleife im AVRStudio im Disassembler-Fenster an

ist die Reihenfolge der darin enthaltenen Befehle umgekehrt, was für
das
Programm ziemlich fatal ist. Benutze ich stattdessen eine
do-while-Schleife
ist alles in Ordnung. Wer kann sich (und mir) dieses Verhalten
erklären?
void add_PAT_entry(volatile uint8_t *name,volatile uint8_t *data)
{
   volatile uint8_t *pEntry;
   volatile uint16_t *pFirstBlock;
   
   
   pEntry=upictureAllocationTable.pictureAllocationTable.PAT;
  
pFirstBlock=(uint16_t*)upictureAllocationTable.pictureAllocationTable.FreeBlock;
   
   while(*name)
   {
  *pEntry++=*name;
    eeprom_schreiben((uint16_t)pFirstBlock++,*name++);
   };
   
  
upictureAllocationTable.pictureAllocationTable.FreeBlock=(uint16_t)pFirstBlock;

}

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Listing paßt nicht zum Quelltext, daher kann man nichts dazu
sagen.

Schau Dir lieber das Assemblerlisting mit eingefügten Quelltext des GCC
an.

Auch wenn der Compiler umoptimiert, er hatte bei mir bisher immer
recht.


Peter

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Sehe ich mir die while-Schleife im AVRStudio im Disassembler-
> Fenster an ist die Reihenfolge der darin enthaltenen Befehle
> umgekehrt

Das heist nicht viel.
Der Compiler hat da einiges umgestellt, sodass keine exakte
1:1 Zurdnung zum originalen Quelltext nicht mehr möglich
ist. Beim kurzen Überfliegen des Assembler sieht aber alles
in Ordnung aus. Der CALL (eeprom_write) findet ganz zum
Schluss der Schleife statt.

Wenn also Dein Pgm nicht funktioniert, dann liegt es nicht
am Compiler sondern (so wie in 99.9% aller Fälle) am
Programmierer.

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.