_delay_ms im Simulator

OP #2029049
Lesenswert?
• ▲
▼
Hallo,

beim Debuggen eines C-Programms im AVRStudio bleibt der 
Einzelschrittmodus bei _delay_ms() Aufrufen hängen. In anderen Beiträgen 
hier im Forum habe ich bereits über die Grenzen des Debuggens im 
Zusammenhang mit der delay Funktion gelesen. Mir ist aber nicht klar, ob 
ich in diesem Zusammenhang nicht doch noch einen individuellen Fehler 
begehe.

Als Beispiel genügt ein einfaches Blinkprogramm (compiliert ohne 
Optimierung):
1
#include <avr/io.h>          
2
#define F_CPU 1000000UL     // 1 MHz
3
#include <util/delay.h>
4

5
int main(void)
6
{
7
  DDRD  = 0xff;           // PORTD ist Ausgang
8
  DDRA  = 0xff;      // PORTA ist Ausgang
9
  PORTD = 0xff;           // PORTD alle LEDs an
10

11
  while (1)       // Hauptprogrammschleife
12
  {
13
    PORTA ^= 0xff;    // umschalten PORTA
14
    _delay_ms(100);    // 100ms warten
15
    PORTD ^= 0xff;    // umschalten PORTD
16
  }
17
}

Beim Debuggen im Einzelschrittmodus (Step over) läuft der gelbe Pfeil 
problemlos bis "PORTA ^= 0xff;". Beim Klicken auf den nächsten Step 
verschwindet der gelbe Pfeil und es bleibt der Curser auf der Code Zeile 
PORTA ^= 0xff; stehen. Dieser Zustand ändert sich nicht bei fünf 
weiteren Steps! Beim siebten Klick erscheint der gelbe Pfeil wieder und 
zwar in der Zeile nach dem delay.

Die Frage nochmals, ist das beschriebene Verhalten des Simulators 
"normal", oder begehe ich beim Bedienen bzw. Einstellen des Debuggers 
einen Fehler.


danke vorab
Reiner
OP #2029098
Lesenswert?
• ▲
▼
Danke für den Hinweis mit der Compiler Optimierung bei delay.
Mein Verständnis war bisher, dass eine Compilieren ohne Optimierung nur 
dazu führt, dass man sich auf die Delay Zeit nicht verlassen kann. Aber 
erklärt das auch das Verhalten des Simulators?
Dazu kommt, dass nach einer Optimierung das Schrittweise Debuggen 
insgesamt nicht mehr vernünftig funktioniert.

Habe eben mal mit -Os compiliert. Jetzt bleibt der gelbe Pfeil nur für 2 
Steps verschwunden.

Gibt es denn keine Chance, dass der Simulator vernünftig mit dem delay 
Aufruf umgeht?

Gruß
Reiner
#2029348
Lesenswert?
• ▲
▼
Nein.
Mit dem was der Compiler aus dem _delay_ms macht, kommt der Debugger 
nicht vernünftig klar. Egal wie du es compilierst.

Das hängt auch damit zusammen, dass der _delay_ms kein echter 
Funktionsaufruf ist, sondern ein Makro, welches in mehrer C-Anweisungen 
übersetzt wird.

Am einfachsten ist es, in die Zeile nach dem _delay_ms einen Breakpoint 
zu setzen (F9) und den Simulator mittel Run (F5) da drüber laufen zu 
lassen.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.