Hi Mika,

>   Managed to compile a sample code below with sdcc, but the xdata
> definition can not be found from header files (except from testfwk.h).

The PIC architectures do not offer anything like external data memory;
so either just
#define xdata __data
or replace it (as you did).

> What would be the correct way to introduce the heap ?
> data char heap[256];

That looks pretty good, __data instead of data is safer, though.

> // data char heap[512]; This gives linker error, do not know why

The reason for the linker error is that the PIC organizes its memory in
banks of 256 bytes each. You cannot declare structures/arrays larger
than that unless you know what you are doing and modify the .lkr script
(combine two adjacent banks (END address of first = START address of
second - 1), i.e., turn

DATABANK   NAME=gpr1       START=0x100          END=0x1FF
DATABANK   NAME=gpr2       START=0x200          END=0x2FF

into

DATABANK   NAME=gpr1       START=0x100          END=0x2FF

Save the modified 18f4550.lkr in your project directory and add
-Wl,-s,18f4550.lkr to sdcc's command line (or -s 18f4550.lkr to gplink's
command line, depending on your build system/style) to use it.

Make sure, though, that you *always* statically allocate the heap of at
least 256 bytes if you do this, otherwise a random multi-byte entity (an
int, a struct, ...) might be placed across the bank boundaries, which
breaks compiler assumptions about BANKSEL placement and might cause
accesses to the entity to fail (read/write in the wrong bank, good luck
hunting such bugs!).

Also, make sure to add
#pragma stack 0x300 0x100
to your main() file to move the stack from its standard location
(0x200-0x2FF) to 0x300-0x3FF. You might also reduce the stack size
(0x100 => 256 bytes, 0x80 => 128 bytes *might* suffice, you could try).

Note that using a 512 byte heap and a 256 byte stack leaves 'just' 160
byte of the 4550 available for other stuff.

Hope that helped,
Raphael

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to