打印

软件思想问题

[复制链接]
6386|44
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
logokfu|  楼主 | 2013-1-8 01:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 **kfu 于 2013-1-8 01:34 编辑

一直以来做项目,都是自己琢磨,然后自己写程序。感觉这样很累,进步也很慢,有种局限性。感觉在闭门造车。心里很不安。

大家都知道,对于刚学单片机的人来说,刚开始研究的不是程序的架构和算法,刚开始只是需要学会单片机的内部的各种资源怎么操作。到了后期熟练以后,就要开始往软件的架构后算法上发展了。

其实难度更大的就是对于一些新鲜的从未做过的项目。因为你没有做过,所以有些软件上的技巧可能你就不会知道(被操作的器件不同,可能会牵扯到各种算法的程序)。


举个简单的例子。比如AD采集。对于新手来说,如果第一次做的话,肯定往往都是直接采集一次AD然后直接做动作。这样其实AD采集本身是准的。但是要结合实际环境因素,比如干扰之类的信号。往往做出来的东西是不能正常使用的(会存在误动作)。因此就会考虑到采用软件滤波算法。当然软件滤波算法,这个凡是做过开发的朋友肯定都知道。但是对于第一次做的人来说,就会走弯路。需要花一段时间才会考虑到这个问题。因此总会给人一种感觉就是程序当中处处存在陷阱。


当然网上也有很多滤波算法。论坛里面也有人发过一些程序编程思想方面的资料。有的写的都很好。

但是我现在就是还想让大家探讨下这个问题。当然,有好的资料的朋友也可以在下面跟帖推荐。谢谢。

当然我只是举了一个AD采集的例子,大家有什么好的有关编程的例子资料也可以发出来。谢谢。



相关帖子

沙发
forgot| | 2013-1-8 08:38 | 只看该作者
可以多看看 C语言数据结构和算法 之类的书籍
对你思维的提升有很大好处

使用特权

评论回复
板凳
ayb_ice| | 2013-1-8 09:12 | 只看该作者
看UCOSII吧

使用特权

评论回复
地板
dqyubsh| | 2013-1-8 09:34 | 只看该作者
软件编程是个大概念,大的系统当然需要一个团队,殚精竭虑,不断推陈出新,比如,软件架构师就是负责总体架构的新兴职业。

嵌入式系统,远没这么复杂。一般都是单兵作战,凭着程序员个人积累,一两个人即完成软件设计、测试、维护更新。从事VxWorks、DSP实时操作系统的,需要更多投入,不在此列。所以,要想在这个领域有所修为,还是要靠个人的学习,没有一本书可以快速进阶。

个人体会,软件设计还是要一个好的思想,动手之前,对系统的功能、负荷、难点有个恰当的了解和评估,对关键节点要先测试,然后决定软件整体结构。比如,一个485通讯系统,每个从机功能相对简单,那么重点就是通讯,建立一个抗干扰、容错、可靠的通讯协议至关重要,它在从机软件开发中至少占到60%的比重,重要性可以高达90%!这个不是教科书的代码可以解决的,要参照工业上成熟的通讯协议,比如modbus。与此相对,如果只是串口输出调试信息,那就简单了,随便写个代码就搞定了,有经验的人,十分钟就写好了。

至于外围器件接口,ADC,DAC之类的,个人以为没难度。只要线接对了,时序对了,那就很简单,不应该成为问题。

一个采集系统,负荷轻重、是否有较高的实时性要求决定了软件的结构。100Hz采样率、100KHz采样率。1MHz采样率,软件的结构可能完全不同,甚至处理器都要更换。这就得具体问题具体分析,没有一个套路包打天下。

如果想进阶,多看看老外的开源代码是非常有帮助的。另外,一些C语言编程思想的书也值得一看,比如,代码大全2……

使用特权

评论回复
5
ZOUWEN1| | 2013-1-8 11:02 | 只看该作者
对于这个问题,根据我十多年的编程经验来说一下吧。
     我们在做开发每个项目的需求都不一样,需要处理完成的任务时间紧,并且高效完成。如何做到这一点?我觉得关键是我们编程的思想及平时积累,才能高效完成。首先是要有分层的思想。我们写的程序大多没有仔细地想透,没有合理地划分任务和层次,经典的是应用层、中间件、驱动层和OS等。每个层完成的任务在设计前需要规划好。并做好各层的接口设计。其次是模块化的思想。平时大家做设计时多积累相应的模块。比如键盘模块、各个通信模块I2C、UART、SPI等等。还有应用层的模块。设计出跨平台的模块来。最后就是基于状态机的设计和面象对象的思想的应用。平时大家接触的事物都有相应的逻辑关系,按状态机来设计使你的设计更具有可读性和可维护性,方便调试。重点放在状态机的设计上,状态的划分、状态的转移的条件、状态进入的处理和离开的处理,在此状态需要完成的任务等。还有面象对象,我们的LED、外部输入和输出部件,都是一个个对象,每个对象的状态变化等,在什么条件打开,什么条件关闭等处理都集中在一起来处理。
还有一个就是要熟悉我们的被控对象和开发平台。只有对被控对象的深入理解才能划分出合理的状态机和层次。开发平台的掌握,对于设计出品质高的程序来说是一个保证,并证系统的资源得到合理的运用。
今后有机会,大家多交流交流。

使用特权

评论回复
6
ZG11211| | 2013-1-8 11:35 | 只看该作者
楼主遇到的问题其实大家都遇到过,所以我个人的做法是要多动手,多实践,不要光停留在理论和仿真上面,实践很重要。仿真是仿不出实际的干扰和发热等因素的。

使用特权

评论回复
7
airwill| | 2013-1-8 12:14 | 只看该作者
这个提法好啊. 先坐冰冷的地板角落倾听

使用特权

评论回复
8
原野之狼| | 2013-1-8 12:29 | 只看该作者
找点开源软件看看   不要闭门造车

使用特权

评论回复
9
渤海三叠浪| | 2013-1-8 12:37 | 只看该作者
软件写的差很正常  没几个写的好的 除了少数

使用特权

评论回复
10
skm2008| | 2013-1-8 12:43 | 只看该作者
实践才是硬道理

使用特权

评论回复
11
shaomeicai| | 2013-1-8 12:56 | 只看该作者
果然是实践出真知啊~

使用特权

评论回复
12
红金龙吸味| | 2013-1-8 14:23 | 只看该作者
呵呵,可以关注我的博客。

使用特权

评论回复
13
528388812| | 2013-1-8 15:00 | 只看该作者
任何事情都是需要慢慢来的,不是一天两天就能完成的,只要努力,相信有天会到达自己想要的地步

使用特权

评论回复
14
gyh974| | 2013-1-8 16:46 | 只看该作者
大家都非常有见地,好多高手

使用特权

评论回复
15
mochou| | 2013-1-8 18:38 | 只看该作者
不错,不错,多看老外编程书。

使用特权

评论回复
16
logokfu|  楼主 | 2013-1-8 20:06 | 只看该作者
本帖最后由 **kfu 于 2013-1-8 20:18 编辑
红金龙吸味 发表于 2013-1-8 14:23
呵呵,可以关注我的博客。


你写的**我看过,还不错,你说的问题。我基本都走过弯路。好再我早已改变了坏习惯写法。都是自己摸索的。所以看见你的**更是印证了我的想法。产生了共鸣。但是我在公司就不行。公司人少,气氛太死。同事之间没有人交流,都是跟忙各的,感觉在恶性循环。

使用特权

评论回复
17
logokfu|  楼主 | 2013-1-8 20:16 | 只看该作者
比如系统简单的,程序代码可以随便点,只要实现功能就行的。但是假如日后要是需要扩展功能的话,或者要裁剪功能的话,之前的程序架构写法可能就不适用了。
因此现在需要尽可能将自己的程序写的容易扩展,裁剪。这个我想对于新手来说肯定是困难的。但是有经验的工程师,毕竟都是过来人了,这么多年了,肯定都有了自己的一个套路了。

尽管不同系统的软件是不同的。但是我想程序的写法还是有规律可循的。因此想让大家谈谈自己的方法。当然论坛里面有相关的**。好多版主可能都写过。

希望大家能够产生共鸣,让新手稍走弯路。

使用特权

评论回复
18
ZOUWEN1| | 2013-1-8 22:30 | 只看该作者
做开发是玩出来的,强调多实践。但到了一定的高度,就是如何利用最少的时间,写出高效可靠的代码来。

使用特权

评论回复
19
lzqxs89| | 2013-1-8 22:32 | 只看该作者
当遇到问题,虚心向别人请教,能够提高效率!

使用特权

评论回复
20
lzqxs89| | 2013-1-8 22:34 | 只看该作者
ZOUWEN1 发表于 2013-1-8 11:02
对于这个问题,根据我十多年的编程经验来说一下吧。
     我们在做开发每个项目的需求都不一样,需要处理完 ...

学习了。谢谢分享

使用特权

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

本版积分规则

76

主题

2646

帖子

7

粉丝