HSG |
|
Einige Experimente sollen die Funktion des Bootloaders einsichtig machen. Dazu wurde zunächst ein einfaches Programm zur Arithmetik mit Hilfe des Bootloaders in den 16F877a geladen. Anschließend wurde der Inhalt des PICs mit einem Programmiergerät ausgelesen.
Ein Vergleich mit der Ausgabe des Programm-Memory des MPLAB (linkes Bild) zeigt, dass der rot gerahmte Teil ab 0x10 identisch ist. Der Bereich 0x00-0x0F ist hingegen vom Bootloader beim Einladen verändert worden. Was bedeuten diese Veränderungen? Der ausgelesene Code wurde in MPLAB im Programm-Memory hexadezimal eingegeben (rechtes Bild), wobei sofort eine Disassemblierung erfolgt. Man sieht, dass das Programm mit nop beginnt, gefolgt von einem 'langen Sprung' an die Adresse 11 110 1000 1100. Die beiden höchstwertigen Einsen werden durch Setzen der Bits 3 und 4 im PCLATH-Register (0xa) bewirkt, der Rest ist die Zahl 0x68c. Dort (am Ende des Speichers) wird wohl der Bootloader liegen, der über den 'langen Sprung' zu main das eigentliche Programm erreichen kann. Es könnte also so sein, dass der Bootloader die ersten Bytes des Programms verlagert und u. A. zum Anspringen des eigentlichen Programms benützt.