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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.