[STM8] STM8s103K3用iar产生的代码太大,除了换芯片求、求别的解法

[复制链接]
9558|21
 楼主| 2009chinalj 发表于 2013-1-5 20:34 | 显示全部楼层 |阅读模式
IAR 版本是:  IAR C/C++ Compiler V1.30.1.20036 [Evaluation] for STM8程序用了三个浮点运算算式,其它就是一些指针,程序都没有一千行 程序还有显示和界面操作没写,就提示溢出了,
显示不知知道除了换芯片还有没有别的解法??





这是不要function inlining 和cross call 选项优化时 空间明显不够

这是不要function inlining 和cross call 选项优化时 空间明显不够
 楼主| 2009chinalj 发表于 2013-1-5 20:36 | 显示全部楼层
hight size 优化选项全选中时 空间够但是运行不正确
2.jpg
uet_cache 发表于 2013-1-5 20:40 | 显示全部楼层
用STVD试下。。
pattywu 发表于 2013-1-5 20:44 | 显示全部楼层
用库的话,代码不长是不正常的。
 楼主| 2009chinalj 发表于 2013-1-5 20:50 | 显示全部楼层
stm8 的库不是一般的肥胖啊
   stm8s_clk.c
  IAR C/C++ Compiler V1.30.1.20036 [Evaluation] for STM8
   Copyright 2010-2011 IAR Systems AB.

1 231 bytes of CODE  memory
   105 bytes of CONST memory

stm8s_flash.c

   IAR C/C++ Compiler V1.30.1.20036 [Evaluation] for STM8
   Copyright 2010-2011 IAR Systems AB.

1 011 bytes of CODE  memory
    95 bytes of CONST memory
这是iar 输出的message
 楼主| 2009chinalj 发表于 2013-1-5 20:55 | 显示全部楼层
pattywu 发表于 2013-1-5 20:44
用库的话,代码不长是不正常的。

正解,还是直接对寄存器操作好
 楼主| 2009chinalj 发表于 2013-1-5 20:56 | 显示全部楼层
uet_cache 发表于 2013-1-5 20:40
用STVD试下。。

stvd 试过了 对库来说长度没多少变化
uet_cache 发表于 2013-1-6 10:53 | 显示全部楼层
你用库可以,要省空间,可以把库中没到用的函数或文件删掉,那样可以省很多空间出来。我都是这样解决空间问题的。。库也一样用。。
杨爱林林 发表于 2013-1-6 11:08 | 显示全部楼层
顶楼上。。
明月小厨 发表于 2013-1-6 12:03 | 显示全部楼层
有办法;你的浮点算法很恶心;通常可以绕过去的;
王紫豪 发表于 2013-1-6 12:08 | 显示全部楼层
奔牛滚滚 发表于 2013-1-6 12:20 | 显示全部楼层
uet_cache 发表于 2013-1-6 10:53
你用库可以,要省空间,可以把库中没到用的函数或文件删掉,那样可以省很多空间出来。我都是这样解决空间问 ...

没到用的函数或文件不会被链接进去的吧?
uet_cache 发表于 2013-1-6 12:26 | 显示全部楼层
反正源码,随便改。。。
 楼主| 2009chinalj 发表于 2013-1-6 13:05 | 显示全部楼层
  去掉 stm8s_clk.c 中一个不用的函数会出现:
    1 146 bytes of CODE  memory
   105 bytes of CONST memory
没有去掉之前编译输出时:

1 231 bytes of CODE  memory
   105 bytes of CONST memory这是否说明 iar 编译时没有把不关联的code 去掉???????还有只在生成hex 才优化掉???
那这跟cosmic 没有区别,之前在st官网论坛看到老外讨论cosmic 一致认为cosmic只在生成hex才优化掉不关联的code
shijiajun4 发表于 2013-1-6 14:38 | 显示全部楼层
8楼正解
tx2sljm 发表于 2013-1-6 16:00 | 显示全部楼层
改变这个世界的不是MBA是工程师。。其实我是一名电工
ljxh401 发表于 2013-1-6 16:26 | 显示全部楼层
硬件设置库的话 估计不会占用很大的代码空间
我使用过程中 觉得:
keil stm32 用 stm32 提供的库 没有使用到的函数,应该是没有编译到代码里面的
可能你的程序耗费空间的是 浮点运算的软件库
一般我不在单片机上用浮点数据的
 楼主| 2009chinalj 发表于 2013-1-6 18:00 | 显示全部楼层
ljxh401 发表于 2013-1-6 16:26
硬件设置库的话 估计不会占用很大的代码空间
我使用过程中 觉得:
keil stm32 用 stm32 提供的库 没有使用到 ...

去掉一条浮点运算 c = a*c   三个量都是float
3 258 bytes of CODE  memory
    10 bytes of CONST memory
   129 bytes of DATA  memory

去掉之前
3 276 bytes of CODE  memory
    10 bytes of CONST memory
   129 bytes of DATA  memory
而且反汇编查看 涉及到浮点运算就会  call 应该不会太浪费空间
现在程序换成寄存器写法之后减少了接近2K  特别是stm8s.c感觉里面有很都宏定义动用了太多运算
 楼主| 2009chinalj 发表于 2013-1-6 18:02 | 显示全部楼层
以前在学校时用51写2 000 的代码也不过3K st的库看来还是省着用
uet_cache 发表于 2013-1-6 18:08 | 显示全部楼层
解决问题是目标,遇神杀神,遇佛杀佛,,什么样的问题不重要,解决的了,最重要。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:改变这个世界的不是MBA是工程师。。其实我是一名电工

13

主题

177

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部