Forum: Mikrocontroller und Digitale Elektronik Bootloader - Interrupt Problem - AT90CAN128


von Max (Gast)


Lesenswert?

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

von HolgerT (Gast)


Lesenswert?

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

von Stefan E. (sternst)


Lesenswert?

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.

von Max (Gast)


Lesenswert?

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

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

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

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.