hallo, MPLAP 7.60, C18 Compiler, PIC 18F4550 Wie kann ich bei einem Array die 256 Byte Grenze umgehen? Gruß Siegfried
Siegfried Saueressig wrote: > hallo, > MPLAP 7.60, C18 Compiler, PIC 18F4550 > Wie kann ich bei einem Array die 256 Byte Grenze umgehen? > Gruß Siegfried Hallo Siegfried, Du musst hierfür das Linker-Skript anpassen. Da drin ist der RAM in Bereiche á 256 Byte aufgeteilt. Da musst du einfach einen Bereich entsprechend vergrößern und dein Array dann mit .i-/.udata dorthin plazieren.
Hallo Micha, meinst du das Linker-Skript des 18F4550? Habe mal den Code beigefügt. Was und wo wird geändert? // $Id: 18f4550.lkr,v 1.3 2004/08/23 18:08:22 curtiss Exp $ // File: 18f4550.lkr // Sample linker script for the PIC18F4550 processor LIBPATH . FILES c018i.o FILES clib.lib FILES p18f4550.lib CODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTED CODEPAGE NAME=page START=0x2A END=0x7FFF CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED ACCESSBANK NAME=accessram START=0x0 END=0x5F DATABANK NAME=gpr0 START=0x60 END=0xFF DATABANK NAME=gpr1 START=0x100 END=0x1FF DATABANK NAME=gpr2 START=0x200 END=0x2FF DATABANK NAME=gpr3 START=0x300 END=0x3FF DATABANK NAME=usb4 START=0x400 END=0x4FF PROTECTED DATABANK NAME=usb5 START=0x500 END=0x5FF PROTECTED DATABANK NAME=usb6 START=0x600 END=0x6FF PROTECTED DATABANK NAME=usb7 START=0x700 END=0x7FF PROTECTED ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED SECTION NAME=CONFIG ROM=config STACK SIZE=0x100 RAM=gpr3 Gruß Siegfried
Siegfried Saueressig wrote: > Hallo Micha, > meinst du das Linker-Skript des 18F4550? Habe mal den Code beigefügt. > Was und wo wird geändert? > Gruß Siegfried Das hier z.B.: DATABANK NAME=gpr1 START=0x100 END=0x1FF in DATABANK NAME=gpr1 START=0x100 END=0x2FF die nächste Zeile löschst du einfach. Dann kannst du dein Array mit 512 Bytes anlegen
Hallo Micha, Danke für die schnelle Info. Beispiel: Aus diesen 3 Zeilen könnte ich eine machen. DATABANK NAME=gpr1 START=0x100 END=0x1FF DATABANK NAME=gpr2 START=0x200 END=0x2FF DATABANK NAME=gpr3 START=0x300 END=0x3FF in DATABANK NAME=gpr1 START=0x100 END=0x3FF Dann habe ich 768 Bytes Habe ich das richtig verstanden? Gruß Siegfried
Siegfried Saueressig wrote: > Hallo Micha, > Danke für die schnelle Info. > > Beispiel: Aus diesen 3 Zeilen könnte ich eine machen. > > DATABANK NAME=gpr1 START=0x100 END=0x1FF > DATABANK NAME=gpr2 START=0x200 END=0x2FF > DATABANK NAME=gpr3 START=0x300 END=0x3FF > > in > > DATABANK NAME=gpr1 START=0x100 END=0x3FF > > Dann habe ich 768 Bytes > > Habe ich das richtig verstanden? > > Gruß Siegfried Richtig verstanden hast du es schon. Allerdings wird die grp3 vom Stack verwendet (s. letzte Zeile). Ich würde eher grp0:grp2 nehmen. Macht 670 Byte´. Aus: DATABANK NAME=gpr0 START=0x60 END=0xFF DATABANK NAME=gpr1 START=0x100 END=0x1FF DATABANK NAME=gpr2 START=0x200 END=0x2FF Das hier: DATABANK NAME=gpr0 START=0x60 END=0x2FF
Hallo Micha, Habe die Zeile übersehen. STACK SIZE=0x100 RAM=gpr3 Gruß Siegfried
Siegfried Saueressig wrote: > Hallo Micha, > Habe die Zeile übersehen. > STACK SIZE=0x100 RAM=gpr3 > Gruß Siegfried Dachte ich mir schon ;-) Gehts denn wenigstens?
Hallo Micha, soweit alles in Ordnung. Danke vielmals. Gruß Siegfried
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.