[stm8s]IAR for stm8果然是杯具-_-

2019-12-11 18:34发布

总见上官一直支持IAR,我今天也突然有兴致换个编译器试试,
移植了cosmic下的一个stm8s103F3的工程,编译成功,结果发现真杯具-_-


cosmic下 data:58 flash:2578 堆栈未知(我没做堆栈占用信息的统计工具) 我并没有使用开代码压缩,即使开了也就再少几十字节,我写的代码一向注重优化了。。。

结果在IAR下
  2 143 bytes of readonly  code memory
  1 105 bytes of readonly  data memory
    326 bytes of readwrite data memory


杯具。。。等IAR懂了stm8的指令,等IAR懂(u8)(a>>8)只取低8位就可以不需要真的移8次,要等到什么时候-_-
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
90条回答
stm8s103
2019-12-13 05:11
IAR设置堆栈

(原文件名:Image0019.JPG)

IAR生成map

(原文件名:Image0020.JPG)


RAM用量,如果不考虑堆栈,不同的编译器是差不多的。
因为用基本上等于全局变量和静态变量的多少,而程序里面的全局变量和静态变量多少是固定的,
对于iar来说,不用的全局变量和静态变量不会连接到目标文件中,貌似cosmic也有这样的功能,
因此,cosmic与iar RAM用量应该差不多,iar仅仅是多了16字节虚拟寄存器。



MAP里面有:
"A1":  place at start of [0x000000-0x0000ff] { rw section .vregs };   //RAM最前端,先放置16个虚拟寄存器
"A2":  place at end of [0x000000-0x0017ff] { block CSTACK };          //堆栈从RAM最尾端开始放置
"A3":  place at start of [0x008000-0x00ffff] { block INTVEC };        //FLASH最前端,放置向量表
"P3":  place in [from 0x008000 to 0x00ffff] {
          ro section .far.data_init, ro section .huge.data_init, ro }; //其他常量,程序段在放置在向量表后面


IAR堆栈是从RAM最尾端开始放置,
如果你把堆栈大小设置为1,可以发现IAR把最后一个字节分配做了堆栈。

反观COSMIC,堆栈固定在512字节(貌似可以改,但比较麻烦),楼主的RAM用量统计并没有把这个包括在内,不如IAR能直接设置堆栈大小灵活。

一周热门 更多>