Hallo liebe Forumskollegen! Meine zugrundeliegende Hard/Software: Controller: AT90CAN128 Compiler: WINAVR IDE: AVR Studio 4.17 Mein Problem: Ich bin dabei einen CAN-Bootloader für den AT90CAN128 zu schreiben, jedoch habe ich noch ein gewisses Problem. Das Szenario sieht folgendermaßen aus: Ich habe zwei Programme welche in den AVR-geflasht werden. Das Hauptprogramm, welches ab Adresse 0 abgelegt wird, und den Bootloader, welcher über ein selbstständiges AVR-Studio Projekt erstellt wurde, und mittels Linker Kommando (-Wl,--section-start=.text=0x1E000) im Flashbereich des Bootloader abgelegt wird. Ich kann vom Hauptprogramm in den Bootloader und wieder zurück springen - kein Problem. Ich nutze derzeit im Bootloader die selbe CAN-Libary welche ich auch im Hauptprogramm verwende. (Ist derzeit einiges an unnötigem Code, aber weiß dass er wirklich funktioniert, da das Hauptprogramm mit diesem Code schon einige Monate im Einsatz ist und alles zufriedenstellend läuft). Das Problem ist nun folgendes: Wenn ich im Bootloader die Interrupts aktiviere und eine CAN-Nachricht an das Board sende, dann "hängt" das ganze und der AVR reagiert nicht mehr. Was könnte da das Problem sein? Da Bootloader und Hauptprogramm wirklich 2 komplett separate Programme sind, war ich bis jetzt der Meinung, dass auch jedes Programm seine eigene Interrupttabelle verwendet. Muss ich hier dennoch etwas umstellen? Ich habe schon einiges an Erfahrung in der AVR-Programmierung, nur im Bootloaderbereich bin ich noch etwas neu. Vielen Dank für Eure Hilfe! Max
Max schrieb: > dass auch jedes Programm seine > eigene Interrupttabelle verwendet. ..dann studiere mal das Datenblatt zum uC. In der Regel ist es so, dass nur eine Interrupt-Vektor-Tabelle (gewöhnlich ab Addr-0) existiert. Ich habe ähnliches mit einem 8051-Clone realisiert und aus diesem Grund im Bootlader komplett auf Interrupts verzichtet. MfG Holger
Max schrieb: > Da Bootloader und Hauptprogramm wirklich 2 komplett separate Programme > sind, war ich bis jetzt der Meinung, dass auch jedes Programm seine > eigene Interrupttabelle verwendet. Ja, beide haben ihre eigene Interruptvektortabelle. Aber du musst dem µC auch sagen, welche jeweils gerade verwendet werden soll. Suche im Datenblatt nach dem IVSEL Bit.
Hallo Stefan und Holger, das Problem ist gelöst. Ich habe nochmals nachgelesen, und hatte das Anfangs falsch verstanden. Es funktioniert jetzt. Vielen Dank! Max
hallo Euch allen... Ich möchste auch eienn Bootloader via Can und dem AT90CAN realisieren... Kann mir jemand dazu die entsprechenden programme schicken? grüße martin
Hallo euch allen, ich bin schon seit einiger Zeit auf der Suche nach einem CAN-Bootlader für den AT90CAN. Leider konnte ich dazu aber kein fertiges Projekt finden. Genauere Informationen gibt es unter fogendem Link: Titel - Beitrag "CAN BUS Bootloader AT90CAN" Ich hoffe es finden sich einige um dieses Projekt zu realisieren oder die dabei helfen können. Grüße martin
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.