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
Kannst du mal den Code bei dem diese Fehler mit den endlichen Schleifen auftreten posten?
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 :)
Warum mit sei() Interrupts erlauben, wenn's im ganzen Code keine gibt ?
Hab schon weiterprogrammiert, dann wieder einen Teil gelöscht und das sei() vergessen, bzw brauche ich es später sowieso noch
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.
>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
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.