Загрузчик PIC18 XC8 не сопоставлен с правильным адресом - PullRequest
0 голосов
/ 04 августа 2020

Пишу загрузчик для PIC18F87K22. Я использовал аргумент командной строки -mrom, рекомендованный в их документации / веб-семинаре , чтобы ограничить диапазон, в котором компилятор будет помещать вещи в ПЗУ между 0x0000-0x0FFF, что должно дать мне 4K для записи загрузчика. Однако когда используя этот флаг, я получаю ошибку компоновщика

: 0 :: error: (500) undefined symbols:

Я обнаружил, что если я расширю диапазон до 0x0000 -0xFFFF, тогда он строится правильно, но в настоящее время мой код довольно прост и использует только 258 байт, и он должен легко уместиться в отведенном пространстве. по какой-то причине компилятор не будет помещать какой-либо код между векторами прерывания, которые заканчиваются на 0x001 C и адресом 0x1000, поэтому эта почти 4k область fla sh будет потрачена впустую. Ограничения памяти приложений уже становятся жесткими, и я действительно не могу позволить себе эти накладные расходы. Любые идеи были бы полезны. В настоящее время я использую 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
...