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
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.
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.
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
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;
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.