打印

一线研发之声 之 C程序的软件分层,看您躺枪没?

[复制链接]
楼主: sedatefire
手机看帖
扫描二维码
随时随地手机跟帖
41
sedatefire|  楼主 | 2013-8-3 21:24 | 只看该作者 回帖奖励 |倒序浏览
worldsing 发表于 2013-7-28 07:50
flash 和ram 足够大时封装没有压力

stxxx.h我基本不用,一个printf在8K的flash中几乎吃了一半。 ...

printf可以有简单版本的哦,看你的编译器有没有支持缩减版的标准c lib,研究一下呗。
因为像%f就很少人使用,我知道IAR就有

使用特权

评论回复
42
sedatefire|  楼主 | 2013-8-3 21:54 | 只看该作者
**kfu 发表于 2013-8-3 20:17
何止躺枪,简直是当场死亡

你倒是坦白啊,当年我也是浑身中枪过来滴

使用特权

评论回复
43
worldsing| | 2013-8-4 13:30 | 只看该作者
sedatefire 发表于 2013-8-3 21:24
printf可以有简单版本的哦,看你的编译器有没有支持缩减版的标准c lib,研究一下呗。
因为像%f就很少人使 ...

我自己改的printf只用了840字节,不依赖库

使用特权

评论回复
44
ZG11211| | 2013-8-4 21:39 | 只看该作者
看的不是很懂,但是感觉楼主说的很好听,自学C语言的,能大致看懂一点,多学点总没坏处,☺

使用特权

评论回复
45
john_lee| | 2013-8-5 02:40 | 只看该作者
函数指针作为模块间的接口,虽然使用比较广泛,但它的局限性也很大,主要集中在开销和效率方面,其实是易用性方面。

使用特权

评论回复
46
zhuhai2004| | 2013-8-5 08:43 | 只看该作者
说得很中肯,请问如果各个模块之间非得有数据需要传递,如果实现?总不会为了传递个参数就调用一个函数吧.

使用特权

评论回复
47
sdwys| | 2013-8-5 09:22 | 只看该作者
写详细点,形成个浅显易懂的PDF就好了。

使用特权

评论回复
48
金融小数| | 2013-8-5 10:02 | 只看该作者
楼主这编程思想在速度快、容量大的MCU上使用还可以,但是你将这种编程思路放到容量小于16K的MCU上去用用试试?

你这种思路编出来的代码很大,你使用的MCU的容量就要大,这样价格就上去了,你看看你的老板同意不同意?

印度的编程思路就跟你的一样,以前我拿到一个印度工程师编写的代码,编译以后的二进制文件有14K多,MCU的总容量是16K,我们要在他的代码上添加功能,大概需要5~6K的容量,你想想能搞么?

我们对印度工程师的代码进行修改优化,最后只有不到9K,里面就是分层思想,他们竟然搞了3个分层,就这些分层占用了将近4K啊!

最近在看ST的一些Demo程序,发现里面也是计算机的那种分层思想,他们的说明是,客户在使用这个代码时,只需在这个代码的基础继续添加自己的代码就行,可是他这个代码已经有4K之多了,芯片容量才8K。我给它修改了,现在只有1K多。

分层有时会害死人的!

使用特权

评论回复
评论
zyj9490 2013-10-14 00:02 回复TA
有道理。 
49
john_lee| | 2013-8-5 10:09 | 只看该作者
金融小数 发表于 2013-8-5 10:02
楼主这编程思想在速度快、容量大的MCU上使用还可以,但是你将这种编程思路放到容量小于16K的MCU上去用用试 ...

这位老弟说的是实情,软件分层的概念是很好,但实现的方法却不是那么简单的,函数指针不是包治百病的灵丹妙药。

使用特权

评论回复
50
highgear| | 2013-8-5 10:56 | 只看该作者
分层还只是软件设计中最基本的思想, 害死人估计是"作坊"或”山寨“工程师的说法。

对于一般的单片机应用, 软件并不复杂,代码量也小, 一般的工程师能够掌控全局,没有分层等等的必要性,就如仅有几个员工的作坊不会设置若干管理层一样的道理。但是,技术在不断的发展,软件规模越来越大,越来越复杂, 软件设计的重要性就越来越突出, 硬件成本与人力成本比越来越低。即使从个人发展的角度看,"害死人" 这种想法也显得目光不够长远, 总不能长期待在低技术领域中, 否则迟早会被后来者鄙视并淘汰。

再看印度人或st 的demo,  在我看来是值得赞赏的, 一个清晰合理的软件框架的价值远远高于那一点点程序空间,特别是对于中大型的软件的后期维护与升级来说。

使用特权

评论回复
51
金融小数| | 2013-8-5 11:06 | 只看该作者
highgear 发表于 2013-8-5 10:56
分层还只是软件设计中最基本的思想, 害死人估计是"作坊"或”山寨“工程师的说法。

对于一般的单片机应用 ...

分层在编程思路是很好,可是也要看用在什么场合。

印度人的代码我是不敢恭维,ST的代码思路很好,遵循软件编程思想,对应芯片的速度,容量大时,是不错。

但是编写的代码与思路、系统架构又是另外一回事了,好的架构,编写的代码不行,就无语了。

ST的那些Demo就没有考虑用户的实际情况。就死所谓的“本本主义”。

理论要联系实际才能发挥巨大的效用。

使用特权

评论回复
52
highgear| | 2013-8-5 11:24 | 只看该作者
印度人的代码从微观角度看, 那是一个烂字, 但是对于大型软件从宏观角度去看, 远比中国人做的好。

使用特权

评论回复
53
john_lee| | 2013-8-5 11:43 | 只看该作者
没有人反对软件分层设计的思想,但分层设计造成的开销增大和效率下降的副作用的事实,也是不容置疑的,只是这种副作用的严重程度在实际的项目中能不能承受而已。
分层设计思想只是一个概念,长期以来,软件设计大师们费尽心机,研究出各种实现方法,都是力求把副作用降到最低。
楼主能够从实践中自己总结一些经验,很是可贵,但到了这个阶段,可以更加深入地了解一些良好的实现方法,对比一下,相信楼主会有全新的体会和认识。

使用特权

评论回复
54
草民| | 2013-8-5 21:58 | 只看该作者

使用特权

评论回复
55
sedatefire|  楼主 | 2013-8-5 22:49 | 只看该作者
john_lee 发表于 2013-8-5 11:43
没有人反对软件分层设计的思想,但分层设计造成的开销增大和效率下降的副作用的事实,也是不容置疑的,只是 ...

哈,好开心有人出来表达异议
个人觉得,m3的时代来临,没有51的静态栈结构
这是一个mcu程序要发生变革的时代。

使用特权

评论回复
56
sedatefire|  楼主 | 2013-8-5 23:10 | 只看该作者
金融小数 发表于 2013-8-5 10:02
楼主这编程思想在速度快、容量大的MCU上使用还可以,但是你将这种编程思路放到容量小于16K的MCU上去用用试 ...

cortex-M0/M3的时代来临

使用特权

评论回复
57
l50211| | 2013-8-6 10:41 | 只看该作者
持续学习中!

使用特权

评论回复
58
金融小数| | 2013-8-6 10:50 | 只看该作者
sedatefire 发表于 2013-8-5 23:10
cortex-M0/M3的时代来临

本来M0/M3是快了,处理事件时间也变短了,你再来个分层,结果把处理事件的速度搞得和原来速度的8位机一样,那要M0/M3干什么?

就好像苹果手机,苹果公司拼了老命把手机搞薄了,你在贴个膜,加个外套。

使用特权

评论回复
59
gymbunny| | 2013-8-6 17:00 | 只看该作者
“第一枪: 许多工程师习惯把全局变量extern出来放到.h里面,这里我要很明确的不怕得罪人地表达: 我鄙视这种不成熟的做法。”
既然在该模块(.c文件)定义了全局变量,那肯定就是希望开放出去大家都使用的,不extern出来放到.h里面,其他模块怎么使用?如果仅仅使用在该模块内部,那可以定义成static类型。 请指教!

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
xiang2580 + 2 让LZ在头文件定义吧!我也找不到第二方法,.
60
lxyppc| | 2013-8-6 22:28 | 只看该作者
楼主所言甚是。

使用特权

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

本版积分规则