Пишу загрузчик для 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