Forum: Mikrocontroller und Digitale Elektronik umgehen der 256 Byte Grenze C18


von Siegfried S. (dieleena)


Lesenswert?

hallo,
MPLAP 7.60, C18 Compiler, PIC 18F4550
Wie kann ich bei einem Array die 256 Byte Grenze umgehen?
Gruß Siegfried

von Der M. (steinadler)


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.

von Siegfried S. (dieleena)


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

von Jens (Gast)


Lesenswert?

Du Lädst einfaach einen crack von einschlägigen seiten?

von Siegfried S. (dieleena)


Lesenswert?

Hallo,
Was meinst du mit crack herunterladen?
Gruß Siegfried

von Der M. (steinadler)


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

von Siegfried S. (dieleena)


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

von Der M. (steinadler)


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

von Siegfried S. (dieleena)


Lesenswert?

Hallo Micha,
Habe die Zeile übersehen.
STACK SIZE=0x100 RAM=gpr3
Gruß Siegfried

von Der M. (steinadler)


Lesenswert?

Siegfried Saueressig wrote:
> Hallo Micha,
> Habe die Zeile übersehen.
> STACK SIZE=0x100 RAM=gpr3
> Gruß Siegfried

Dachte ich mir schon ;-)
Gehts denn wenigstens?

von Siegfried S. (dieleena)


Lesenswert?

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