Bootloader - Interrupt Problem - AT90CAN128

Gast #1575937
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
Gast #1575940
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
#1575943
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.
Persönliche Seite #1581088
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren