Forum: Mikrocontroller und Digitale Elektronik Atmega128 Debuggen/Simulieren


von Markus S. (jjmax)


Lesenswert?

Hallo!

Ich bin gerade am Verzweifeln. Ich möchte ein kurzes Programm für einen 
ATMega128 debuggen. Hab es mit AVR Studio probiert. Ich starte den 
Debugger, klicke auf Step Into und will so das Programm testen. Bis zur 
Endlosschleife funktioniert das auch, aber sobald ich bei einer Schleife 
bin (auch bei endlichen) springt er einfach an den Beginn vom main. Hab 
schon alles probiert, aber ich finde nicht heraus warum das so ist.

Dann hab ich es mit VMLab probiert. Hier kommt andauernd der Fehler 
"Error! Unable to run compiler". WinAVR ist installiert. Auch der Pfad 
in den "Code Maker"- Einstellungen ist richtig eingestellt.

Hat wer eine gute Lösung wie ich einfache Programme für den ATMega 
testen kann? Ideal wäre noch eine möglichkeit ein Diagramm zu erzeugen, 
das die Ausgangspegel über der Zeit anzeigt.

Danke im Voraus,
Lg,
Max

von Gast (Gast)


Lesenswert?

Kannst du mal den Code bei dem diese Fehler mit den endlichen Schleifen 
auftreten posten?

von Markus S. (jjmax)


Lesenswert?

Natürlich, sry

1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
#include <stdio.h>
4
5
6
int main(void)
7
{
8
  int x = 0;
9
  int y = 0;
10
11
  PORTB = 0x00;
12
  DDRB = 0xC0;  
13
  TCCR1A = 0x23;  
14
  TCCR1B = 0x19;
15
  
16
  OCR1BH = 0xFF;
17
  OCR1BL = 0xFF;
18
  
19
  ICR1H = 0x00;
20
  ICR1L = 0xFF;
21
  
22
  sei();
23
  
24
  for (x = 0; x < 10; x ++)
25
  {
26
    y += x;
27
  }
28
29
  while(1);
30
}

Die for- Schleife ist nur da um zu sehen ob er in eine normale Schleife 
reingeht oder nicht. sobald ich bei sei(); bin und auf Step Into klicke 
beginnt er wieder beim main und manchmal auch irgendwo im Programm 
oberhalb der Schleife. Ich hab leider schon lang (ca. 4 Jahre) nichts 
mehr mit µC gemacht und bin schon ein bisschen eingerostet :)

von MWS (Gast)


Lesenswert?

Warum mit sei() Interrupts erlauben, wenn's im ganzen Code keine gibt ?

von Markus S. (jjmax)


Lesenswert?

Hab schon weiterprogrammiert, dann wieder einen Teil gelöscht und das 
sei() vergessen, bzw brauche ich es später sowieso noch

von Thomas K. (muetze1)


Lesenswert?

Sicher das die letzte while(1) nicht rausoptimiert wird und er somit 
main() beendet und das führt meistens zu einem reset. Und damit bist du 
wieder am Anfang...

Alternativ auch irgend einanderer INT der auslöst und keinen Handler 
hat.

von Oliver (Gast)


Lesenswert?

>und er somit main() beendet und das führt meistens zu einem reset.

Nein. tut es nicht. Der gcc bzw. die avrlibc hängen immer noch eine 
eigene Endlosschleife ans Programmende.

Das Problem wird ein Interrupt ohne ISR sein. Ich habe jetzt keine Lust, 
die die Bits der Timerinitialisierungen auseinanderzubasteln, aber nimm 
das sei() raus, und schau, was passiert.

Oliver

von Markus S. (jjmax)


Lesenswert?

Oliver schrieb:
>>und er somit main() beendet und das führt meistens zu einem reset.
>
> Nein. tut es nicht. Der gcc bzw. die avrlibc hängen immer noch eine
> eigene Endlosschleife ans Programmende.
>
> Das Problem wird ein Interrupt ohne ISR sein. Ich habe jetzt keine Lust,
> die die Bits der Timerinitialisierungen auseinanderzubasteln, aber nimm
> das sei() raus, und schau, was passiert.
>
> Oliver

Jap, jetzt geht das debuggen :) Wie gesagt, hab lange nichts mit µCs 
gemacht :) Kann AVR Studio PWM simulieren, wenn ich vom PORTB ein 
log-File erzeugen lasse? Weil irgendwie kommt nichts raus. Ich will 
jetzt nicht dass mir irgendwer das Programm verbessert, sondern nur 
wissen ob es geht, damit ich nicht umsonst noch mal das Datenblatt lesen 
muss...

von Peter D. (peda)


Lesenswert?

M103 Fuse.


Peter

von Markus S. (jjmax)


Lesenswert?

Ich hab M103 Fuse angehagt, aber es tut sich nicht viel.

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.