Benötige beide Code Pages des PIC16F873A. Habe den Code in zwei .c-Files aufgeteilt. Wie kann ich den einen Code in die zweite Page speichern? Programmiere in C und verwende XC8.
Die Auswahl der Pages erfolgt über PCLATH. Ist aber nur in Assembler nötig, ein C-Compiler macht das automatisch. Wenn man ein Programm in mehrere Sourcefiles aufteilt, muß man das dem Linker mitteilen. Wo welche Routine plaziert wird, kann man nicht beeinflussen. Braucht man aber auch nicht.
:
Bearbeitet durch User
Leider füllt der Compiler die Page0 bis an den Anschlag und lässt die Page1 frei. Muss ich im Compiler / MPLAB etwas einstellen?
Andi F. schrieb: > Leider füllt der Compiler die Page0 bis an den Anschlag und lässt > die Page1 frei. Was ist das Problem dabei?
Da Page0 voll ist, wird der "überzählige" Code, im HEX-File, ausserhalb der Adressen der Page0 und 1 geschrieben und das Programm funktioniert somit nicht mehr.
Andi F. schrieb: > ausserhalb der Adressen der Page0 und 1 geschrieben Der PIC16F873A hat doch nur Program Page 0 (0x0005 - 0x07FF) und Page 1 (0x0800 - 0x0FFF)
Beim Compilieren wird unter Used Program Space 88Dh (53.4%) angegeben. Habe in einer Beschreibung des HEX Files folgendes gefunden: :1000080009002C2083160313861283120313861605 0008 is the address and this time we have to divide it by 2. 0008 / 2 = 0004h. So the data will be placed at 00000004h memory location. Meine letzte Zeile ist: :101DF000FD2E0F30CD000030CE00CB01CC0108000D => Adresse 0x0EF8, es hat somit noch Platz Interessanterweise ist gegen Ende der Datei ein "Sprung" drin: :100FF000A8002808A10029088A1193260800FF3FAD :101CE000FF3F83120313A0000C1E742E20089900DE Es scheint, dass der Compiler die Page1 von hintern auffüllt. Wie kann ich das ändern? Denn so läuft mein Programm nicht, sobald ich über 50% Code Space komme.
:
Bearbeitet durch User
Andi F. schrieb: > Es scheint, dass der Compiler die Page1 von hintern auffüllt. Substantive werden immer noch groß geschrieben ;-) Der Compiler erzeugt doch Object Code (relocatable). So lange du keine absoluten Adressen verwendest, ist für die Adressierung der Linker zuständig, oder? Man kann dem Linker eine absolute Adresse oder eine Sektion für jede Funktion mitteilen. http://microchip.wikidot.com/faq:38 Andi F. schrieb: > Denn so läuft mein Programm nicht, sobald ich über 50% Code Space komme. Warum schaust du dir statt des kryptischen HEX Codes nicht das Assembler Listing an? Was läuft denn nicht? Schon mal debuggt?
>Habe den Code in zwei .c-Files aufgeteilt.
Hmmm, ganz dumme Frage (und ganz schrägen Verdacht):
Hast du EIN Projekt oder ZWEI?
Oder anders gefragt: Hast du EIN oder ZWEI .HEX files ???
Du solltest 1 Projekt haben, dort sollte die beiden .c Datei zusammen
enthalten sein und es sollte EINE .hex Datei entstehen.
Wie der Compiler (Linker) das standardmäßig aufteilt, ist
"normalerweise" egal.
Gruss
Habe ein Projekt mit zwei .c und ein .hex files. Da ein Bootloader verwendet wird, sind die letzten 265 Adressen freigehalten, durch Aktivierung der ICD. Ich habe gerade versucht, die Endadresse tiefer zu setzen - und nun geht es. Scheint, dass der Bootloader mehr als die angegebenen 265 braucht. Komisch ist aber immer noch, dass die Page1 von ober her beschrieben wird und nicht ab 0x0800.
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.