打印
[开发工具]

PIC个人的一小步,不要轻易说空间不够,只是你不懂

[复制链接]
10653|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 Ryanhsiung 于 2011-12-19 19:55 编辑

基础不扎实,写的代码越多发现自己越不足。
原先认为优化没有多大的作用,一直没有去管它。
现有一个PIC的项目,空间快占满了,我一直和领导说空间不够了,要换个单片机了。
今天自己使用优化测试了一下,吓了我一跳。大家看图:
  
一个用的是优化0,一个用的是优化3。用的编译器还是LITE版本的。优化等级最低的那种。
  吓到我了!!
沙发
Ryanhsiung|  楼主 | 2011-12-19 19:51 | 只看该作者

这是官方的图,不用PRO 和STAND我是没钱卖了,没有测试,只能用EVAL测试一下。
刚用C18 EVAL测试18的代码:   12779变成了10599也省下了将近20%的空间,
                                             使用C18 LIT版本变成了12505只省下了一点点。
我的感想 有钱还是要用STAND、PRO版本。

使用特权

评论回复
板凳
Ryanhsiung|  楼主 | 2011-12-19 19:58 | 只看该作者
贴出C18的一些优化说明:(具体请查看C18编译手册)
5.2.3 Optimization 选项
该对话框可单独控制编译器的各种优化 (见图 5-3 有关每种优化的详细信息,请参见《MPLAB®C18 C 编译器用户指南》中的 “优化”一章。
通常来说,在调试代码时,推荐使用 Debug (调试)设置。
5-3 OPTIMIZATION选项对话框



可通过 Generate Command Line (生成命令行)下的单选按钮控制优化。 有关各种优化的详细信息,请参见 MPLAB®C18 C 编译器用户指南》中的 “优化”一章。
有四种设置:
  Disable (禁止) ——禁止所有优化
  Debug —— 启用大多数优化,但禁止一些不利于调试的优化,特别是合并相同字符串、代码排序及 WREG 跟踪。
  Enable all  (启用所有)——启用所有优化。
  Custom (定制)  —— 启用选中的优化。
  Procedural-abstraction passes 过程抽象次数)——可多次执行过程抽象优化。 默认情况下运行 4 次过程抽象。  也可尝试运行更多次过程抽象以进一步缩短代码,但这样做可能会产生太多同时被抽象的函数,导致运行时返回堆栈溢出。 可设置过程抽象次数少于 4 次以使对返回堆栈的影响最小。

使用特权

评论回复
地板
jiabin1024| | 2011-12-21 16:27 | 只看该作者
没人顶啊

使用特权

评论回复
5
一心爱你| | 2011-12-21 16:51 | 只看该作者
MPLAB8.8对不上啊   找C30手册看看去

使用特权

评论回复
6
Ryanhsiung|  楼主 | 2011-12-21 19:06 | 只看该作者
MPLAB8.8对不上啊   找C30手册看看去
一心爱你 发表于 2011-12-21 16:51

我用的是MPLAB 8.63,根IDE应该没关系。

1L是C30的,但没有贴出说明。
  2L是C18的所以对不上!
C30具体看编译器手册

使用特权

评论回复
7
南海渔歌| | 2011-12-23 13:39 | 只看该作者
编译器默认似乎就是9级优化  一般不要改了

使用特权

评论回复
8
NE5532| | 2011-12-23 16:41 | 只看该作者
额,一般来说应该优先考虑人肉优化,编译器优化级别高了,有时候会出莫名其妙的问题,哭都来不及。

使用特权

评论回复
9
yewuyi| | 2011-12-23 17:05 | 只看该作者
本帖最后由 yewuyi 于 2012-1-17 16:40 编辑

1、俺一向都是直接最高等级优化
2、目前为止尚未遇到优化带来的问题,这可能和俺个人写代码比较保守,不喜用一些太高技巧的编写方式有关
3、在PICC上,俺写的C代码最高优化和取消优化的代码量差得不大,一般在5%~8%左右。
4、如果一个C代码在选择编译器优化和不优化之间出现很大的代码量差异超过10%以上,最好先检查一下自己的代码,这其实不是一个好现象。
5、对于多数C编译器来说,优化一般仅限于本文件内部,当采用多文件编写代码方式时,要特别注意变量和函数的安排,多文件间的代码优化要么没有,要么很弱,这也就是为什么要提倡大家多用局部变量,函数尽量少的跨文件调用的原因。
6、俺也是C语言白菜,所以,以上只是体会,未必全对,如不赞同,欢迎指正,拒绝批判。

使用特权

评论回复
10
Ryanhsiung|  楼主 | 2011-12-23 18:45 | 只看该作者
1、俺一向都是直接最高等级优化
2、目前为止尚未遇到优化带来的问题,这可能和俺个人写代码比较保守,不喜用一些太高技巧的编写方式有关
3、在PICC上,俺写的C代码最高优化和取消优化的代码量差得不到,一般在5%~8% ...
yewuyi 发表于 2011-12-23 17:05


我程序中有部分代码未用,所以占用较多的空间。
  现有的C系列编译器好像会将未用代码一样生成在目标代码中,PICC就不知道了

使用特权

评论回复
11
南海渔歌| | 2011-12-23 22:48 | 只看该作者
PICC9级优化下不会有“未用代码”了。5532说得有可能存在,但如果象叶子那样“保守”写,应该不会有问题。

使用特权

评论回复
12
xwhua188| | 2011-12-28 11:56 | 只看该作者
C18的优化我非常的喜欢!开到最高都很好。
C30的优化曾经把我搞疯了,不敢用。

使用特权

评论回复
13
Breming| | 2012-1-13 15:57 | 只看该作者
一直都开到最高,没有发现什么问题,挺好用。。

使用特权

评论回复
14
兰天白云| | 2012-1-17 16:02 | 只看该作者
PICC的优化会比C18强的多,写代码风格严重同意小叶的,从汇编过来的估计都是这样

使用特权

评论回复
15
zc564075839| | 2012-1-27 10:05 | 只看该作者
zc

使用特权

评论回复
16
sjdcz| | 2012-2-1 12:13 | 只看该作者
一直就没改过,因为从来都是够用的。

使用特权

评论回复
17
xiang2586| | 2012-2-4 10:00 | 只看该作者
一直用PRO优化,问题到也没发现。4K空间用C写,但PIC很多1KFALSH的,肯定汇编省。我的编程习惯也是不常用那些技巧难度太高的语句,结构。高了效率或许还真的省了空间。可能就少了份保障。

使用特权

评论回复
18
kvdong| | 2012-2-9 11:59 | 只看该作者
专程来顶顶叶工。
另外问楼主,MC18下能看到你贴的空间使用饼图吗?怎么看?我在MC18下一直手动查看MAP文件来查看使用量的,比较累呵。

使用特权

评论回复
19
laibour| | 2012-5-24 09:06 | 只看该作者
18# kvdong
菜单栏 view ——》Memory Usage Gauge 点开就可以看到

使用特权

评论回复
20
zhuzj2012| | 2012-5-26 10:10 | 只看该作者
学习下

使用特权

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

本版积分规则

认证:嵌入式技术专家
简介:道阻且长,行则将至!

64

主题

4654

帖子

14

粉丝