Hallo Zusammen Wie kann ich ein Array mit mehr als 256 Speicherlätze erreichen. ucTestPuf[1024] geht nicht. Bitte. Danke. Lg. Johann K.
Ohne Angabe der Fehlermeldung spekuliere ich auf nicht genug RAM.
Hallo PIC18F46K80 Die Fehlermeldung lautet: Error - section 'dSerPufOutProt' can not fit the absolute section. Section 'dSerPufOutProt' start=0x00000400, length=0x00000101 Errors : 1 Es ist sicher genügend Speicher vorhanden, es ist nur ein kleiner Teil belegt.
Section 'dSerPufOutProt' größer machen? Soweit reichen meine PIC Kenntnisse nicht. Da muss Dir jemand anders helfen.
Das Problem ist, daß das Array nicht in eine section reinpasst. Wenn du dir mal ein std. Linkerfile ansiehst wirst du feststellen, daß die sections max 256 bytes sind. Dies hat mit einer Compilerschwäche zu tun, bzw der HW. Deshalb muss auch in bestimmten Codestellen ein Pointer anstelle des Array verwendet werden. Und so geht es: #pragma udata DATA unsigned int ucTestPuf[1024]; #pragma udata unsigned int *ucTestPuf_ptr = &ucTestPuf[0]; und im Linkerfile, kommentier die gpr4-12 aus (oder andere) DATABANK NAME=data START=0x400 END=0xCFF PROTECTED SECTION NAME=DATA RAM=data
Natürlich nicht das orginale Linkerfile ändern, sondern eine lokal Kopie und diese dann zum Linken verwenden.
In der Doku zum C18 findet sich ein Beispiel. -> C18 Toolchain -> MPLAB C Compiler for PIC18 MCUs -> Examples -> Application: Creating Large Data Objects and the USART
Hallo Pic Ich habe es versucht aber immer nur eine Fehlermeldung erhalten. Nachfolgend der Inhalt der Datei 18f46k80.lkr, kannst du die Änderung vornehmen. Bitte Danke. Lg. Johann K. ************************** // File: 18f46k80.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=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=0xF003FF PROTECTED #IFDEF _EXTENDEDMODE DATABANK NAME=gpr0 START=0x0 END=0xFF #ELSE ACCESSBANK NAME=accessram START=0x0 END=0x5F DATABANK NAME=gpr0 START=0x60 END=0xFF #FI 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 #IFDEF _DEBUGDATASTART DATABANK NAME=gpr12 START=0xC00 END=_DATAEND DATABANK NAME=dbgspr START=_DEBUGDATASTART END=_DEND PROTECTED #ELSE //no debug DATABANK NAME=gpr12 START=0xC00 END=0xCFF #FI DATABANK NAME=sfr13 START=0xD00 END=0xDFF PROTECTED DATABANK NAME=sfr14 START=0xE00 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=config #IFDEF _DEBUGDATASTART STACK SIZE=0x100 RAM=gpr11 #ELSE STACK SIZE=0x100 RAM=gpr12 #FI #FI
Hier wird eine section von 2Kbyte bereitgestellt, mit namen DATA. Das Ram reduziert sich, gpr12 wird noch beibehalten, da ev. für debugging relevant. Welche Fehlermeldung hast du bekommen, was hast du anders gemacht. DATABANK NAME=gpr1 START=0x100 END=0x1FF DATABANK NAME=gpr2 START=0x200 END=0x2FF DATABANK NAME=gpr3 START=0x300 END=0x3FF #if 1 DATABANK NAME=data START=0x400 END=0xBFF PROTECTED SECTION NAME=DATA RAM=data #else 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 #endif
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.