如何更改代码偏移量?

问题描述 投票:0回答:2

我知道如何轻松更改 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

谢谢!

embedded microcontroller pic bootloader microchip
2个回答
2
投票

大部分信息取自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

我能够使用上述步骤编译和链接一个简单的程序。您可以在我的地图文件的图像中看到代码已正确偏移。

Screenshot of map file


0
投票

@embedded_guy 谢谢。它适用于 PIC18LF45K50 芯片、MPLAB 6.0、C18 编译器。然而,引导加载程序仅占用 0x0-0x1000 的空间。它因“#pragma code _entry_scn=0x001000”而失败,但因“#pragma code _entry_scn=0x000FFA”而成功。再次感谢

© www.soinside.com 2019 - 2024. All rights reserved.