pic18f4550 Heap too large
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=0x60 END=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
pic18f4550 Heap too large
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
pic18f4550 Heap too large
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.
pic18f4550 Heap too large
Confirmed with the sintax error the compilation fails.
Thank anyway.
Stefano
pic18f4550 Heap too large
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)?
pic18f4550 Heap too large
Sorry you were right there was a problem in the include paths
Thanks for your help.
Happy new Year.
Stefano