我知道如何轻松更改 MPLAB XC8 上的代码偏移,只需转到
XC8 Linker --> Additional options -- > Codeoffset
如何在带有 C18 编译器的 MPLAB V8.92 上更改它? 如果有帮助的话,我正在使用 PIC18F87J11。我打开链接器文件并更改了以下内容,但它给了我错误。我不知道我是否应该这样做,但我真正想要的只是更改代码偏移量,以便十六进制文件从地址 10000 开始。我有一个引导加载程序,占用以下内存空间 0-10000。我希望应用程序代码从地址 10000 开始。我可以使用 MPLAB XC8 很好地完成此操作,但我不知道如何使用 MPLAB 8 完成此操作。我的大多数项目都是使用 MPLAB 8 编写的,因此转换为 MPLAB XC8 需要一些时间时间。
链接器文件更改为
CODEPAGE NAME=page START=0x0 END=0x1FFF7
至
CODEPAGE NAME=page START=0x10000 END=0x1FFF7
构建错误:
Error - section '_entry_scn' can not fit the absolute section. Section '_entry_scn' start=0x00000000, length=0x00000006
谢谢!
大部分信息取自microchip 论坛,为方便起见在此转载。 Microchip 的 MPLINK 对象链接器用户指南中还有大量有关如何使用链接器的重要信息。
将启动文件 c018i.c(或您正在使用的任何文件)从 C18 的启动目录复制到您的项目文件,然后将其添加到您的项目。
编辑行:
#pragma code _entry_scn=0x000000
到
#pragma code _entry_scn=0x010000
接下来将链接器文件 18f87j11_g.lkr 复制到您的项目并将其添加到您的项目中。
编辑链接器并注释掉默认启动文件,以便它将使用本地副本:
#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
如果您正在编写引导加载程序,则需要为中断向量提供固定位置,因此让引导加载程序代码将它们引导到固定位置,然后添加以下内容:
#pragma code highVector=0x10008
void HighVector(void) {
_asm
goto high_isr
_endasm
}
#pragma code lowVector=0x10018
void LowVector(void) {
_asm goto low_isr _endasm
}
#pragma code // Return to default code section
然后....
#pragma interrupt high_isr
void high_isr(void)
{
...
}
最后,在链接器中,您还必须通过添加以下行来保护引导加载程序内存区域:
CODEPAGE NAME=bootloader START=0x000000 END=0X00FFFF PROTECTED
并修改“页面”以在您想要的位置启动程序,如下所示:
CODEPAGE NAME=page START=0x100000 END=0X01FFF7
我能够使用上述步骤编译和链接一个简单的程序。您可以在我的地图文件的图像中看到代码已正确偏移。
@embedded_guy 谢谢。它适用于 PIC18LF45K50 芯片、MPLAB 6.0、C18 编译器。然而,引导加载程序仅占用 0x0-0x1000 的空间。它因“#pragma code _entry_scn=0x001000”而失败,但因“#pragma code _entry_scn=0x000FFA”而成功。再次感谢