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

[复制链接]
 楼主| sedatefire 发表于 2013-8-3 21:24 | 显示全部楼层
worldsing 发表于 2013-7-28 07:50
flash 和ram 足够大时封装没有压力

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

printf可以有简单版本的哦,看你的编译器有没有支持缩减版的标准c lib,研究一下呗。
因为像%f就很少人使用,我知道IAR就有
 楼主| sedatefire 发表于 2013-8-3 21:54 | 显示全部楼层
**kfu 发表于 2013-8-3 20:17
何止躺枪,简直是当场死亡

你倒是坦白啊,当年我也是浑身中枪过来滴
worldsing 发表于 2013-8-4 13:30 | 显示全部楼层
sedatefire 发表于 2013-8-3 21:24
printf可以有简单版本的哦,看你的编译器有没有支持缩减版的标准c lib,研究一下呗。
因为像%f就很少人使 ...

我自己改的printf只用了840字节,不依赖库
ZG11211 发表于 2013-8-4 21:39 | 显示全部楼层
看的不是很懂,但是感觉楼主说的很好听,自学C语言的,能大致看懂一点,多学点总没坏处,☺
john_lee 发表于 2013-8-5 02:40 | 显示全部楼层
函数指针作为模块间的接口,虽然使用比较广泛,但它的局限性也很大,主要集中在开销和效率方面,其实是易用性方面。
zhuhai2004 发表于 2013-8-5 08:43 | 显示全部楼层
说得很中肯,请问如果各个模块之间非得有数据需要传递,如果实现?总不会为了传递个参数就调用一个函数吧.
sdwys 发表于 2013-8-5 09:22 | 显示全部楼层
写详细点,形成个浅显易懂的PDF就好了。
金融小数 发表于 2013-8-5 10:02 | 显示全部楼层
楼主这编程思想在速度快、容量大的MCU上使用还可以,但是你将这种编程思路放到容量小于16K的MCU上去用用试试?

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

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

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

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

分层有时会害死人的!

评论

有道理。  发表于 2013-10-14 00:02
john_lee 发表于 2013-8-5 10:09 | 显示全部楼层
金融小数 发表于 2013-8-5 10:02
楼主这编程思想在速度快、容量大的MCU上使用还可以,但是你将这种编程思路放到容量小于16K的MCU上去用用试 ...

这位老弟说的是实情,软件分层的概念是很好,但实现的方法却不是那么简单的,函数指针不是包治百病的灵丹妙药。
highgear 发表于 2013-8-5 10:56 | 显示全部楼层
分层还只是软件设计中最基本的思想, 害死人估计是"作坊"或”山寨“工程师的说法。

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

再看印度人或st 的demo,  在我看来是值得赞赏的, 一个清晰合理的软件框架的价值远远高于那一点点程序空间,特别是对于中大型的软件的后期维护与升级来说。
金融小数 发表于 2013-8-5 11:06 | 显示全部楼层
highgear 发表于 2013-8-5 10:56
分层还只是软件设计中最基本的思想, 害死人估计是"作坊"或”山寨“工程师的说法。

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

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

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

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

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

理论要联系实际才能发挥巨大的效用。
highgear 发表于 2013-8-5 11:24 | 显示全部楼层
印度人的代码从微观角度看, 那是一个烂字, 但是对于大型软件从宏观角度去看, 远比中国人做的好。
john_lee 发表于 2013-8-5 11:43 | 显示全部楼层
没有人反对软件分层设计的思想,但分层设计造成的开销增大和效率下降的副作用的事实,也是不容置疑的,只是这种副作用的严重程度在实际的项目中能不能承受而已。
分层设计思想只是一个概念,长期以来,软件设计大师们费尽心机,研究出各种实现方法,都是力求把副作用降到最低。
楼主能够从实践中自己总结一些经验,很是可贵,但到了这个阶段,可以更加深入地了解一些良好的实现方法,对比一下,相信楼主会有全新的体会和认识。
草民 发表于 2013-8-5 21:58 | 显示全部楼层
 楼主| sedatefire 发表于 2013-8-5 22:49 | 显示全部楼层
john_lee 发表于 2013-8-5 11:43
没有人反对软件分层设计的思想,但分层设计造成的开销增大和效率下降的副作用的事实,也是不容置疑的,只是 ...

哈,好开心有人出来表达异议
个人觉得,m3的时代来临,没有51的静态栈结构
这是一个mcu程序要发生变革的时代。
 楼主| sedatefire 发表于 2013-8-5 23:10 | 显示全部楼层
金融小数 发表于 2013-8-5 10:02
楼主这编程思想在速度快、容量大的MCU上使用还可以,但是你将这种编程思路放到容量小于16K的MCU上去用用试 ...

cortex-M0/M3的时代来临
l50211 发表于 2013-8-6 10:41 | 显示全部楼层
持续学习中!
金融小数 发表于 2013-8-6 10:50 | 显示全部楼层
sedatefire 发表于 2013-8-5 23:10
cortex-M0/M3的时代来临

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

就好像苹果手机,苹果公司拼了老命把手机搞薄了,你在贴个膜,加个外套。
gymbunny 发表于 2013-8-6 17:00 | 显示全部楼层
“第一枪: 许多工程师习惯把全局变量extern出来放到.h里面,这里我要很明确的不怕得罪人地表达: 我鄙视这种不成熟的做法。”
既然在该模块(.c文件)定义了全局变量,那肯定就是希望开放出去大家都使用的,不extern出来放到.h里面,其他模块怎么使用?如果仅仅使用在该模块内部,那可以定义成static类型。 请指教!

评分

参与人数 1威望 +2 收起 理由
xiang2580 + 2 让LZ在头文件定义吧!我也找不到第二方法,.

查看全部评分

lxyppc 发表于 2013-8-6 22:28 来自手机 | 显示全部楼层
楼主所言甚是。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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