gpt4 book ai didi

c - 如何使数据库大小超过 256 字节 [链接器文件 - MPLAB]

转载 作者:太空狗 更新时间:2023-10-29 15:36:05 24 4
gpt4 key购买 nike

我有 PIC18F87J11 系列,我正在使用 MPLAB C18 编译器。我可以给以下变量的最大字节数是多少。

我知道我必须修改链接器文件以达到超过 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

如您所见,我的 CONNECTION_TABLE0x100 开始,在 0x999 结束。如果我想给它更多的字节,我能给它的最大值是多少?

如果仔细观察,您会发现我有以下代码。

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

这是否意味着 CONNECTION_TABLE 不能超过 0xFFF

我非常想将我的CONNECTION_TABLE 的字节数加倍,我该怎么做?

目前我让它从 0x100 开始到 0x999 结束,我可以将结尾更改为 0x1332 吗?还是那行不通,因为我会越过边界 0xFFF

谢谢!

最佳答案

下载 PIC18F87J11 datasheet并仔细阅读部分:5.3 数据存储组织

图 5-7:PIC18F87J11 系列器件的数据存储器映射显示了存储器的组织方式。

  1. MCPU PIC18 系列最多有 4096 字节的 RAM。
  2. RAM 从 0x000 开始到 0xFFF 地址结束。
  3. 通用寄存器的地址为 0x100 到 0xF5F。
  4. 您最多可以将存储区大小扩展到 0xF5F 地址(而不是 0xFFF)

关于c - 如何使数据库大小超过 256 字节 [链接器文件 - MPLAB],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17182064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com