umgehen der 256 Byte Grenze C18

#951984
Lesenswert?

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.
OP #952043
Lesenswert?

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
#952065
Lesenswert?

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
OP #952079
Lesenswert?

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
#952090
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren