2013-06-19 5 views
4

저는 PIC18F87J11 패밀리가 있으며 MPLAB C18 컴파일러를 사용하고 있습니다. 다음 변수에 지정할 수있는 최대 바이트 수는 얼마입니까?데이터 뱅크 크기를 256 바이트 이상으로 만드는 방법 [링커 파일 - MPLAB]

나는 링커 파일을 256 바이트 이상 확보해야한다는 것을 알고있다.

#pragma udata CONNECTION_TABLE 

이것은 내 깨끗한 링커 파일입니다.

// 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 

이것은 수정 된 링커 파일로서 CONNECTION_TABLE에 256 바이트 이상을 제공합니다.

// 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 

당신이 0x100에서 내 CONNECTION_TABLE 시작을보고 0x999에 종료 할 수있다. 만약 내가 더 많은 바이트를주고 싶다면, 내가 줄 수있는 최대치는 얼마입니까?

자세히 보면 다음 코드가 있음을 알 수 있습니다.

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

는 그 이 CONNECTION_TABLE0xFFF보다 더 얻을 수없는 것을 의미 하는가?

거의 CONNECTION_TABLE의 바이트 수를 두 배로 늘리고 싶습니다. 어떻게해야합니까?

현재 0x100에서 시작하여 0x999에서 끝납니다. 0x1332으로 결말을 변경할 수 있습니까? 또는 내가 경계를 넘을 것이기 때문에 그것은 작동하지 않을 것입니다 0xFFF?

감사합니다.

답변

3

아래는 PIC18F87J11 datasheet을로드하고주의 깊게 섹션 읽기 : 5.3 데이터 메모리 구성

은 그림 5-7 : PIC18F87J11 디바이스 제품군에 대한 데이터 메모리 맵 메모리의 구성 방법을 보여합니다.

  1. MCPU PIC18 제품군에는 최대 4096 바이트의 RAM이 있습니다.
  2. RAM은 0x000에서 시작하고 0xFFF 주소에서 끝납니다.
  3. 범용 레지스터는 0x100에서 0xF5F의 양식 주소입니다.
  4. 당신은 (하지 OXFFFF가에) 0xF5F 주소 나는 매우 다음 제한하고 생각
+0

에 은행의 크기를 확장 할 수 있습니다. 나는 은행 크기를 0xF5F 이상으로 확장하고 싶었다. 다른 PIC로 업그레이드해야합니까? 어떤 추천? –

+1

@ cookie 괴물 :이 경우에는 더 큰 패밀리 CPU 16 비트 또는 32 비트를 사용해야합니다. 귀하의 요구에 따라 제품을 선택할 수 있습니다. 트리 체크 인 : http://www.microchip.com/pagehandler/en-us/products/picmicrocontrollers –

+0

링크를 제공해 주셔서 감사합니다! –