Veja um exemplo que que usei ha muito tempo num projeto que usava vetores para setar vários PWM por Software.
// $Id: 18f2550.lkr,v 1.3 2004/08/23 18:08:22 curtiss Exp $// File: 18f2550.lkr// Sample linker script for the PIC18F2550 processorLIBPATH .FILES c018i.oFILES clib.libFILES p18f2550.libCODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTEDCODEPAGE NAME=page START=0x2A END=0x7FFFCODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTEDCODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTEDCODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTEDCODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTEDACCESSBANK NAME=accessram START=0x0 END=0x5F DATABANK NAME=pwm START=0x60 END=0x18C //DATABANK NAME=gpr1 START=0x100 END=0x1FFDATABANK NAME=gpr2 START=0x18D END=0x2FFDATABANK NAME=gpr3 START=0x300 END=0x3FF DATABANK NAME=usb4 START=0x400 END=0x4FF PROTECTEDDATABANK NAME=usb5 START=0x500 END=0x5FF PROTECTEDDATABANK NAME=usb6 START=0x600 END=0x6FF PROTECTEDDATABANK NAME=usb7 START=0x700 END=0x7FF PROTECTEDACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTEDSECTION NAME=CONFIG ROM=configSECTION NAME=PWM RAM=pwmSTACK SIZE=0x100 RAM=gpr3
Este foi o Link que fiz para usar 300 bytes de RAM.
No Link alterado,criei a sessão PWM (DATABANK NAME=pwm / SECTION NAME=PWM RAM=pwm),subscrevendo a sessão DATABANK NAME=gpr1.
No código inicializei os dados;
#pragma udata PWM // seção que foi criada no link (PWM)unsigned char DUT[150]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};unsigned char DUT4[150]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; #pragma udata // retorno a sessão padrão.
Criei as variáveis DUT e DUT4.
Percebe que se usar as sessões USBX,ficará sem usb.
Um detalhe é que só uso o C18.