How To Make Databank Size Over 256 Bytes [Linker File - MPLAB]

I have PIC18F87J11 FAMILY and I am using the MPLAB C18 compiler. What are the maximum bytes that I can provide to the next variable.

I know that I need to change the linker file to get 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 at 0x100 and ends at 0x999 . If I want to give him more bytes, what maximum can I give him?

If you look carefully, you will notice that I have the following code.

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

Does this mean that CONNECTION_TABLE cannot exceed 0xFFF ?

Basically I want to double the number of bytes for my CONNECTION_TABLE , how can I do this?

I am currently starting at 0x100 and ending at 0x999 , can I change the ending to 0x1332 ? Or will it not work because I will pass the 0xFFF border?

Thanks!

+4
source share
1 answer

Download table PIC18F87J11 and carefully read the section: 5.3 Organization of data memory

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

  • MCPUs The PIC18 family has a maximum of 4096 bytes of RAM.
  • RAM starts at 0x000 and ends at a 0xFFF address.
  • General purpose registers is the address of the form 0x100 - 0xF5F.
  • You can increase the size of your bank to the address 0xF5F (not to 0xFFF)
+3
source

Source: https://habr.com/ru/post/1486955/


All Articles