首页 > 解决方案 > PIC18 XC8 引导加载程序未映射到正确地址

问题描述

我正在为 PIC18F87K22 编写引导加载程序。我使用了他们的文档/网络研讨会-mrom中推荐的命令行参数来限制编译器将东西放入 ROM 的范围在 0x0000-0x0FFF 之间,这应该给我 4K 来写入引导加载程序。但是当使用该标志时,我得到链接器错误

:0:: 错误:(500) 未定义符号:

我发现如果我将范围从 0x0000-0xFFFF 扩大,那么它会正确构建,但目前,我的代码相当简单,只使用 258 个字节,它应该很容易适应分配的空间。由于某种原因,编译器不会在以 0x001C 和地址 0x1000 结束的中断向量之间放置任何代码,因此这将近 4k 的闪存区域将被浪费。应用程序内存限制已经越来越紧,我真的负担不起这种开销。任何想法都会有所帮助。我目前正在使用 xc8 v2.20。

这是在 0x0000-0xFFFF 范围内构建时我的地图文件的相关部分

Machine type is 18F87K22
            Name                               Link     Load   Length Selector   Space Scale
/tmp/xcXmJhLIj.o
            idloc                            200000   200000        8        0       5
            config                           300000   300000        E        0       4
            init                                  0        0        4        0       0
dist/default/production/PIC-18F87K22-BOOTLOADER.X.production.o
            idloc                            200000   200000        8        0       5
            config                           300000   300000        E        0       4
            smallconst                         1000     1000       14      800       0
            text3                              10B8     10B8       3C      80A       0
            text2                              1014     1014       66      80A       0
            text1                              107A     107A       3E      80A       0
            text0                              10F4     10F4       14      80A       0
            cstackCOMRAM                          1        1        A        1       1
            cinit                              1108     1108        E      80A       0

TOTAL       Name                               Link     Load   Length     Space
    CLASS   STACK          

    CLASS   CODE           
            init                                  0        0        4         0
            text3                              10B8     10B8       3C         0
            text2                              1014     1014       66         0
            text1                              107A     107A       3E         0
            text0                              10F4     10F4       14         0
            cinit                              1108     1108        E         0

    CLASS   CONST          

    CLASS   SMALLCONST     
            smallconst                         1000     1000       14         0

    CLASS   MEDIUMCONST    

    CLASS   COMRAM         
            cstackCOMRAM                          1        1        A         1

    CLASS   ABS1           

    CLASS   BIGRAM         

    CLASS   RAM            

    CLASS   BANK0          

    CLASS   BANK1          

    CLASS   BANK2          

    CLASS   BANK3          

    CLASS   BANK4          

    CLASS   BANK5          

    CLASS   BANK6          

    CLASS   BANK7          

    CLASS   BANK8          

    CLASS   BANK9          

    CLASS   BANK10         

    CLASS   BANK11         

    CLASS   BANK12         

    CLASS   BANK13         

    CLASS   BANK14         

    CLASS   BANK15         

    CLASS   SFR            

    CLASS   CONFIG         
            config                           300000   300000        E         4

    CLASS   IDLOC          
            idloc                            200000   200000        8         5

    CLASS   FARRAM         

    CLASS   EEDATA         



SEGMENTS        Name                        Load    Length   Top    Selector   Space  Class

            reset_vec                      000000  000004  000004         0       0  CODE    
            text2                          001014  000102  001116       80A       0  CODE    
            cstackCOMRAM                   000001  00000A  00000B         1       1  COMRAM  
            smallconst                     001000  000014  001014       800       0  SMALLCON

标签: linkerbootloadermicrochippic18xc8

解决方案


推荐阅读