pic18f8722 array speicher

Gast #551459
hallo leute,

ich beschäftige mich seit kurzem mit einem pic18f8722. in meinem 
projektchen würde ich gerne werte in mehreren arrys speichern. der daten 
speicher sollte ja grösser als 3000 byte sein. von daher wäre es schön, 
wenn man eine arry wie folgt erzeugen könnte

typedef unsigned char  u8;
#define GROESSE 3000
u8 daten[GROESSE];

was scheinbar nicht funktioniert. denn der compiler meckert mit:


Error - section '.udata_pic18f18722.o' can not fit the section. Section 
'.udata_pic18f18722.o' length=0x00000200
Errors    : 1

hat jemand eine idee, wie ich denn ganzen datenspeicher oder vielleicht 
auch noch den programmspeicher als datenspeicher nutzen kann.

das kap. 6.4 im MPLAB_C18_Getting_Started habe ich mir durchgelesen und 
nicht so verstanden, das ich es umsetzten könnte.

einen schönen tanz in den mai!

marc
Gast
Hi,

ich hab hier eine etwas ältere Version vom "Getting Started", aber in 
diesem wird auf exakt dein Problem eingegangen. Weiß ich weil ich es 
auch mal hatte ;)

Kurz gesagt: standardmäßig kann der C18 nur mit maximal 255 Byte großen 
Arrays umgehen. Um das hinzubiegen muss man das Linkerskript anpassen, 
eine größere Datensektion anlegen und diese dann dem Array zuweisen. Ist 
aber dort recht gut beschrieben.
Gast
Noch ein kleiner Tipp: der 18F8722 hat nur knappe 4k RAM. Wenn du da 
schon 3k für einen Datenspeicher abziehst solltest du aufpassen das es 
nicht irgendwann (zu) eng wird.
Gast
ich habe noch etwas rumprobiert...

wenn man das arry in 13 * 256 bytes teilt kommt man auf 3328 bytes

typedef unsigned char  u8;

#pragma udata data1
u8 data1[256];
...
#pragma udata data13
u8 data13[256];

ob das der schönste weg ist mag ich mal bezweifeln. damit reize ich aber 
den speicher fast ganz aus.
vielleicht kennt ja einer einen schöneren weg!

danke

marc
Gast
Machs im Linkerskript

ALT:
//DATABANK   NAME=gpr1       START=0x100          END=0x1FF
//DATABANK   NAME=gpr2       START=0x200          END=0x2FF
//DATABANK   NAME=gpr3       START=0x300          END=0x3FF
//DATABANK   NAME=gpr4       START=0x400          END=0x4FF

//DATABANK   NAME=gpr5       START=0x500          END=0x5FF
//DATABANK   NAME=gpr6       START=0x600          END=0x6FF
//DATABANK   NAME=gpr7       START=0x700          END=0x7FF
//DATABANK   NAME=gpr8       START=0x800          END=0x8FF

//DATABANK   NAME=gpr9       START=0x900          END=0x9FF
//DATABANK   NAME=gpr10      START=0xA00          END=0xAFF
//DATABANK   NAME=gpr11      START=0xB00          END=0xBFF

NEU:
DATABANK   NAME=gpr1       START=0x100          END=0xBFF

Entschuldige wenn ich das hier sage, aber C18 ist einfach
nur buggy und scheiße. Und ich weiß wovon ich rede.

Solche Klimmzüge muss man da oft machen:

// BytesPerCluster= BYTE_PER_SEC * secPerCluster; //this did not work 
with MCC18 !
 BytesPerCluster= BYTE_PER_SEC;
 BytesPerCluster *= secPerCluster;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.