Embedded 如何更改代码偏移量?

Embedded 如何更改代码偏移量?,embedded,microcontroller,pic,bootloader,microchip,Embedded,Microcontroller,Pic,Bootloader,Microchip,我知道如何通过转到XC8链接器-->其他选项-->codecoffset 如何使用C18编译器在MPLAB V8.92上更改它?如果有帮助,我正在使用PIC18F87J11。我打开了链接器文件并更改了以下内容,但它给了我错误。我不知道我是否应该这样做,但我真正想要的是更改codefset,使十六进制文件从地址10000开始。我有一个引导加载程序,它占用以下内存空间0-10000。我希望申请代码从地址10000开始。我可以用MPLAB XC8很好地做到这一点,但我不知道如何用MPLAB 8做到这一

我知道如何通过转到
XC8链接器-->其他选项-->codecoffset

如何使用C18编译器在MPLAB V8.92上更改它?如果有帮助,我正在使用PIC18F87J11。我打开了链接器文件并更改了以下内容,但它给了我错误。我不知道我是否应该这样做,但我真正想要的是更改codefset,使十六进制文件从地址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

谢谢

为了方便起见,这些信息大部分都是从网站上获取并复制的。还有很多关于如何在中使用链接器的重要信息

将启动文件c018i.c(或您正在使用的任何文件)从C18的启动目录复制到您的项目文件中,并将其添加到您的项目中

编辑行:

#pragma code _entry_scn=0x000000

接下来将链接器文件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
我能够得到一个简单的程序来编译和链接使用上述步骤。您可以在我的地图文件的图像中看到代码已正确偏移


是否需要将页面开头更改为以下内容<代码>代码页名称=页面开始=0x10000结束=0x1FF7我仍然收到相同的错误
错误-部分“\u entry\u scn”无法匹配绝对部分。部分“\u entry\u scn”start=0x00100000,length=0x00000006”不适合绝对部分。
我仍然需要关注您发布的链接,但希望它们能将我带到某个地方。谢谢你把所有的东西都放在一起。作为对你第一次评论的回答,我相信你会的。不过我现在无法证实。我稍后会看一看,看看是否可以确认。@Ammar我专门为您的微控制器更新了,并验证了程序将使用上述步骤正确编译/链接。
CODEPAGE NAME=page START=0x100000 END=0X01FFF7