www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC18F4431 mit BIOS


Autor: Schurick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich vermute mal du meinst nicht Bios sondern Bootloader, oder?

Autor: Schurick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@holger
könntest du kurz beschreiben, was der code macht?

@markus
nein, ich mein bios :)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Schurick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Schurick (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mir wurde gesagt, dass ich folgendes vor der main-Funktion schreiben
>soll:
>
>#pragma code main=0x420
>void main(void)

Also doch ein Bootloader.

Autor: Schurick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mag sein, aber das hilft bei meinem Problem nicht weiter :)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.