总见上官一直支持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次,要等到什么时候-_-
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
结果一样。
(原文件名:1.PNG)
iar目前与comsic优化能力也差不了多少,但iar优化能力提升的潜力更大。
-----------------------------------------------------------------------
可能新版改进了吧,但即使如此,如此的优化能力,也差点很远,给你看看cosmic如何优化的...
当x=0x1234指定常量时,会直接把0x12(#18)赋给变量y
u16 x;
u8 y;
void main(void)
{
x = 0x1234;
y = (u8)(x>>8);
}
6534 0000 _main:
6538 ; 7 x = 0x1234;
6540 0000 ae1234 ldw x,#4660
6541 0003 bf01 ldw _x,x
6542 ; 8 y = (u8)(x>>8);
6544 0005 35120000 mov _y,#18
===================
当x为变量时,则把x的高位直接赋值给y变量
u16 x = 0x1234;
u8 y;
void main(void)
{
y = (u8)(x>>8);
}
6534 0000 _main:
6538 ; 8 y = (u8)(x>>8);
6540 0000 450100 mov _y,_x
// ---------------------
void main(void)
{
x = 0x1234;
y = (u8)(x>>8);
}
//----------------------
我在IAR For STM8里测试了如下程序,其中bLcdInfoIndex是全局变量
WORD x = 0x1234;
BYTE y = (BYTE)(x>>8);
bLcdInfoIndex = (BYTE)(x>>8);
if(y) NOP();
得到的汇编是:
// 136 WORD x = 0x1234;
// 137 BYTE y = (BYTE)(x>>8);
// 138 bLcdInfoIndex = (BYTE)(x>>8);
MOV N:bLcdInfoIndex, #0x12
// 139 if(y) NOP();
nop
一周热门 更多>