Как связать более плотный код в IAR в разделенных разделах?

#c #linker #iar #stm8 #mcu

Вопрос:

Я делаю программу для STM8L151G6 на встроенном рабочем столе IAR для STM8 (версия 3.11.1), мне нужно разместить инструкцию JPF 0xf000 по адресу 0x008426. Я делаю это. В коде на языке Си:

 __root static const uint8_t jpfat0x8426 [] @ "ENTRY_POINT" = {0xac, 0x00, 0xf0, 0x00}; // jpf 0xf000
 

В файле .icf:

 define region EntryPoint = [from 0x8426 to 0x842A];

define region VectorsRegion = [from 0x8000 size 0x80];

define region NearFuncCode = [from 0x8080 to 0xEF7F] - EntryPoint;

define region FarFuncCode = [from 0x8080 to 0xEF7F] - EntryPoint;

define region HugeFuncCode = [from 0x8080 to 0xEF7F] - EntryPoint;

place at start of EntryPoint    { ro section ENTRY_POINT };
place in EntryPoint             { };
 

Компоновщик строит код следующим образом:

 ...
"A2":                                     0x80
  INTVEC                      0x008000    0x80  <Block>
    .intvec          const    0x008000    0x80  interrupt.o [4]
                            - 0x008080    0x80

"A3":                                      0x4
  ENTRY_POINT        const    0x008426     0x4  project51.o [1]
                            - 0x00842a     0x4

"P3-P5":                                0x20cb
  .near_func.text    ro code  0x00842b   0x3a6  float.o [4]
  .near_func.text    ro code  0x0087d1   0x2a1  data_exchange.o [1]
  .near_func.text    ro code  0x008a72   0x1fa  fuel_gauge.o [1]
...
 

Это правильно. Но диапазон [от 0x008080 до 0x00842b] пуст, поэтому код не является компактным.
Я теряю около 1 тыс. байт, это слишком много для микроконтроллера stm8. Например, объект с плавающей точкой.o (размер 0x3a6)
может быть помещен в этот диапазон, но компоновщик этого не делает. Есть ли какой-то способ сказать компоновщику, чтобы он делал более плотный код и заполнял пустые куски разделов объектами.
Спасибо.