Forum: Mikrocontroller und Digitale Elektronik PIC Microchip AN1310 Bootloader


von Ingo S. (schicki)


Angehängte Dateien:

Lesenswert?

PIC Microchip AN1310 Bootloader
Hallo Zusammen,
ich habe mehrere PIC-Controller mit dem AN130 und dem XC8 bzw. dem C18 
umgesetzt.
PIC18F97J60 -> XC8, C18 und Assembler  gehen
PIC18F46K80 -> XC8, C18 und Assembler  gehen
PIC16F877A ->  XC8, C18 und Assembler  gehen
PIC18F452 -> C18, und Assembler gehen XC8 nicht

Sobald ich das Hexfile des PIC18F452 des XC8 Compilers lade kommt 
folgende Fehlermeldung (siehe Screenshot).

Wenn ich das Programm mit einem ICD3 bzw. mit dem PICKIT3 übertrage 
funktioniert es.  C18 und Assembler Programme funktionieren mit dem 
Bootloader. Denn kann ich also ausschließen.

Letztendlich muss es an der Startadresse (Linkerscript) des Programms 
vom Compiler  liegen. Die Option des Codeoffsets hat auch nicht 
geholfen.
Von Microchip kam nur die Mitteilung dass dieser Controller out of 
Service ist. Hatte von Euch schon jemand das Problem.

Hier wären ein paar Daten vom Bootloader.
Speicherreservierung PIC18F452 Applikation
1
Aus dem Bootloader:
2
    #define AppVector           0x400   ; application start up code should be located here.
3
    #define AppHighIntVector    0x408   ; application high priority interrupt should be located here
4
    #define AppLowIntVector     0x418   ; application low priority interrupt should be located here
5
6
Erste Zeilen in der Applikation:
7
8
#define PROG_START 0x400 // application offset
9
10
#asm
11
PSECT intcode
12
        GOTO    PROG_START+0x8
13
PSECT intcodelo
14
        GOTO    PROG_START+0x18
15
#endasm 
16
17
 asm("GOTO " ___mkstr(PROG_START));

Ich habe alle Tipps aus den Datenblättern oder dem Internet getestet. 
Bin über jeden Tipp dankbar.

Ingo

von Frank K. (fchk)


Lesenswert?

Der PIC16F877A sollte eigentlich nicht mit dem C18 gehen, weil der C18 
eigentlich nur PIC18 kann.

Zum PIC18F452: Ja, dafür müsste man dir die Ohren langziehen, dass Du 
überhaupt noch diesen alten Kram verwendest. Direkter, pinkompatibler 
Nachfolger ist der PIC18F4520, aktuell ist der PIC18F45K20.

Vergleiche mal die Linkerscripts oder versuche mal, direkt einen 18F4520 
einzusetzen.

fchk

von Ingo S. (schicki)


Lesenswert?

Hallo Frank,

ich habs hinbekommen. Bei diesem PIC muss man die Reset und Interrupt 
Vectoren manuell umsetzen. Den alten Typ habe ich bei dem ein oder 
anderen Sache mit drin. Im Zug der Migrierung des XC8 brachte ich die 
bieherigen Bootloader auf den aktuellen stand.

stimmt beim PIC16F877A meinte ich den CC5X, sorry mit dem XC8 ist nun 
alles bei einem Compiler. Wobei die PIC16 für mich immer mehr an 
BEdeutung verlieren.

Über Linkerscript bin ich fündig geworden. Bei neuen Sachen setze ich 
zwischenzeitlich den PIC18F46K80 ein.

Nun zur Lösung, das muss hinzu bzw.geändert werden:

#define PROG_START 0x400 // application offset

#asm
PSECT _vec
GOTO    PROG_START

PSECT intcode
        GOTO    PROG_START+0x8
PSECT intcodelo
        GOTO    PROG_START+0x18
#endasm

void main() @ PROG_START

Grüße
Ingo

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
Noch kein Account? Hier anmelden.