我的项目总结

我的项目总结

        经过近一个月的时间,我们的最后一个项目《基于Linux B/S架构的物联网仓库管理系统》最终得以实现。基于Cortex-A8三星s5pc100平台构建核心服务器,通过低功耗的ZigBee技术将多个仓库中CortexM0采集到的数据发送到控制平台,并利用Internel、WiFi、GPRS等手段实现物联网,最终实现物联网仓库管理系统。

项目的具体时间是2月24号到3月24号,刚开始,我们13101期10个学员分成两个组,我和黄凯是两个组组长。在项目的初期,指导老师刘金辉老师和万鹏老师让我们花四天时间模拟完成了一个《基于C/S架构的员工信息管理系统》。他让我们完全按照公司中项目开发的流程来设计:方案提出,方案讨论,可行性分析,需求分析,概要设计,详细设计,代码实现,测试等等。这是任何一个软件开发必备的流程。也许是第一次做项目,大家显得很有激情,经过激烈的讨论,排除了几个不太可行的方案,最后得到一个比较好的方案。在前面说的项目开发的几个阶段,我们都要有对应的文档。项目开发时,我发现了一个问题,好像大家都不怎么在乎文档,而且不愿意写文档,也许是我学过《软件工程》的原因,我很重视项目中产生的文档,因为这是我们项目开发的依据,也是大家经验的总结,文档就是一个设计指导书。不愿写文档也是我们“中国式软件开发”的典型,都只注重结果,不在乎中间过程。还有一个问题,就是大家不喜欢总结,这是我最不能容忍的地方。大家喜欢问问题,这是好事。但是我不希望大家总问一些“相同”问题。掉到坑里不要紧,最怕的是多次掉到同一个坑里!把自己遇到的问题总结归纳一下,下次不再犯同样的错误,这才是真正的学习。

       物联网项目正式开始,正如大家想的,首先是方案的提出。在方案设计这个环节,经过两天的讨论,在老师的指导下,最终确定了最后的方案。说实话,方案的设计真的很重要,它是一个项目的指导方针。方案设计成功与否直接决定着整个项目的成败。

       方案设计好了之后,经过对需求的分析,我们知道了整个项目模块的划分。整个项目细分为系统移植,摄像头,GPRS,WIFI,M0主程序,A8主程序,HTML和CGI,BOA服务器,SQLITE数据库等具体的小模块。由于我们两个小组一共才10个人,每个组5人,完成整个项目的难度有点大,时间也比较紧,所以,我们向老师提意见,合并两个小组为一个小组,这样每个人都有自己的模块,而且有时间深究自己的模块。在模块的划分这一阶段,感觉自己没做好。首先是不熟悉项目中每个模块的任务量有多重,导致后面的有的组员很忙,有的组员很闲。其实,项目中,系统移植和WIFI可以由1人做;摄像头1人做;GPRS和BOA服务器1人做;HTML和CGI一个人完成;Cortex M0 可以分给3个人完成;剩下的人完成数据库和A8主程序。

       在项目的任务划分时,出现了一些矛盾。也许是大家以前没有做过大的项目,没有什么项目经验,所以有一些组员不按照组长的分配,自己随心而行。这一点,非常不好,在以后的工作中,每次项目划分和任务的安排,项目经理都心中有数,如果大家都想干什么就干什么,估计我们早就被开除了!项目经理安排项目是有自己的想法的,肯定不是随意分配的!所以,以后无论是什么工作,一切行动要听指挥!

       在项目过程中,我们分派了一个额外的任务,就是每天在做完项目之后,留一点时间做一下总结,总结一下我们一天下来,在项目中遇到的问题,是怎样解决的。有什么收获和感悟。经过几天的实践,发现大家大多都是在“打酱油”,敷衍了事,把这个当作交差一样。唉!这点,我们需要改进!

       我负责的模块是摄像头模块,摄像头模块分为摄像头驱动程序设计和摄像头应用程序设计。当然,主要是驱动程序设计。要弄懂摄像头驱动,需要有弄懂四个前提:

  1. 摄像头的工作原理和Camera控制器的工作原理
  2. platform_device和platform_driver工作原理
  3. Linux内核V4L2驱动架构
  4. Linux内核I2C驱动架构

其中,对于第二点platform_device和platform_driver工作原理和第四点Linux内核I2C驱动架构,由于我们选过,所以我还算比较清楚。对于剩下两点,我们需要查询摄像头相关资料,了解摄像头开发的流程,掌握摄像头驱动的总体框架等等。具体的就不多说了。在摄像头驱动开发中,我遇到了下面一些问题:

  1. 为什么选择MPLL?
  2. 为什么选择24MHZ
  3. OV9650 的地址为什么是30H?
  4. 如何和FIMC驱动对接 ?
  5. 如何获取内核空间的数据?
  6. 在显示的时候出现了“4分屏”?

当然,这并不是全部,只是我总结出的一些典型。在做项目的时候,何尝不是前面知识的复习和总结?比如说第一个问题,在摄像头驱动中,我们设计的时钟是采用MPLL,为什么用MPLL?什么是MPLL?S5PC100有多少种时钟?为什么需要时钟等等问题,都需要我们去分析解答。在我的嵌入式学习过程中,有一个习惯,就是遇到问题不喜欢问老师。首先是查资料,百度和谷歌是天下间最好的老师,我们遇到的99%的问题,上面都有,多查资料,然后把自己遇到的问题记录下来,总结分析一下,下次遇到类似的问题就不会出错了!这就是学习!那些大牛大神都是从菜鸟中走出来的,只是他们做过的项目多,遇到的问题多,知识积累比我们多。

       遇到问题,不能限于表面,要多问一个为什么。要知其然,更要知其所以然。我们在面试的时候,面试官问的问题大部分是一些基础问题,由于面试是一个选拔的过程,所以有时候,问的问题也比较深,这就要求我们从深入学习。在项目中深入,会发现自己的很多不足之处,然后由点及面,由浅入深的学习。

       前天的中元华电的面试中,项目经理对我说,对于一些问题,他并不要求我们全部答对,他要看我们分析问题的过程是怎样的,面对一个新的问题,该怎样分析,思路是怎样的!我感觉这个很重要,在嵌入式的学习中,不可能都学通学会,我们所要学习的,是怎么去分析问题,解决问题。举一反三,触类旁通,方能达到彼岸!

       在主程序的设计中,我们遇到了一个比较好的问题。我们使用zigbee来让Cortex A8和Cortex M0进行串口通信,在以前的程序中,M0采集的数据里面有温度,湿度,光照,三轴和电源,然后将数据通过Zigbee发送给A8进行处理,A8处理完成之后,将控制信息通过Zigebb发送给M0。而现在,我们不需要那么多功能,只需要传输温度,湿度,光照,三轴,不需要电源管理,只是在M0主程序中注释掉了结构体中的一个成员,结果整个程序就瘫痪了!经过大家的讨论分析才发现,M0和A8的通信是有一定的约定的! M0将结构体打包放到一个数组中间去,然后Zigbee将数组发送给A8对应的Zigbee。A8这端也是采集到的是数组,然后转换成结构体进行接收。A8和M0两端接收和发送都是用的是结构体,所以两个结构体成员要一模一样,包括成员数量,成员名称和安放顺序!而我们注释掉M0端结构体的一个成员之后,就会造成不匹配! 所以,才会产生时而程序运行成功时而失败的现象。

       对于一个项目开发,最困难的,并不是代码的实现,而是模块的划分和模块和模块之间的结构的协调。作为组长,我们应该把握整个项目的主体框架,实时掌控项目开发的进度,对任务进行微调,以保证项目有序地进行下去。作为组员,听从组长的分配和调度,积极参加小组的讨论。独立完成自己的模块任务,如有时间,加深模块的了解!

       项目基本完成了,从这个项目中,我们应该知道,软件开发,并不是仅仅几行代码的事,还需要很多前期和后期的工作,如可行性研究报告,需求分析,详细设计软件测试等等。

       一个项目,能够很好地锻炼我们分析问题,解决问题的能力。在物联网项目中,我们要了解整个项目开发的流程,要知道模块和模块之间怎样契合,要明白整个项目中最大的问题是什么,怎样去分析解决,为什么会有这种问题,以后项目中如何避免同类问题,自己遇到了什么问题,怎么去分析等等。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值