The PIC16 port currently supports the following pragmas:
/* initializes stack of 100 bytes at RAM address 0x200 */
#pragma stack 0x200 100
/* place function test_func at 0x4000 */
#pragma code test_func 0x4000
Keyword | Description | Module to link |
ignore | ignore all library pragmas | (none) |
---|---|---|
c | link the C library | libc18f.lib |
math | link the Math libarary | libm18f.lib |
io | link the I/O library | libio18f*.lib |
debug | link the debug library | libdebug.lib |
This feature allows for linking with specific libraries withoug having to explicit name them in the command line. Note that the IGNORE keyword will reject all modules specified by the library pragma.
/* places variable foo at bank2 */
#pragma udata bank2 foo
char foo;
// Sample linker script for the PIC18F452 processor
LIBPATH .
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=0x7F
DATABANK NAME=gpr0 START=0x80 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
ACCESSBANK NAME=accesssfr START=0xF80 END=0xFFF PROTECTED
SECTION NAME=CONFIG ROM=config
SECTION NAME=bank0 RAM=gpr0 # these SECTION directives
SECTION NAME=bank1 RAM=gpr1 # should be added to link
SECTION NAME=bank2 RAM=gpr2 # section name 'bank?' with
SECTION NAME=bank3 RAM=gpr3 # a specific DATABANK name
SECTION NAME=bank4 RAM=gpr4
SECTION NAME=bank5 RAM=gpr5