Salu zusammen Yep, der Titel sagt schon fast alles ;o)) Ich bin gerade bei einem neuen Projekt. Bis data haben wir den CCS Compiler eingesetzt, naaaaaaaaaja :o) Nun bin ich mal mit C18 am herumspielen und bekomme immer diesen komischen Fehler wenn ich folgende Zeile einfüge: unsigned char dummy[511]; (Das Projekt beinhaltet nicht viel mehr als ein Main, sollte also an nichts anderem liegen...) main.c:75:Error [1300] stack frame too large Wieso will der denn das auf dem Stack (der Error Message nach zu urteilen) ablegen?? Ich will das doch im RAM g Kann mir einer bitte auf die Sprünge helfen, fühle mich gerade sehr blöd ;o) Grüessli aus der CH RS4B5
Beitrag "Problem mit C18 compiler von Microchip" E.1.1 Stack Frame Size When the compiler is operating in Extended mode, the total stack frame size (local variables, parameters and frame pointer preservation) is limited to 96 bytes per function. In Non-extended mode, for each function 120 bytes are available for locals and an additional 120 bytes are available for parameters.
Hm, vielen Dank für die rasche Antwort. Ja das heisst dann wohl das ich das Linker Skript ändern muss, oder? Da blick ich echt nicht durch. Hab schon so einige Sachen programmiert, also auf unterschiedlichen Systemen, aber so was ist mir noch nie passiert. zszszs ;o) Es geht um einen PIC18F46K80. Kann mir jemand sagen was ich an meinem Skript anpassen muss damit ich ein Array mit 512 Positionen als Globale Variable anlegen kann? Die brauch ich übrigens für eine MicroSD Karte... Wäre echt toll wenn mir jemand helfen könnte. Wird ja denke ich kein all zu grosser Akt sein für jemanden der durchblickt Grüessli RS4B5 // File: 18f46k80_g.lkr // Generic linker script for the PIC18F46K80 processor #DEFINE _CODEEND _DEBUGCODESTART - 1 #DEFINE _CEND _CODEEND + _DEBUGCODELEN #DEFINE _DATAEND _DEBUGDATASTART - 1 #DEFINE _DEND _DATAEND + _DEBUGDATALEN LIBPATH . #IFDEF _CRUNTIME #IFDEF _EXTENDEDMODE FILES c018i_e.o FILES clib_e.lib FILES p18f46k80_e.lib #ELSE FILES c018i.o FILES clib.lib FILES p18f46k80.lib #FI #FI #IFDEF _DEBUGCODESTART CODEPAGE NAME=page START=0x0 END=_CODEEND CODEPAGE NAME=debug START=_DEBUGCODESTART END=_CEND PROTECTED #ELSE CODEPAGE NAME=page START=0x0 END=0xFFFF #FI CODEPAGE NAME=userid START=0x200000 END=0x200007 PROTECTED CODEPAGE NAME=cfgmem START=0x300000 END=0x30000D PROTECTED CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED CODEPAGE NAME=eedata START=0xF00000 END=0xF003FF PROTECTED #IFDEF _EXTENDEDMODE DATABANK NAME=gpre START=0x0 END=0x5F #ELSE ACCESSBANK NAME=accessram START=0x0 END=0x5F #FI 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=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 DATABANK NAME=gpr12 START=0xC00 END=0xCFF #IFDEF _DEBUGDATASTART DATABANK NAME=gpr13 START=0xD00 END=_DATAEND DATABANK NAME=dbgspr START=_DEBUGDATASTART END=_DEND PROTECTED #ELSE //no debug DATABANK NAME=gpr13 START=0xD00 END=0xDFF #FI DATABANK NAME=gpr14 START=0xE00 END=0xE40 DATABANK NAME=sfr14 START=0xE41 END=0xEFF PROTECTED DATABANK NAME=sfr15 START=0xF00 END=0xF5F PROTECTED ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED #IFDEF _CRUNTIME SECTION NAME=CONFIG ROM=cfgmem #IFDEF _DEBUGDATASTART STACK SIZE=0x100 RAM=gpr12 #ELSE STACK SIZE=0x100 RAM=gpr13 #FI #FI
http://stackoverflow.com/questions/2983875/create-big-buffer-on-a-pic18f-with-microchip-c18-compiler da ist ein beispiel
DATABANK NAME=gpr0 START=0x60 END=0xCFF gpr1 bis gpr12 löschen.
unsigned char dummy[511]; Ein Sektor hat übrigends 512 Bytes;)
Sorry, Tippfehler, natürlich 512 ;o))) Merci, werde ich doch gleich mal versuchen. Eine Frage habe ich aber noch... Wenn ich nun dies mache: DATABANK NAME=gpr0 START=0x60 END=0xCFF gpr1 bis gpr12 löschen. Dann gibts ja nur noch eine gpr, nehme mal an das heisst Gruppe. Der PIC hat noch einen ECAN mit an Bord. Dieser hat irgend eine Funktion um direkt die Buffer im RAM anzusprechen. Mach ich mir dann das nicht kaputt? Wieso werden dann überhaupt so Speicherbereiche eingebaut, wenns auch mit einem klappt? Wäre ja viel einfacher: 1 Topf, alles drin :o) oder was ist der Sinn hinter der Geschichte? Tschuldigung für die Fragerei, aber hab halt sonst niemanden der mir mal was erklärt. PIC ist für mich irgendwie speziell, nicht irgendwie schlecht oder so, aber manchmal frag ich mich halt schon was die sich überlegen. Grüessli und nochmals Merci für die Antworten! RS4B5
Hallo, RS4B5 schrieb: > gpr, nehme mal an das heisst Gruppe Es steht für 'General Purpose Register'. RS4B5 schrieb: > Der PIC > hat noch einen ECAN mit an Bord. Dieser hat irgend eine Funktion um > direkt die Buffer im RAM anzusprechen. Mach ich mir dann das nicht > kaputt? Nein, die Sektion liegt ab 0xF60 (nennt sich ACCESSBANK):
1 | ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF |
2 | PROTECTED
|
Gruß, Edson
So, hab ich mich wohl als absoluter noob geoutet ;o)))) An alle noch einmal vielen Dank für die Hilfe!!! Funzt nun wie es soll! Grüessli RS4B5
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.