苦行僧的生活,终于告一段落.数据记录仪样机终于出来了,自己花了近5个月的心血,养大的"孩子",马上就要长大成人了,心里不免有些紧张和兴奋.
当数据记录仪产品立项时,就如同一个重重的石头压在了我的身上,虽然我只是负责部分软件工作,但由于我是整个Team的纽带和桥梁,所以自感责任重大.
x工,是我非常佩服的系统工程师,从最初的需求分析,到具体的功能实现,从系统工作流程,到软件架构,都考虑的非常详尽,使我知道了一个真正做过事情的人是多么的优秀,他那行云流水的思维方式更是给我留下了深刻的印象!我突然觉得,我苦苦寻找了这么多年的老师却近在咫尺.关联,慎思,系统,真的不是一朝一夕可以养成的习惯,它需长时间和事件的累积.
说实话第一次做这么系统的项目,我的信心不是很足,尤其是几年的技术支持工作使我离技术越来越远了!当然这也是我回归技术一个绝好的机会,在这种"私心"的驱动下自己就硬着头皮接了这个项目,我想还总点有个垫背的吧,就这样我把自己技术上的好哥们xx也拉了进来,他同我一起跳入了这个"无底深渊".
x工负责硬件,我们主要做系统软件,我负责SD卡读写和FAT32文件系统以及人机显示界面的软件编写,xx负责控制逻辑和软件流程的编写.
项目伊始,我们走了一段迷茫日子,由于对产品功能需求了解的不够深入,对项目周期估计不足,导致在软件设计上同产品功能需求出现了很大的偏差:
如:读取SD卡非常缓慢,用户根本接受不了.显示界面没有经过仔细的排版和规划,使得菜单界面杂乱无章......就在此时,x工果断的停止了这种无序,不可控的产品研发流程.转向瀑布型的软件开发流程:需求分析--->系统设计(前期已经完成)--->程序设计--->测试--->维护,整个Team花了大量的时间做需求分析,从总体系统需求,显示界面分配格式,显示内容及其函数都做细致的规划和算法分析,同时对系统中的数据结构及其变量做了定义和分配,对系统的工作流程进行了详细的描述.如此深入的需求分析使我们对这个产品有了更深层次的理解.使得我对软件工程中的需求分析,有了更深的理解.永远记得需求分析要占整个软件周期的1/3时间.举一反三,任何事情都是如此!
产品方案确定后,主芯片的选型非常关键,既要满足系统要求,还要考虑的后续的功能升级和所需成本,因为改产品主要做数据采集和汉字点阵LCD显示,所以我们选择了一个资源很好的一款MCU,产品研发接近尾声后才觉得我们的选择是对的,因为在开发过程中会遇到很多意想不到的事情.所以Flash和RAM要留的足够大.
在程序设计上,我们采用了先难后易,系统集成(复用)和分而治之的软件开发策略:
如:FAT32文件系统设计是这个系统中比较复杂的一个软件模块,所以我们采用了软件"复用",拿来主义在网上寻找成熟的FAT32文件系统源码,消化并吸收称自己的东西进而移植到我们Cotex-M3系统中.
同时在做字符串操作时,一定要使用现成的字符串库函数,记得自己开始做字符串比较时竟然自己编写了字符串指针做比较(使用字符串指针只能比较首字节),发现问题后才想到字符串比较函数,用着非常方便.
该系统的显示界面非常复杂,具有3级菜单显示结构,共10个显示页面,同时还有6个人机交互界面!所以我们在做软件设计时采用了分而治之的,先把复杂的问题逐个分解,变成简单的问题,如:把复杂的显示问题用分解成简单的显示的问题,在把简单的显示界面细化,排版,字体选择,润色.然后举一反三到其他的显示界面.
针对这个项目而言,具有两种显示界面,1,2种常规界面,润色排版比较复杂.2,菜单界面相对简单.但显示项的属性也分显性和隐性的.比如,报警和刹车.所以显示外观设计很重要,要站到用户的立场考虑问题,如,产品美观,易用.
程序在任何时候都必须可以控制,避免进入死循环或长时间的做循环操作.使程序无法控制.所以最好的方式就是把任务放在后台运行.采用时间片的方式执行程序.这也是操作系统的基本原理.
1,在做文件打印程序时,最初的程序流程采用,程序独占的方式来执行打印任务,也就是说在执行打印任务时,其他任务不能执行,需要等到打印任务结束后执行,这样做就会使在打印任务执行时,重要的任务不能得到有效执行.后期将打印程序修改为后台打印,算出每条数据的打印时间,每执行一次大循环打印一次数据,从而不耽误其他任务的执行.
通过这个项目,使我更深刻的理解嵌入式产品开发流程和需求分析的重要性:
1,要统筹规划,要有系统思维,大局观(把软件构架先规划好).
2,不要想当然(软件中有些问题怎么处理,白字黑字写清楚,按照要求来做).
3,要与当事人多沟通,有不明白的就要不耻下问(同徐工多沟通),不要经常闭门造车了,把问题消除在萌芽状态.
4,关键的问题要讲细的东西,要讲到点子上.
5,多维数组很好用,觉得就像本书目录和内容,可以很好的分类.
联合体,也不错呦,尤其适合做字节存储项目中.
硬件经验:
1,使用电阻分压24V得到比较器的输入电压,在上面加了一个3.3的稳压二极管,是为了防止电压过高(吸收负脉冲).稳压管工作在反向状态,耐压只有3.3,所以一旦24V短路则马上被击穿.
2,漏电检测火线和零线,火线瞬间进,零线瞬间出.通过电感线圈可以测量出这种变化.
3,LM3S I/O可以兼容5V的系统,从而不需要电平转换芯片.
4,可以通过发光二极管来检测UART/485通信是否正常.完全的数字信号.
永远记得技术是为市场服务的,低成本(比竞争对手成本低),高利润,永远是不二法则,高深莫测的技术不一定是真的技术,只是学院派神乎其神的吹捧罢了.
项目虽然告一段落,但我知道我需要走的路还很长,感谢我的坚持和耐力.收起疲惫的心,要继续前行了!虽然前途未卜,但我相信会很好,因为上帝一定会看到我的努力.
文章评论(0条评论)
登录后参与讨论