打印

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

[复制链接]
楼主: sedatefire
手机看帖
扫描二维码
随时随地手机跟帖
61
boltmy| | 2013-8-6 23:03 | 只看该作者 回帖奖励 |倒序浏览
mARK

使用特权

评论回复
62
草民| | 2013-8-7 20:03 | 只看该作者
楼主见解深刻

使用特权

评论回复
63
jimodunanhua| | 2013-8-16 00:11 | 只看该作者
支持啊,支持。

使用特权

评论回复
64
sedatefire|  楼主 | 2013-8-17 11:46 | 只看该作者
自己再顶起来看一看,过了这么多天,回过头来看
恩恩,讲得还是蛮有道理的。

使用特权

评论回复
65
sedatefire|  楼主 | 2013-8-17 11:47 | 只看该作者
可是为何还不精,还不精呢?

使用特权

评论回复
66
sedatefire|  楼主 | 2013-8-17 11:55 | 只看该作者
再来一个,软件分层的一下思想。
1. 上层可以调用下层。  就如同沙发依靠在地板上。

2. 下层不能调用上层。  就如同地板的存在,不依赖于沙发的存在。
  想象一下,在buzzer.c里面,依赖 application.h里面的接口。

3. 下层如果要依赖上一层的存在,没关系,可以用回调指针,在“初始化”的时候由上层传递函数指针下来。
   这个一般是作为一种事件的传导,比如 写入/发送/操作OK,  或者接受成功时往上一层推送数据。

衍生的思想:
1.模块间的联系是低耦合。
沙发对于地板的依赖点越少,要移动到其他房间就越块。
如果沙发像树根一样,盘根错节地长在地板上,“移植起来”是非常痛苦的。

2.模块内的联系是高内聚。
沙发自身内部的结构联系要紧凑/高强度,才能稳定,不会中间塌掉。

使用特权

评论回复
67
dong_abc| | 2013-8-17 15:52 | 只看该作者
说得好。

使用特权

评论回复
68
xtzjkj| | 2013-8-20 09:25 | 只看该作者
学习了,多谢

使用特权

评论回复
69
再见幼稚| | 2013-8-29 21:03 | 只看该作者
表示继续努力中,不会放弃的!

使用特权

评论回复
70
Ztudou2012| | 2013-8-30 09:44 | 只看该作者
找这样的**很久了

使用特权

评论回复
71
qq2941070113| | 2013-10-10 17:08 | 只看该作者
看了ST的DEMO和UCOS的代码. st的代码想 加减 哪个模块都是方便. ucos就不是那么方便.
谢谢楼主.

使用特权

评论回复
72
xlsbz| | 2013-10-10 19:15 | 只看该作者
hwk612167 发表于 2013-7-27 20:58
那好吧,我就是跟着ucos学的。

我也是跟UCOS一样的。目前。我是用51.
我想UCOS主要是因为需求不变化,所以就弄成那样乱糟糟那种。而我的需求相对也变得不多。另外主要考虑我当时的电脑太差了。如果每个C文件都弄一个头文件,编译速度太慢了,难以忍受。
现在换新电脑了。以后弄STM32就打算分开了。

使用特权

评论回复
73
airwill| | 2013-10-11 07:19 | 只看该作者
本帖最后由 airwill 于 2013-10-11 07:23 编辑

软件分层, 说得非常好。
我个人方面,之前玩51基本没有过这个想法。玩 AVR 后,开始萌生,并回头试着改造51代码。
玩 M3 后,进一步深入。起始一般的应用,通常就是驱动层和应用层,没有太多的说道。看到有人大谈对这一点的反对意见。本人觉得不可取,分层未必一定会增加代码量。看看 core_cmX.h 的驱动,全部由宏实现,根本不会增加代码。相反,代码增大后,一方面代码重用性提高,另一方面小耦合的代码有利于编译器的优化效率,可能获得更小代码也说不定。
玩了上位机软件后,特别是读了Windows系统里的一些编程文档后,才更有层次方面深入理解。

不过我是实用主义,并不喜欢死板的遵守“定律”。毕竟玩单片机的(特别是从集约型芯片入手的人),代码效率看得很重。
我认为先要定目标,起码可以是:怎样把事情做得更好。
我的观点是,实践中思索,思索后实践,自我总结中前进,还有一个重要的,善于学习和采用先进思想和方法。
还有要说的:分层之前,我觉得首先要说的就是架构。应该是先把软件的结构理清后再来分层。驱动模块可以被协议层调用,也可以被应用层直接调用。

使用特权

评论回复
74
sedatefire|  楼主 | 2013-10-11 23:02 | 只看该作者
airwill 发表于 2013-10-11 07:19
软件分层, 说得非常好。
我个人方面,之前玩51基本没有过这个想法。玩 AVR 后,开始萌生,并回头试着改造5 ...

有共鸣真好...

使用特权

评论回复
75
meyong08| | 2013-10-13 23:52 | 只看该作者
学习了

使用特权

评论回复
76
zyj9490| | 2013-10-14 00:00 | 只看该作者
本帖最后由 zyj9490 于 2013-10-14 00:13 编辑

LZ在软件功底这么深,能否把市面上主流的MCU的底层驱动打包在一个标准库,对应用层提供一个接口,不用知道底层的东东。我有这个梦想,可懵功力不够。编译时分开也行,在运行时分开也行。

使用特权

评论回复
77
岗本科技| | 2013-10-14 01:20 | 只看该作者
好像就这个热热闹闹点哦

使用特权

评论回复
78
逍遥派掌门| | 2013-10-16 10:42 | 只看该作者
分层的思想和哪种MCU关系不大,和编程者有没有分层的想法关系很大。

咱在8位机的程序里都是采用分层的思路:硬件驱动,业务逻辑(所谓的应用层)。复杂点的话,再加个接口。

特别反感什么51资源不够不能分层什么的,说什么看到计算机软件使用分层的方法,移到M0/M3上来,难道M0/M3的资源
能和计算机比? 和计算机的资源相比,M0/M3那点破资源算啥?

使用特权

评论回复
79
黄小俊| | 2013-10-24 20:18 | 只看该作者

使用特权

评论回复
80
flamone| | 2013-10-25 09:48 | 只看该作者
学习一下,代码结构确实很重要,有时候事倍功半。。。

使用特权

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

本版积分规则