Forum: Mikrocontroller und Digitale Elektronik Anfängerfehler


von Fabian (Gast)


Lesenswert?

Hallo,

dieses ist wahrscheinlich die simpelste Frage überhaupt, aber ich bin 
komplett am verzweifeln.



Habe folgenden code geschrieben bzw. zusammengesucht´:
1
#include <avr/io.h>          // (1)
2
 
3
int main (void) {            // (2)
4
 
5
   DDRB  = 0xff;             // (3)
6
   PORTB = 0x03;             // (4)
7
 
8
   while(1) {                // (5a)
9
     /* "leere" Schleife*/;  // (5b)
10
   PORTB = 0x02;
11
   PORTB = 0x04;
12
   }                         // (5c)
13
 
14
   /* wird nie erreicht */
15
   return 0;                 // (6)
16
}

Warum??? bleibt AVR Studio 4 bei jedem Debuggen bei PORTB = 0x04; 
stehen?

da is doch nichts falsch!

Ausgabe an PORTB müsste doch zwischen 0x02 und 0x04 wechseln oder?

Habe ich etwas falsch eingestellt? Habe neu Compiliert neu geladen,...

Danke für alle Antworten

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Das Programm hat keinen Fehler. Vielleicht verstehst du nicht, was der 
Debugger macht; ich verstehe jedenfalls nicht was du im Debugger machst 
und was du mit "bleibt stehen" meinst. Ist es der Simulator/Debugger in 
AVR Studio oder ein externer per Hardware an einen AVR angeschlossener 
Debugger? Wie bedienst du den Debugger, d.h. hast du Breakpoints gesetzt 
oder machst du Einzelschrittmodus oder Auto-Stepping? Richtiger µC im 
Simulator/Debugger eingestellt?

von Fabian (Gast)


Lesenswert?

Danke für die schnelle Antwort

Also ich mache das folgendermassen:

Ich habe den ATmega8 im AVR - Studio eingestellt.

Dann ´klicke ich auf "Build and Run".
Daruf erscheint ein gelber Pfeil vor der main.
Jetzt betätige ich den Butten "Einzelschritt".

Doch sobald ich in die While - Schleife komme springt der gelbe Pfeil 
unkontulliert hin und her.

... Also ich weiss wie so ne schleife funktionieren sollte.

Aber irgendwas scheine ich falsch zu machen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Doch sobald ich in die While - Schleife komme springt der gelbe Pfeil
> unkontulliert hin und her.

Was macht der?

von Fabian (Gast)


Lesenswert?

Also entweder bleibt der Pfeil bei PORTB = 0x04 stehen
oder das Programm startet einfach.

Aber der gelbe Pfeil springt nicht wieder auf PORTB = 0x03 zurück.

Das unkontrullierte hin und her springen habe ich einmal erzeugt als ich 
nnoch mehr solcher Zuweisungen in die While eingefügt habe

von Marcus (Gast)


Lesenswert?

Also wenn du willst, das was blinkt, brauchst du warscheinlich ein Delay 
zwischen den beiden Portänderungen, sonst geht das nämlich so schnell, 
dass du es nicht beobachten kannst.

Schreib am besten was du dir von dem Programm erwartest, dann kann man 
besser helfen.

Grüße Marcus

von !!! (Gast)


Lesenswert?

Hab das ausprobiert, und es funktioniert einwandfrei mit F11.

von Fabian (Gast)


Lesenswert?

Also ...

das is ja ma interressant:

habe das jetzt so gemacht:
1
include <avr/io.h>          
2
 
3
int main (void) {           
4
 
5
   DDRB  = 0xff;             
6
   PORTB = 0x03;             
7
8
9
int i;
10
 
11
 while(1)
12
 {
13
14
PORTB = 0x03;             
15
 
16
for(i=0;i<1000;i++);
17
18
PORTB = 0x00;   
19
for(i=0;i<1000;i++);
20
21
 }
22
   
23
   return 0;                
24
}

jetzt geht es.


ABER? Warum muss ich beim Debuggen eine solche Warteschleife einfügen 
das muss in den AVR Simulator doch auch anders funktionieren.

Also so wie ich es ganz oben geschrieben habe.

Da ich mir das Programm im Einzelschritt anschaue ist die Zeit doch 
nicht interressant oder?

von Fabian (Gast)


Lesenswert?

Autor: !!!

danke für den Test aber was machst du anders wie ich?

von !!! (Gast)


Lesenswert?

Nichts, Build and Run, und dann Einzelschritt mit F11.

Das war's.

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.