Hallo Forum
ich werde wahnsinnig. Ich habe das AVRsudio 5 installiert und komme
nicht weiter.
- Es werden keine Funktionen mehr aufgerufen
- Interrupt scheint nicht zu funktionieren
- Breakpoints interessieren nicht und führen nicht zu einer
Unterbrechung
Ich probiere jetzt schon seit Tagen und komme nicht weiter. Da ich in
keinem Forum irgendwelche Probleme bzw. deren Lösungen finde, vermute
ich, dass ich zu blöd bin und den Wald vor lauter Bäumen nicht sehe.
ich habe folgenden Code, mittlerweile minimalisiert, da ich gar nicht
voran komme:
Zur Erklärung:
PortB habe ich als Ausgang definiert und auf die LEDs von meinem STK600
gelegt. mittlerweile dient mir PORTB zum Debuggen, da es anders nicht zu
gehen scheint.
wenn ich den timer als funktion aufrufe (timer_init();) bleibt er bei
PORTB = ~0xfa; hängen. Wenn ich die funktion auskommentiere und den
Inhalt der Funktion ins programm schreibe (wie oben) ist mein programm
in der Hauptschleife. Aber an yy ändert sich nichts.
hat jemand einen tipp für mich?
Hallo,
dass du Schwierigkeiten hast wundert mich nicht, denn das was du vor
hast funktioiert so nicht!
Lies noch einmal das Datenblatt durch und schau genau wie der Timer
wirklich funktioniert.
Deine ISR werden genau einmal aufgerufen und dann STOP und warum steht
im Datenblatt.
das ist alles nicht die antwort auf meine frage.
warum werden keine funktionen ausgeführt (timer_init();), aber der
gleiche inhalt in der main läuft problemlos?
Ich sehe nirgendwo einen Aufruf von timer_init. Poste doch mal den Code
welcher nicht das tut was du willst. Wie soll man denn sonst sagen warum
die Funktion nicht aufgerufen wird. Ausserdem die Frage, woher weißt du
das sie nicht aufgerufen wird? Verlässt du dich da auf den Simulator?
Hast du dafür die Optimierung ausgeschaltet?
Der Simulator macht einfach manchmal mist. Sowas muss man schon im
Controller selber testen.
gruß cyblord
Poste den Code compilierbar (0 Warnings, 0 Errors!) als Anhang, dann
kann man ihn schnell mal durch den Simulator jagen.
Und sag vor allem erstmal, was für ein AVR das überhaupt ist!!!
Peter
Sachen wie
> PORTB = ~0xfa;> PORTB = ~0x5a;> PORTB = ~(yy);
muten schon sehr skuril an und machen deshalb vermutlich nicht das, was
sie sollen.
Sollte das doch so Absicht sein: Warum direkt, wenn es auch viel
indirekter geht...
Wenn das z.B. invertierte LEDs sind, ist das so viel einfacher lesbar.
Abgesehn von deinen persönlichen Vorlieben hat das aber rein gar nichts
mit der Richtigkeit des Codes zu tun.
Wenn du nur vermutest und selber nicht weißt, welche Sachen was tun,
spar dir doch einfach den "Hinweis".
in dem Code ist der Aufruf von timer_init() auskommentiert, dann darf
das auch nicht aufgerufen werden.
Aber evtl. triffst du hier auf einen Standardfehler: Wenn die
Compileroptimierungen eingeschaltet sind können Codeteile wegoptimiert
oder umverteilt werden. Dann gibt es keine 1:1 entsprechungen von
C-Codezeilen zu Assemblerbefehlen. Also zum Debuggen Optimierungen
ausschalten und Disassembly Ansicht einschalten.
Peter Dannegger schrieb:> Und sag vor allem erstmal, was für ein AVR das überhaupt ist!!!
Sorry, der AVR ist der ATmega2560 auf meinem STK600
Lutz schrieb:> Sachen wie>> PORTB = ~0xfa;>> PORTB = ~0x5a;>> PORTB = ~(yy);> muten schon sehr skuril anT.B. schrieb:> Zur Erklärung:> PortB habe ich als Ausgang definiert und auf die LEDs von meinem STK600> gelegt.
Die LEDs auf meinem Board werden invertiert angesteuert, die
Schreibweise macht es besser lesbar.
cyblord ---- schrieb:> Ich sehe nirgendwo einen Aufruf von timer_init.
--> siehe Teil 2, im ersten Teil war er auskommentiert
Den Code habe ich als erstes schon gepostet:
Hast du nach PORTB = ~0x5a mal ein while(1) gemacht, damit die
Ausführung nach diesem Befehl sicher anhält und du checken kannst ob
dieser Befehl wirklich nicht ausgeführt wurde?
Ich denke eher er wird ausgeführt und durch die nachfolgenden Interrupts
wird PORTB wieder verändert.
gruß cyblord
also im Simulator läuft es wunderbar, nach 200ms wird der OCI1B
aufgerufen und nach weiteren 300ms der OCI1A. Dann schlägt der CTC zu
und das Spiel geht von vorne los. yy zählt 3,5,6,8,... Dann wird wohl
was mit deinen LEDs faul sein oder im AVRStudio ist der falsche
Prozessor eingestellt (Projekt/Eigenschaften/Device).
Habe nur ein neues Projekt angelegt, AVRGCC - C executable, Proz.
ausgeswählt, Cut&Paste deines Codes und fertig.
Ich erinnere micht das die Installation den AVRGCC nicht eingebaut hatte
und dazu etwas nachinstallieren musste. Nicht das du versuchst für
AT_X_Mega Code zu bauen?
vielen dank schon mal für die rückmeldung, dass mein code zu
funktionieren scheint.
aber da sind schon wieder folgenden probleme:
auf deinem bild sieht man, dass in der ISR 1B ein breakpoint ist, das
funktioniert bei mir nicht, er ignoriert alle(!) breakpoints
JojoS schrieb:> Ich erinnere micht das die Installation den AVRGCC nicht eingebaut hatte> und dazu etwas nachinstallieren musste. Nicht das du versuchst für> AT_X_Mega Code zu bauen?
Was muss nachinstalliert werden? Wie bzw. wo finde ich das?
T.B. schrieb:> Code funktioniert nicht, bleibt vor timer_init(); hängen
Wohl eher, er kommt nicht mehr zurück.
Vielleicht falsches Target eingestellt und der Stackpointer und die
Interruptvektoren zeigen in den Wald.
Peter
So, ich habe jetzt auch noch mal ein neues Projekt angelegt, den Code
(von dieser Website) kopiert und eingefügt (Name= Testprog.c) und
versucht zu starten. Ohne Erfolg Jetzt bekomme ich folgende
Fehlermeldung:
1
Testprog.c
2
Invoking: AVR/GNU C Compiler
3
Done executing task "RunCompilerTask" -- FAILED.
4
Done building target "CoreBuild" in project "Testprog.cproj" -- FAILED.
Boah man!
Bei mir ist irgendwas verkorkst!
Ich habe jetzt noch einmal ein neues Projekt gemacht und noch einmal den
Code von hier kopiert und die Fehlermeldung beim kompilieren war weg und
es läuft wie wahrscheinlich auch bei JojoS.
Ich weiß nicht wo hier der Fehler liegt. Das Programm ist immer noch
offen, kein neustart, keine weiteren Einstellungen vorgenommen. Ich kann
den fehler nur noch nachvollziehen, wenn ich das alte Projekt öffne.
Ich vermute (weil das ist der einzige unterschied), dass es vielleicht
am Speicherort liegt???
Auf jeden fall schon mal Danke an JojoS für die positive Rückmeldung,
somit konnte ich Fehler im Programm ausschließen.
Meine Breakpoints funktionieren immer noch nicht, das Programm hält zum
Debuggen nicht an.
Bis jetzt bin ich kein Freund von der Performance des neuen Studios.
dieses Problem hatte ich nach der Installation:
Beitrag "AVR Studio 5: AVR-GCC Projekt nicht verfügbar"
aber der AVRGCC scheint ja vorhanden zu sein, sonst ginge ja garnix. Zu
den Breakpoints: ich habe den Simulator gewählt, es ging nur um den
Softwaretest. Das STK600 habe ich nicht, kann man damit überhaupt in
Hardware debuggen?
Wenn das ursprüngliche Projekt nicht kompiliert dann muss doch was in
den Projekteinstellungen faul sein, vergleiche doch noch mal
Projekt/Eigenschaften/Device und /Debugging oder die anderen
Einstellungen.
wg. STK600 debuggen: ich möchte dir ja nicht den Tag versauen, aber u.a.
steht hier:
Beitrag "JTAG mit STK600?"
darum häufen sich hier die Forumsbeiträge zu ARM Cortex M0/M3 :-)
JojoS schrieb:> wg. STK600 debuggen: ich möchte dir ja nicht den Tag versauen, aber u.a.> steht hier:> Beitrag "JTAG mit STK600?">> darum häufen sich hier die Forumsbeiträge zu ARM Cortex M0/M3 :-)
Danke Jojo, das erklärt warum bei den breakpoints nicht angehalten wird.
Oh man, jetzt hat das STK 600 chon jtag, aber keine
debuggingschnittstelle! Muss man das verstehen? Dann hätten Sie die auch
weglassen können, genauso kann ich auch über ISP programmieren und spare
mir sogar noch vier pins.
Das ist der hammer! Das erklärt zumindest einiges.
Kann man also denn auf dem STK600 eine Debuggingsession starten, die
dann aber nur programmiert und sonst nichts macht?
Das wäre ja äußerst irreführend wenn AVR Studio das Starten eines
Features zulässt, aber keine Rückmeldung über die nicht erfolgreiche
Ausführung gibt.
Debugger und Programmiertool sind zwei verschiedene Paar Schuhe beim
AVRStudio. Wenn kein HW Debugger gefunden wird dann bietet der Projekt
Wizzard auch nur den Simulator an. Der wird bei T.B. vermutlich auch
gestartet, aber der läuft natürlich nicht in Echtzeit. Bei mir dauert es
auf einem i7 Notebook knappe 30s bis der erste Breakpoint erreicht wird
wenn man 'Run' ausführt. Wenn man das Projekt mit Einzelschritt startet
erscheint der gelbe Pfeil zur akt. Position im main, in der Titelzeile
steht aber auch verwirrenderweise 'Debbuging' und nix von Simulation.
Beim googeln findet man schnell weitere verärgerte STK600 User weil die
HW schon JTAG debugging hergeben sollte.
Aber der Simulator ist trotzdem eine schöne Sache, sowas findet man
dafür bei den low-Cost ARM Lösungen nicht. Und in der Simu kann man
sehen das der Timer 1B Interrupt nicht alle 200ms aufgerufen wird
sondern 200ms nach Timerstart bzw. CTC der nur durch Timer 1A Interrupt
ausgelöst wird.
Hallo,
um das Thema hier sauber abzuschließen, folgende Erkenntnisse im
Zusammenhang mit
- AVRstudio 5
- STK600 incl. ATmega2560 auf Adapterplatine
- Anschluss über JTAG
- Betriebssystem: Windows 7
Erkenntnisse:
* Projekte können nicht im Netzwerk abgelegt werden (Build schlägt
fehl), außer:
* Projekt kann im Netzwerk abgelegt werden, wenn das Netzlaufwerk
verbunden wurde, z.B. Freien Ordner im Netzwerk mit Laufwerk M:
verbinden
* STK600 hat eine JTAG Schnittstelle, hiermit kann aber nicht debuggt
werden! Dazu benötigt man ein JTAG Debugger, wie z.B. JTAG MK III
* Man muss den AVRGCC installieren /installiert haben
* d.h. mit dem stk600 wird bei Breakpoints nicht(!) angehalten
T.B. schrieb:> * STK600 hat eine JTAG Schnittstelle, hiermit kann aber nicht debuggt> werden!
Also wenn ich mir das STK600 in der AVRStudio-Hilfe ansehe:
1.2 Features
- JTAG programming of AVR and AVR32 devices
- ISP and JTAG programming of AVR devices in external target systems
Da steht nur Programming und nichts von Debugging.
Das ist eigentlich üblich, nur was drinsteht ist auch drin.
Irgendwelche weitergehenden Vermutungen des Benutzers sind in der Regel
falsch.
Peter