问题描述
我在 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 (将#修改为@)