Forum: Mikrocontroller und Digitale Elektronik Debugging in AtmelStudio 6.1


von Werner13 (Gast)


Lesenswert?

Hallo,

hab mal ein Frage zum Debuggen in Atmel Studio 6.1:

habe folgenden code:
1
Funktion x1
2
Funktion y1
3
4
while(1)
5
{}
6
7
Funktion x2
8
Funktion y2

nachdem die Funktionen 1 abgearbeitet sind, will ich mindestens 3s 
warten, danach die Funktionen 2 ausführen. Ich dachte, ich mach einfach 
eine endlosschleife, warte dann die gewünschte Zeit im Debug Modus, 
drück dann auf Pause. Dann steh das Programm bei der While(1). kann ich 
dann da irgednwie drüber hüpfen, sodass danach die beiden Funktionen 2 
ausgeführt werden?

Danke, lG

von Werner13 (Gast)


Lesenswert?

Kennt hier keiner eine Möglichkeit, wie man das machen kann?

von Ingo (Gast)


Lesenswert?

Warum machst du nicht einfach ein _delay_ms(3000)? Zu einfach?

von Werner13 (Gast)


Lesenswert?

Das hab ich mir auch schon gedacht... aber komischerweise kennt mein 
Compiler diese Funktion nicht. Was muss ich inkludieren?

Weiters dachte ich, dass dieses delay alles andere blockiert. Ist das 
so, oder werden Interrupts während diesen delays trotzdem ausgeführt?

Vielen Dank, lG

von Werner13 (Gast)


Lesenswert?

Weiß jemand, ob diese _delay_ms(3000) Funktion wirklich 3s lang alles 
verzögert (also auch Interrupts während diesen 3s verhindert)? Oder 
basiert dieses delay auch auf Interrupts, sodass andere Prozesse 
parallel ablaufen können?

LG

von Peter II (Gast)


Lesenswert?

warum setzt du nicht einfach einen Breakpoint?

von Werner13 (Gast)


Lesenswert?

Weil während des breakpoints der Timer nicht weiterläuft...
Es soll eine 3s verzögerung zwischen den Funktionen 1 und 2 geben, aber 
der Timer muss in diesen 3s weiterlaufen...

von Werner13 (Gast)


Lesenswert?

Hmm, mich wundert es, dass keiner über diese _delay_ms() funktion 
bescheid weiß...

von Cyblord -. (cyblord)


Lesenswert?

Werner13 schrieb:
> Hmm, mich wundert es, dass keiner über diese _delay_ms() funktion
> bescheid weiß...

Mich wundert eher dass du dich nicht selber schlau machen kannst. Die 
ist in der Doku zur avr-libc beschrieben. Da steht auch, wo du die 
findest. Nämlich im delay.h Header.

Dir antwortet niemand weil niemand so richtig dein Problem 
nachvollziehne kann. Die _delay_ms Funktionen werden ständig und von 
allen benutzt.

Und natürlich macht die auch nur einen busy-loop. D.h. Interuppts gehen 
weiterhin. Wenn du das nicht willst, I-Bit abschalten.

Und ich würde an deiner Stelle nicht so viel Zeit und Energie in den 
Debugger stecken. Der verwirrt Anfänger meist mehr als er hilft.

: Bearbeitet durch User
von Oliver (Gast)


Lesenswert?

Werner13 schrieb:
> Hmm, mich wundert es, dass keiner über diese _delay_ms() funktion
> bescheid weiß...

Sei mit nicht böse, aber aus deinem Geschreibsel wird niemand schlau. 
Selbstverständlich kennt das Studio _delay_ms(). Genauer gesagt, die 
avrlibc enthält das. Wie man das nutzt, steht in der Doku, im Tutorial, 
und noch an tausenden weiteren Orten im Netz, die google alle findet.

Vorher aber brauchst du ein C-Buch. Dringend.

Was hat eine 3 Sekunden Pause im Programmablauf mit dem Debugger und den 
AVR-Studio zu tun?  Was benutzt du überhaupt als Target? Den Simulator, 
oder echte Hardware?
Wie bekommt jemand, der solche Fragen stellt überhaupt einen Timer ans 
laufen?

Was willst du wirklich machen?

Oliver

von Werner13 (Gast)


Lesenswert?

#include <delay.h>

Die Funktion _delay_ms(3000) wird trotzdem nicht erkannt, der Compiler 
gibt eine Fehlermneldung aus:

impicite declaration of function '_delay_ms'

Auch dann, wenn ich #include "delay.h" schreibe.

Warum?

von Cyblord -. (cyblord)


Lesenswert?

Ach komm schon!
Kostet bei dir google was pro Suchanfrage? Google doch mal danach. Oder 
schau hier ins Tutorial. Wofür gibt das?
Dann siehst du dass delay.h in <util/delay.h> zu finden ist.

von Werner13 (Gast)


Lesenswert?

Sorry... Der Fehler war, dass die Funktion ohne _ definiert ist, also 
delay_ms().

Danke

von Hilfe (Gast)


Lesenswert?

Werner13 schrieb:
> Auch dann, wenn ich #include "delay.h" schreibe.

Darum?
#include <util/delay.h>

von Martin K. (dschadu)


Lesenswert?

Und nicht vergessen die Optimierung einzuschalten und die richtige F_CPU 
anzugeben.

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.