pic18f4550 Heap too large

Posted by Argo on December 31, 2007
Hi,
i've tried to build FreeRtos for pic 18f4550 but I faced the following problem:

Using the following modified linker script and FreeRTOSConfig.h from the demo:

// 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=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

and setting the Heap Size to 512 in FreeRTOSConfig.h

#define configTOTAL_HEAP_SIZE( ( size_t ) 512 )

I get this error:
Error - section '.udata_heap_1.o' can not fit the section. Section '.udata_heap_1.o' length=0x00000404

I can't understand why the heap is still at 0x404 since i configured it to be 512 bytes long

Moreover if i use the following linker script:

// 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=BIG_BLOCK START=0x60END=0x5FF
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=0x60 RAM=BIG_BLOCK

(always with the heap set at 512)

The program links correctly and the map file still shows a lenght of 1024 for the heap.

Can anyone help me? Thanks and happy new year.

Stefano




RE: pic18f4550 Heap too large

Posted by Argo on December 31, 2007
Sorry of course, the first linker script is wrong, here is the correct one:

ACCESSBANK NAME=accessram START=0x0 END=0x5F
DATABANK NAME=gpr0 START=0x60 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

That still not work.

The fact seems to be that the data section of the heap is alwais 1024 long despite what i write in FreeRTOSConfig.h

RE: pic18f4550 Heap too large

Posted by PICmeup on December 31, 2007
I just tried using heaps of 1024 and 512 bytes and got a size of 0x404 and 0x204 respectively. Are you sure you are editing the file that is actually being built? Try adding a syntax error into FreeRTOSConfig.h where the heap size is set to check that the build breaks.

RE: pic18f4550 Heap too large

Posted by Argo on December 31, 2007
Confirmed with the sintax error the compilation fails.
Thank anyway.
Stefano

RE: pic18f4550 Heap too large

Posted by PICmeup on December 31, 2007
I know this is a daft suggestion but I can not think of anything else. Can you check that portCHAR is defined as char in portmacro.h. What value is returned from sizeof(unsigned portCHAR)?

RE: pic18f4550 Heap too large

Posted by Argo on December 31, 2007
Sorry you were right there was a problem in the include paths
Thanks for your help.
Happy new Year.

Stefano