打印
[STM8]

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

[复制链接]
8732|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
IAR 版本是:  IAR C/C++ Compiler V1.30.1.20036 [Evaluation] for STM8程序用了三个浮点运算算式,其它就是一些指针,程序都没有一千行 程序还有显示和界面操作没写,就提示溢出了,
显示不知知道除了换芯片还有没有别的解法??





flash溢出.jpg (57.95 KB )

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

这是不要function inlining 和cross call 选项优化时 空间明显不够
沙发
2009chinalj|  楼主 | 2013-1-5 20:36 | 只看该作者
hight size 优化选项全选中时 空间够但是运行不正确

2.jpg (50.12 KB )

2.jpg

使用特权

评论回复
板凳
uet_cache| | 2013-1-5 20:40 | 只看该作者
用STVD试下。。

使用特权

评论回复
地板
pattywu| | 2013-1-5 20:44 | 只看该作者
用库的话,代码不长是不正常的。

使用特权

评论回复
5
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

使用特权

评论回复
6
2009chinalj|  楼主 | 2013-1-5 20:55 | 只看该作者
pattywu 发表于 2013-1-5 20:44
用库的话,代码不长是不正常的。

正解,还是直接对寄存器操作好

使用特权

评论回复
7
2009chinalj|  楼主 | 2013-1-5 20:56 | 只看该作者
uet_cache 发表于 2013-1-5 20:40
用STVD试下。。

stvd 试过了 对库来说长度没多少变化

使用特权

评论回复
8
uet_cache| | 2013-1-6 10:53 | 只看该作者
你用库可以,要省空间,可以把库中没到用的函数或文件删掉,那样可以省很多空间出来。我都是这样解决空间问题的。。库也一样用。。

使用特权

评论回复
9
杨爱林林| | 2013-1-6 11:08 | 只看该作者
顶楼上。。

使用特权

评论回复
10
明月小厨| | 2013-1-6 12:03 | 只看该作者
有办法;你的浮点算法很恶心;通常可以绕过去的;

使用特权

评论回复
11
王紫豪| | 2013-1-6 12:08 | 只看该作者

使用特权

评论回复
12
奔牛滚滚| | 2013-1-6 12:20 | 只看该作者
uet_cache 发表于 2013-1-6 10:53
你用库可以,要省空间,可以把库中没到用的函数或文件删掉,那样可以省很多空间出来。我都是这样解决空间问 ...

没到用的函数或文件不会被链接进去的吧?

使用特权

评论回复
13
uet_cache| | 2013-1-6 12:26 | 只看该作者
反正源码,随便改。。。

使用特权

评论回复
14
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

使用特权

评论回复
15
shijiajun4| | 2013-1-6 14:38 | 只看该作者
8楼正解

使用特权

评论回复
16
tx2sljm| | 2013-1-6 16:00 | 只看该作者
改变这个世界的不是MBA是工程师。。其实我是一名电工

使用特权

评论回复
17
ljxh401| | 2013-1-6 16:26 | 只看该作者
硬件设置库的话 估计不会占用很大的代码空间
我使用过程中 觉得:
keil stm32 用 stm32 提供的库 没有使用到的函数,应该是没有编译到代码里面的
可能你的程序耗费空间的是 浮点运算的软件库
一般我不在单片机上用浮点数据的

使用特权

评论回复
18
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感觉里面有很都宏定义动用了太多运算

使用特权

评论回复
19
2009chinalj|  楼主 | 2013-1-6 18:02 | 只看该作者
以前在学校时用51写2 000 的代码也不过3K st的库看来还是省着用

使用特权

评论回复
20
uet_cache| | 2013-1-6 18:08 | 只看该作者
解决问题是目标,遇神杀神,遇佛杀佛,,什么样的问题不重要,解决的了,最重要。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

13

主题

177

帖子

0

粉丝