家庭守护者项目小结
这是自己决定要做一名嵌入式软件工程师后的第一个项目。
只是一个练手得小项目,但技术上基本上也涉及到了真正项目上要用到得方方面面。
先谈谈一个嵌入式项目的基本组成,一般来说,一个嵌入式项目,包括了硬件平台,软件系统,机械结构。硬件平台由硬件工程师负责,机械结构由结构工程师负责,软件系统又可以细分为下位机软件和上位机软件,分别由嵌入式软件工程师和软件工程师来完成,当然有时候一个人来做也OK,有些公司还有专门负责UI设计得工程师。在项目进行得过程中,作为一名嵌入式软件工程师,一定要和硬件工程师紧密协作,否则会严重影响项目得进度,上下位机软件那更是要密切配合了。我以前得那家公司,有一对上下位机软件工程师,天天呆在一起工作,日久生情,后来就结婚了,呵呵。还有就是,作为一名嵌入式软件工程师,一定要充分利用芯片厂商的资源,否则将会走很多弯路。
好了,下面开始项目总结。
一、项目需求
家庭守护者系统要实现偷盗监控,火灾监控,如果偷盗发生,报警器响,报警灯以特定频率闪烁,如果发生火灾,报警器响,报警灯以特定频率闪烁。系统通过LCD显示器显示当前温度和环境烟雾浓度,并可通过触摸屏进行一些操作。智能终端和PC机可以通过网线和串口线进行通信。上位机上能够实时读取终端系统信息,包括温度值,环境烟雾浓度,CPU频率,剩余内存,剩余磁盘空间,能够进行软件更新,查询软件版本号,读写SFR,读写EEPROM,设定时间,控制报警器和报警灯等功能。
二、项目分析
根据项目得需求,智能终端系统采用三星公司的S5PV210控制器,搭配1G ddram,1G Nand Flash,DM9000网卡,7寸电容屏LCD,偷盗监控采用红外传感器,火灾监控采用温度传感器和烟雾浓度传感器。下位机采用出色得多用户多任务操作系统linux2.6.35,下位机执行执行两个进程,分别是监控进程和LCD显示进程,其中监控进程又分为多个线程,分别用于各种参数得监控及上下位机得通信等。本文主要关注软件设计这一块。
三、关键技术
1、Linux设备驱动编程:需编写红外传感器驱动,温度传感器驱动,烟雾浓度传感器驱动,eeprom驱动,led驱动,beep驱动,Regeditor驱动等。
2、Linux多线程、多进程及网络编程:组要解决同步得问题及网络通信等问题。
3、QT编程:下位机和上位机均采用QT实现,关键是熟悉QT得各个库得使用,灵活运用信号和槽。
4、uboot、linux、rootfs、tslib、qtopia得移植:需结合特定硬件平台,做相应得修改。
四、具体实现
1、各种移植:uboot、linux、rootfs的移植这里先略过,以后由时间再细细道来(*^__^*)。qt和tslib的移植,其实就是库得移植,主要根据特定硬件平台,做适当修改后,进行交叉编译,再将库拷贝到根文件系统中便OK。同时,要修改/etc/profile文件,添加关于qt和tslib的相关内容(组要是一些软件运行时要用到的环境变量)。这里需要注意几个问题,一是根文件系统得库要和交叉编译器所用的库一致,否则需要将交叉编译器的库拷贝到根文件系统下,用sudo cp ... ... -frd 便ok,同理,如果还缺其他得库,将它们拷贝过来便ok。如果你不知道,所用交叉编译器得库在哪,可以which is arm-linux-gcc一下,再find一下;二是tslib/etc/ts.conf文件中的输入驱动方式要选择好,一般是input子系统。
2、Linux设备驱动编程:红外传感器驱动采用input子系统和platform实现,温度传感器采用混杂设备驱动实现,烟雾浓度传感器采用platform实现,eeprom采用iic总线平台事项,led、beep和regeditor采用platform实现就好了。
3、linux编程:下位机执行执行两个进程,分别是监控进程和LCD显示进程,其中监控进程又分为多个线程,分别用于各种参数得监控及上下位机得通信等,上下位机通信采用UDP soket便可以,简单,五句话就搞定,socket、bind、recvfrom、socket、sendto,虽然UDP是无连接的,但实际上在局域网得通信中,它得表现还是非常不错的。
4、QT编程:QT编程,其实不难,只要有C++基础,再学习一下它得库及信号和槽得思想,便可编写出满足需求得界面软件。
五、小结
做项目得过程中,发现自己还有很多地方需要提高,尤其是多线程、多进程,大型项目软件模块化技术,驱动编程这些地方。以后要再接再厉,做一名合格得嵌入式软件工程师。