PIC18F4431 mit BIOS

Gast #1162462
Lesenswert?

Hi Leute,
habe einen 18F4431 Pic mit Bios drauf. Das BIOS besetzt den Speicher von 
0x000 bis 0x400. Mit Assambler gibt es den Befehl "org 0x400" um das 
BIOS nicht zu überschreiben. Jetzt muss ich mein Programm aber mit C 
schreiben, welche Möglichkeit gibt es da, um meinen Code an eine 
bestimmte Speicherstelle zu setzen, damit das BIOS nicht überschrieben 
wird? Ich benutze den C18-Compiler von Microchip.
Gast #1162508
Lesenswert?

>@holger
>könntest du kurz beschreiben, was der code macht?

Die Funktion _reset() wird an Adresse 0x400
gelegt. Das ist ein Stück Code um ein Programm
per Bootloader programmieren zu können.
Da muss man allerdings auch im Linkerscript rumfummeln.
Das geht mir jetzt hier zu weit ;)

Was für ein Bios ist denn das?
Gast #1162533
Lesenswert?

Muss dann zufällig im Linkerscript unter "page" Start=0x400 gesetzt 
werden?

Das BIOS hilft uns mit einer Software Werte aus dem Speicher des PICS 
auszulesen und Werte reinzuschreiben. Mit einer anderen Software können 
wir damit auch HEX-Files auf den Pic flashen.
Gast #1162556
Lesenswert?

Mir wurde gesagt, dass ich folgendes vor der main-Funktion schreiben 
soll:

#pragma code main=0x420
void main(void)
{
 .
 .
 .
}

Zusätzlich soll ich im Linker-File bei "page" den Startwert auf 0x400 
setzen. Wenn ich dies jedoch tue, kommt folgender Fehler:

section '_entry_scn' can not fit the absolute section. Section 
'_entry_scn' start=0x00000000, length=0x00000006

Bitte um Hilfe.
Gast #1162615
Lesenswert?

>mag sein, aber das hilft bei meinem Problem nicht weiter :)

Ein Teil der Lösung habe ich oben gepostet.
Geh mal auf die Seite von Microchip und such
nach Bootloader. Ich habe keine Lust deine Arbeit
zu machen.

Oder frag einfach den hier:

>Mir wurde gesagt, dass ich folgendes vor der main-Funktion schreiben
>soll:

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