打印
[AVR单片机]

请教:单片机程序如何瘦身?

[复制链接]
2071|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shuidi_wangdan|  楼主 | 2013-4-28 09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
airwill| | 2013-4-28 12:51 | 只看该作者
这是个技巧和智慧的考验, 也是对编译器熟悉程度和算法研究的深入程度的考验.

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!
板凳
NE5532| | 2013-4-28 12:57 | 只看该作者
精简代码,用汇编改写部分底层函数,当然能从顶层上节省代码,省得最多,简单来说就是,能一句话写完的,就别整一大圈去绕。比如有人喜欢用操作系统来写跑马灯,就是属于浪费的典型。

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!
地板
shuidi_wangdan|  楼主 | 2013-4-28 14:44 | 只看该作者
有没有一些经验分享一下

使用特权

评论回复
5
huangxz| | 2013-4-28 22:55 | 只看该作者
楼主这个问题很难回答,基本靠思路.比如尽量不使用库函数,不用复杂运算,模型简化....等等,

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6 赞一个!
6
dirtwillfly| | 2013-4-29 09:58 | 只看该作者
这个课题可以深入研究一下

使用特权

评论回复
评论
john_lee 2013-4-29 23:22 回复TA
是的,要真正搞透彻并不容易,侧重点不同,优化的手法也不同,从算法数据到程序架构,都有值得推敲之处。 
7
qin552011373| | 2013-4-29 21:36 | 只看该作者
dirtwillfly 发表于 2013-4-29 09:58
这个课题可以深入研究一下

是滴啊  老兄可以发帖指点一下咯

使用特权

评论回复
8
dirtwillfly| | 2013-4-29 21:49 | 只看该作者
qin552011373 发表于 2013-4-29 21:36
是滴啊  老兄可以发帖指点一下咯

楼上已经说了一些方法了。
另外编译器对程序的优化也可以设置为对占用空间优化
具体一些情况要具体去研究才行的:L

使用特权

评论回复
9
dqyubsh| | 2013-4-29 23:08 | 只看该作者
如果是GCC的,改成IAR,立马瘦一大块。

使用特权

评论回复
10
qin552011373| | 2013-4-29 23:51 | 只看该作者
dirtwillfly 发表于 2013-4-29 21:49
楼上已经说了一些方法了。
另外编译器对程序的优化也可以设置为对占用空间优化
具体一些情况要具体去研究 ...

估计都能写本书出来吧。。。

使用特权

评论回复
11
john_lee| | 2013-4-30 10:35 | 只看该作者
对于上层应用程序来说,写出优化的程序是比较容易的,因为上层程序基本上都是该干什么事就干什么事,程序的重用性较低。
而对于底层和中间层的程序,如驱动、功能组件等等,会更多地考虑重用性,这个就相当复杂了,应用程序对组件的使用是千差万别的,在某个项目里,底层的这个地方需要完成的逻辑可能就是一句话的事情,但在另一个项目里,同样的地方,可能就需要附加一堆逻辑。如果底层就整死了一句话,那么需要底层附加功能的项目,就只能在应用层自己实现,这可能会很别扭(因为逻辑上那些代码就应该属于底层的),甚至可能由于底层的操作时序和代码封装导致无法在应用层中实现。“能一句话写完的,就别整一大圈去绕。”这个说法在应用层能够成立,但在底层可能就意味着降低了重用性。
如何让底层逻辑去适应不同层次的应用需求?目前普遍的做法都不是很完美,比如有些底层会在要求逻辑变化比较大的地方,采用回调函数的方法,提供一个切入点,让其它(同层或更高层)的程序能够参与处理,而保持了底层的独立性。但回调的时间开销和空间开销要比普通函数大,如果底层需要使用几十个甚至成百上千的回调,那么总的开销将非常巨大,有时是不可接受的。我觉得这个(回调模式)是对整个程序优化影响比较大的地方,也是比较困难的地方。

使用特权

评论回复
12
zezy371| | 2013-5-6 13:19 | 只看该作者
楼主可以建议大家从大系统(不如)C语言要几千行的,拿一个出来让大家侃侃,发表一下大家的智慧。

使用特权

评论回复
13
cool_coder| | 2013-5-8 17:22 | 只看该作者
研究一下编译器的speed/size优化选项吧,应该会有所启发。很多时候,较高的运行速度和较小的代码长度是不可兼得的。

使用特权

评论回复
14
shuidi_wangdan|  楼主 | 2013-5-10 10:41 | 只看该作者
本帖最后由 shuidi_wangdan 于 2013-5-10 10:48 编辑

最近几天太忙了,都没时间过来,看到大家的评论很受启发,程序瘦身:1,设计时就把代码用到最精。这时设计,底层代码,我觉得最关键,它左右着应用层代码的复杂度。2,升级代码时,对代码的最精处理。这时的修改一方面对代码“缺陷”升级,一方面是对代码代码功能的升级,但会涉及到芯片的内存,这时的“瘦身”我觉得最考验。还有对代码工具(编程语言,编译软件)使用的灵活性。

使用特权

评论回复
15
shuidi_wangdan|  楼主 | 2013-5-10 10:43 | 只看该作者
john_lee 发表于 2013-4-30 10:35
对于上层应用程序来说,写出优化的程序是比较容易的,因为上层程序基本上都是该干什么事就干什么事,程序的 ...

深受启发!!

使用特权

评论回复
16
john_lee| | 2013-5-29 01:48 | 只看该作者
本帖最后由 john_lee 于 2013-5-29 01:51 编辑
zezy371 发表于 2013-5-6 13:19
楼主可以建议大家从大系统(不如)C语言要几千行的,拿一个出来让大家侃侃,发表一下大家的智慧。 ...

要大系统?USB 协议栈算不算大?google code 上有一个开源的 USB 协议栈软件,http://code.google.com/p/lestl/source/browse/usbd/core.hpp,大家可以侃侃,几千行是有的,不过这个程序是用 C++ 写的,可能门槛要高一点点。

使用特权

评论回复
17
小流星abc| | 2013-6-7 09:26 | 只看该作者
我也想知道如何精简程序

使用特权

评论回复
18
gdxizhilang| | 2013-6-19 14:04 | 只看该作者
精简代码是被逼出来的,到了那个地步,你自然就会了。

使用特权

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

本版积分规则

个人签名:奇葩满天下,不分你我他! 奋斗!https://bbs.21ic.com/static/image/smiley/chubby/17.gif[/url]

65

主题

549

帖子

3

粉丝