PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupts im Bootloader



AVR-Knecht
19.12.2009, 15:32
Hallo

ich möchte einen Bootloader in Bascom so umschreiben, das ich Interrupts nutzen kann. Komme aber einfach nicht weiter.
Nun habe ich gelesen, das es möglich ist, im Bootloader auch Interrupts zu nutzen wenn man irgendwelche Register in den Bootloader kopiert. Bin daraus aber nicht schlau geworden. Kann mir da jemand weiterhelfen ?

Jaecko
19.12.2009, 17:18
Naja kopieren muss man da nichts.
Man muss nur die Interrupt-Vektor-Tabelle auf den Bootloader umleiten.
Dazu muss man in 2 verschiedenen Registern was ändern.
Kommt aber auf den Controller an, welche das sind.
(Bzw. Steht im Datenblatt, wie dieses Verschieben läuft)

Vitis
19.12.2009, 18:02
Dann müsste die ISR aber auch in den Loaderbereich

stefan_Z
20.12.2009, 04:01
Also die Bascom Hilfe sagt zumindest:
You can not use interrupts in your boot loader program as the interrupts will point to the reset vector which is located in the lower section of the flash. When you start to writing pages, you overwrite this part.

Jaecko
20.12.2009, 10:21
Tja, da haben sich Bascom bzw. deren Erschaffer mal wieder nicht richtig informiert... Datenblatt ATMega8: Ab Seite 46 gibts die Interrutps; auf S. 49 steht die Prozedur des Umleitens.

Biegt man die Interrupts um und legt man die .text-Section des Bootloaders in den Bootloaderbereich, dann liegen sowohl die Vektortabelle als auch der ISR-Code im Bootloaderbereich. Funktioniert wunderbar. Die Frage ist halt nur, ob man mit Bascom Sections an bestimmte stellen legen kann.

Naja, wieder ein Grund mehr, für sowas C statt Bascom zu verwenden oder in Bascom direkt die Register anzusprechen ohne "vorgefertigte" Befehle.

Nachtrag: Siehe auch https://www.roboternetz.de/phpBB2/viewtopic.php?t=51271

Vitis
20.12.2009, 13:18
stellt sich halt auch die Frage nach der Sinnhaftigkeit des Unterfangens.
Was willst Du damit erreichen?

AVR-Knecht
22.12.2009, 09:04
Danke für die Antworten.
Es handelt sich bei meinem Problem einmal um einen Bootloader mit einem MCP2515 CAN-Controller. Da kann man mit Interrupts besser arbeiten.
Zum zweiten möchte ich Programmroutinen vor Zugriff und kopieren schützen, und da dachte ich man könnte sie mit in den Bootloaderbereich packen.
Oder kennt ihr da andere Möglichkeiten ?

Besserwessi
22.12.2009, 10:59
Für den Schutz gegen Auslesen und Koplieren gibt es die Lockbits. Der Schutz ist nicht perfekt, aber do so dass man mit Hobbymitteln wohl nicht drankommt.