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.
extern void _startup (void); // See c018i.c in your C18 compiler dir #pragma code _RESET_INTERRUPT_VECTOR = 0x000400 void _reset (void) { _asm goto _startup _endasm } #pragma code
@holger könntest du kurz beschreiben, was der code macht? @markus nein, ich mein bios :)
>@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?
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.
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.
>Mir wurde gesagt, dass ich folgendes vor der main-Funktion schreiben >soll: > >#pragma code main=0x420 >void main(void) Also doch ein Bootloader.
>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:
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.