微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在分割部分中链接 IAR 中更密集的代码?

如何解决如何在分割部分中链接 IAR 中更密集的代码?

我在 IAR Embedded Workbench for STM8(版本 3.11.1)上为 STM8L151G6 编写程序 我需要将指令 JPF 0xf000 放在 0x008426 地址处。 我这样做。在 C 代码中:

__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]是空的,所以代码并不紧凑。 我丢失了接近 1K 字节,对于 stm8 MCU 来说太多了。例如对象 float.o(大小 0x3a6) 可以放在这个范围内,但链接器不会这样做。有什么方法可以告诉链接器执行更密集的代码并用对象填充空的段块。 谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。