Attiny2313 Interrupt Tabelle ändern

Gast #6859708
Lesenswert?

Hallo,

ich möchte mit dem Attiny einen Bootloader erstellen. Liegt der 
Bootloader am ende des Flash, hätte ich theoretisch keine Probleme mit 
dem Interrupt aber dafür startet der Bootloader nicht als erstes. Was 
für mich ein Problem ist.

Sitzt der Bootloader am Anfang des Flash sind natürlich die Interrupts 
für anschließendes Main Programm ungünstig da dann beim Bootloader 
wieder gestartet wird.

Um dem aus dem weg zu gehen, müsste ich die Interrupt Tabelle so 
anpassen, dass von dem jeweiligem Aufruf direkt zu der Interrupt Tabelle 
des Main Projektes gesprungen wird. Nun ist meine Frage, kann ich die 
Tabelle überhaupt anpassen oder gibt es dafür in Atmel Studio 7 eine 
option?

Auf folgende Adressen müssten gesprungen werden:
1
00000460 <__vectors>:
2
 460:  14 c0         rjmp  .+40       ; 0x48a <__ctors_end>
3
 462:  24 c0         rjmp  .+72       ; 0x4ac <__bad_interrupt>
4
usw..

Ich stelle mir den Aufruf so vor, dass von der Aufrufadresse des 
Interuppts in die Adresse der Interrupt Tabelle des Main Projekt 
gesprungen wird(oben):
1
0:    rjmp  0x460       ; <__ctors_end>
2
2:    rjmp  0x462       ; <__bad_interrupt>
3
usw..

BG
Bürger
#6859760
Lesenswert?

Wenn man ein Programm für den ATTiny compiliert, steht an 0x0000 ein 
RJMP zum Initcode der App. Diesen berechnet der Bootloader neu, damit er 
direkt vor dem Bootloader steht und schreibt einen RJMP zu sich selbst 
an 0x0000.
Will dann der Bootloader die App starten, springt er zu Bootloader-1.
Gast #6859926
Lesenswert?

Falk B. schrieb:
> Wobei sich die Frage nach dem Sinn eines Bootloaders bei so einem
> kleinen Controller stellt. Mit 2kB Flash? Ein ATtiny85 hat immerhin 8kB
> und 128B RAM.

Das ist richtig, viel ist nicht mehr frei. Theoretisch ist er aber 
kompatibel mit Attiny4313.

EAF schrieb:
> 
https://www.mikrocontroller.net/articles/Konzept_für_einen_ATtiny-Bootloader_in_C

Danke für den Link, mit dem ist meine frage Beantwortet (:

BG
#6860075
Lesenswert?

Peter D. schrieb:
> Wenn man ein Programm für den ATTiny compiliert, steht an 0x0000 ein
> RJMP zum Initcode der App. Diesen berechnet der Bootloader neu, damit er
> direkt vor dem Bootloader steht und schreibt einen RJMP zu sich selbst
> an 0x0000.
> Will dann der Bootloader die App starten, springt er zu Bootloader-1.

Auch wenn ich jetzt wieder geschlagen werde...wie kann man mit 
Bootloader (selbst geschrieben??) arbeiten, wenn man d a s nicht kapiert 
hat? Trotzdem danke ich dafür, dass das Szenario direkt umfassend in der 
Frage beschrieben wurde. Stelle mir gerade eine (katastrophale) Variante 
der Frage vor:
Hilfe, ich muß bei einem Attiny die Interrupttabelle verschieben. Ich 
weiß aber nicht wie...bin absoluter Anfänger :-)
Gruß Rainer
#6860104
Lesenswert?

Wenn du das nicht kapierst wirst du auch keinen eigenen Bootlader 
zustande bringen. Zumindest nicht für die AVR-Typen die nicht von Hause 
aus dafür vorgesehen sind.
Warum willst du es überhaupt nochmal selbst machen? Hier gibts irgendwo 
einen langen trööt (fastload). Das funktioniert, ist kompakt und lässt 
sich leicht auf alle möglichen Typen und benutzte Pins einstellen.

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