PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BOOTLOADER - Größe ermitteln



dj_cyborg
09.05.2014, 17:32
Hallo,

ich möchte meinem Hauptprogramm die größe meines Bootloaders mitteilen.


$loadersize=????

Wie kann ich diese ermitteln/ablesen?

Vielen Dank

mfG
Mario

markusj
09.05.2014, 18:45
Wie kann ich diese ermitteln/ablesen?
Das sollte in der Dokumentation des von dir verwendeten Bootloaders stehen. Alleine schon, weil du ja auch die entsprechenden Fusebits setzen musst, damit der AVR nach einem Reset auch die Ausführung beim Bootloader (der ziemlich am Ende des Flashspeichers abgelegt wird) beginnt und nicht bei der regulären Startadresse 0x00.

mfG
Markus

dj_cyborg
10.05.2014, 14:04
Hallo Markus,

und Danke für deine Antwort.

Ich benutze:
-Atmega88
-den MCS Bascom Bootloader (http://avrhelp.mcselec.com/index.html?loader.htm)
-lt. Datenblatt Seite 281 (http://www.atmel.com/images/doc2545.pdf) sollte der Beginn des Bootbereichs bei 0xC00 liegen. Was auch im Bootloader steht und ich auch beim Software Reset verwende.

Aber, wenn ich die Loadersize auf 1024 stelle, wird der Bootloader teilweise vom Hauptprogramm überschrieben. Bei 2048 erhalte ich die Meldung von Bascom das ich das Speicherlimit überschritten habe.

Aber 2048 deckt sich doch nicht mit dem Datenblatt, oder sehe ich da was falsch?

Vielen Dank

mfG
Mario

markusj
10.05.2014, 14:27
Aber, wenn ich die Loadersize auf 1024 stelle, wird der Bootloader teilweise vom Hauptprogramm überschrieben. Bei 2048 erhalte ich die Meldung von Bascom das ich das Speicherlimit überschritten habe.

Laut der von dir verlinkten BASCOM-Doku (Direktlink (http://avrhelp.mcselec.com/mcsbootloader.htm)) ist der Bootloader tatsächlich 1024 Words groß. Was die Doku aber nicht verrät: Wird loadersize in Bytes oder in Words angegeben? Wenn dein Programm den Bootloader überschreibt, gehe ich fast davon aus, dass es von sich aus zu viel Platz benötigt um zusammen mit dem Bootloader auf den AVR zu passen. Eigentlich sollte der Bootloader aber verhindern dass er selbst überschrieben wird ...

Wie groß ist dein Programm denn ohne Bootloader?

mfG
Markus

dj_cyborg
10.05.2014, 14:56
Hallo Markus,

und Danke für deine Antwort.

Die Programmgröße kann ich gerade nicht nachschauen, mach ich aber nachher.

In meinem Link in der Bascom-Hilfe steht unten im Code-Bsp.:



...
#if Loaderchip = 88 'Mega88
$loader = $c00 'this address you can find in the datasheet
'the loader address is the same as the boot vector address
Const Maxwordbit = 5
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
#endif

#if Loaderchip = 168 'Mega168
$loader = $1c00 'this address you can find in the datasheet
'the loader address is the same as the boot vector address
Const Maxwordbit = 6
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
#endif

#if Loaderchip = 32 ' Mega32
$loader = $3c00 ' 1024 words
Const Maxwordbit = 6 'Z6 is maximum bit '
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
#endif
#if Loaderchip = 8 ' Mega8
$loader = $c00 ' 1024 words
Const Maxwordbit = 5 'Z5 is maximum bit '
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
#endif
...


zu sehen ist hierbei das beim Mega88 & 168 in der Bemerkung ein Verweis auf das Datenblatt steht. Bei allen anderen Chips steht gleich "1024 words" dahinter. Daher hatte ich die Vermutung das es beim M88 & 168er eine Besonderheit gibt. Aber für mich sagt das Datenblatt auch 1024 aus.



Laut der von dir verlinkten BASCOM-Doku (Direktlink) ist der Bootloader tatsächlich 1024 Words groß. Was die Doku aber nicht verrät: Wird loadersize in Bytes oder in Words angegeben?...

Die Angabe sollte (lt. anderen Foren) in WORD sein.


Wenn dein Programm den Bootloader überschreibt, gehe ich fast davon aus, dass es von sich aus zu viel Platz benötigt um zusammen mit dem Bootloader auf den AVR zu passen. Eigentlich sollte der Bootloader aber verhindern dass er selbst überschrieben wird ...

Meiner Meinung nach ist die Loadersize-Angabe für die Ermittlung der Gesamtgröße und Sicherung des Bootloaderbereichts da.

mfG
Mario