Вопрос

I have PIC18F87J11 FAMILY and I am using MPLAB C18 Compiler. What is the maximum bytes I can give the following variable.

I know that I have to modify the linker file to achive more than 256 bytes.

#pragma udata CONNECTION_TABLE

This is my clean linker file.

// File: 18f87j11_g.lkr
// Generic linker script for the PIC18F87J11 processor

#DEFINE _CODEEND _DEBUGCODESTART - 1
#DEFINE _CEND _CODEEND + _DEBUGCODELEN
#DEFINE _DATAEND _DEBUGDATASTART - 1
#DEFINE _DEND _DATAEND + _DEBUGDATALEN

LIBPATH .

#IFDEF _CRUNTIME
  #IFDEF _EXTENDEDMODE
    FILES c018i_e.o
    FILES clib_e.lib
    FILES p18f87j11_e.lib

  #ELSE
    FILES c018i.o
    FILES clib.lib
    FILES p18f87j11.lib
  #FI

#FI

#IFDEF _DEBUGCODESTART
  CODEPAGE   NAME=page       START=0x0               END=_CODEEND
  CODEPAGE   NAME=debug      START=_DEBUGCODESTART   END=_CEND        PROTECTED
#ELSE
  CODEPAGE   NAME=page       START=0x0               END=0x1FFF7
#FI

CODEPAGE   NAME=config     START=0x1FFF8           END=0x1FFFD        PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE          END=0x3FFFFF       PROTECTED

#IFDEF _EXTENDEDMODE
  DATABANK   NAME=gpre       START=0x0               END=0x5F
#ELSE
  ACCESSBANK NAME=accessram  START=0x0               END=0x5F
#FI

DATABANK   NAME=gpr0       START=0x60              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
DATABANK   NAME=gpr6       START=0x600             END=0x6FF
DATABANK   NAME=gpr7       START=0x700             END=0x7FF
DATABANK   NAME=gpr8       START=0x800             END=0x8FF
DATABANK   NAME=gpr9       START=0x900             END=0x9FF
DATABANK   NAME=gpr10      START=0xA00             END=0xAFF
DATABANK   NAME=gpr11      START=0xB00             END=0xBFF
DATABANK   NAME=gpr12      START=0xC00             END=0xCFF
DATABANK   NAME=gpr13      START=0xD00             END=0xDFF

#IFDEF _DEBUGDATASTART
  DATABANK   NAME=gpr14      START=0xE00             END=_DATAEND
  DATABANK   NAME=dbgspr     START=_DEBUGDATASTART   END=_DEND           PROTECTED
#ELSE //no debug
  DATABANK   NAME=gpr14      START=0xE00             END=0xEFF
#FI

DATABANK   NAME=gpr15      START=0xF00             END=0xF3F
DATABANK   NAME=sfr15      START=0xF5A             END=0xF5F          PROTECTED
ACCESSBANK NAME=accesssfr  START=0xF60             END=0xFFF          PROTECTED

#IFDEF _CRUNTIME
  SECTION    NAME=CONFIG     ROM=config
  #IFDEF _DEBUGDATASTART
    STACK SIZE=0x100 RAM=gpr13
  #ELSE
    STACK SIZE=0x100 RAM=gpr14
  #FI
#FI

This is my modified linker file to give CONNECTION_TABLE more than 256 bytes.

// File: 18f87j11_g.lkr
// Generic linker script for the PIC18F87J11 processor

#DEFINE _CODEEND _DEBUGCODESTART - 1
#DEFINE _CEND _CODEEND + _DEBUGCODELEN
#DEFINE _DATAEND _DEBUGDATASTART - 1
#DEFINE _DEND _DATAEND + _DEBUGDATALEN

LIBPATH .

#IFDEF _CRUNTIME
  #IFDEF _EXTENDEDMODE
    FILES c018i_e.o
    FILES clib_e.lib
    FILES p18f87j11_e.lib

  #ELSE
    FILES c018i.o
    FILES clib.lib
    FILES p18f87j11.lib
  #FI

#FI

#IFDEF _DEBUGCODESTART
  CODEPAGE   NAME=page       START=0x0               END=_CODEEND
  CODEPAGE   NAME=debug      START=_DEBUGCODESTART   END=_CEND        PROTECTED
#ELSE
  CODEPAGE   NAME=page       START=0x0               END=0x1FFF7
#FI

CODEPAGE   NAME=config     START=0x1FFF8           END=0x1FFFD        PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE          END=0x3FFFFF       PROTECTED

#IFDEF _EXTENDEDMODE
  DATABANK   NAME=gpre       START=0x0               END=0x5F
#ELSE
  ACCESSBANK NAME=accessram  START=0x0               END=0x5F
#FI

DATABANK   NAME=gpr0       START=0x60              END=0xFF
DATABANK   NAME=CONNECTION_TABLE   START=0x100     END=0x999 PROTECTED
SECTION   NAME=CONNECTION_TABLE    RAM=CONNECTION_TABLE
DATABANK   NAME=gpr10      START=0xA00             END=0xAFF
DATABANK   NAME=gpr11      START=0xB00             END=0xBFF
DATABANK   NAME=gpr12      START=0xC00             END=0xCFF
DATABANK   NAME=gpr13      START=0xD00             END=0xDFF


#IFDEF _DEBUGDATASTART
  DATABANK   NAME=gpr14      START=0xE00             END=_DATAEND
  DATABANK   NAME=dbgspr     START=_DEBUGDATASTART   END=_DEND           PROTECTED
#ELSE //no debug
  DATABANK   NAME=gpr14      START=0xE00             END=0xEFF
#FI

DATABANK   NAME=gpr15      START=0xF00             END=0xF3F
DATABANK   NAME=sfr15      START=0xF5A             END=0xF5F          PROTECTED
ACCESSBANK NAME=accesssfr  START=0xF60             END=0xFFF          PROTECTED

#IFDEF _CRUNTIME
  SECTION    NAME=CONFIG     ROM=config
  #IFDEF _DEBUGDATASTART
    STACK SIZE=0x100 RAM=gpr13
  #ELSE
    STACK SIZE=0x100 RAM=gpr14
  #FI
#FI

As you can see my CONNECTION_TABLE starts from 0x100 and ends at 0x999. If I want to give it more bytes, what is the maximum I can give it?

If you look closely you will notice I have the following code.

ACCESSBANK NAME=accesssfr  START=0xF60             END=0xFFF          PROTECTED

Does that mean CONNECTION_TABLE can not get more than 0xFFF?

Pretty much I want to double the number of bytes for my CONNECTION_TABLE, how can I do that?

Currently I have it start at 0x100 and ends at 0x999, can I change the ending to 0x1332? Or that won't work because I will go over the boundary 0xFFF?

Thanks!

Это было полезно?

Решение

Down load the PIC18F87J11 datasheet and read carefully section: 5.3 Data Memory Organization

FIGURE 5-7: DATA MEMORY MAP FOR PIC18F87J11 FAMILY DEVICES show how the memory is organized.

  1. MCPUs PIC18 family have max 4096 bytes of RAM.
  2. RAM starts at 0x000 and ends at 0xFFF address.
  3. General Purpose Registers are form address 0x100 to 0xF5F.
  4. You can extend your bank size up to 0xF5F address (not to 0xFFF)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top