因主要是从事应用软件开发,现在讲的是嵌入式应用软件框架。一般好的程序框架,不单单只是应用软件的框架,是一个系统的。如linux系统架构,由于本人才疏学浅只能自我编写个应用程序的浅见。

1.需要有分离分层的思想,前期规划可能较为复杂,但后期维护极为方便。总体划分:硬件/协议层-->接口管理层-->业务逻辑层

硬件/协议层需要抽象出相应的接口,作为接口管理层或是业务逻辑层根本不关心底层实现。

如现在支持终端输入,要添加键盘,将来还可能接入红外,还有可能接入触摸屏。应该怎么架构呢?

设计输入数据结构如下:

 

大致如下:input_manager.c为输入管理层,管理注册的各个子输入。

 

业务逻辑层只需要GetInputEvent获取各个输入事件。这方面linux底层做的很好。

 

2.要有模块化和产品思想。模块功能要划分清晰。进程线程之间通信要架构清晰,各个模块提供交互的接口。

 

例如ui主要从事配置和查看数据,和进行较为简单的业务逻辑。若要使用ui进行较为复杂的业务处理,使用ui与底层分离的。ui可以与底层共用配置、共用同一份数据库,通过进程间通信与底层进行交互,底层程序单独成套。可供用户选择不带显示屏的web配置,web与底层交互的接口尽量与ui保持一致。

 

框架需要要实现一些常用的封装:

常用功能封装:实现工具类,和帮助类,同时要保存好,(耦合性低)以后开发直接拿出来用。

如自定义弹出框、日志类、系统命令封装等。

.实现定时器任务。至少要支持立即发送或循环发送,发送几次等。很多业务功能实现的过程中,有好多地方会用到定时器,比如某个数据需要定时发送,而有的数据只需要定时发送几次等;

如.线程池封装。经常会需要启动一个临时线程,处理的数据结束之后就自己退出,自动回收资源。其实这个的封装,也是为了业务代码书写的时候不用再去写线程相关打一堆api和参数。

 

数据处理框架:这个功能是处理基础数据用的框架,基本思想上注册回调机制,有了它,业务代码里就不会再出现长长的switch……case了。

 

事件状态管理框架(业务处理框架):这个功能上用于管理系统内部的状态,基本思想上订阅发布机制(也称观察者模式),有了它,代码就不用再去请求一堆状态数据了,只需要把你关注打事件或者状态注册一下,当事件发生时,就主动通知给你了。

 

 

基本就以上几个部分,基于这些年的开发经验,感觉嵌入式上的程序模块分三类:
1. 基础数据采集模块; 

 

提供支持系统业务功能的基础数据,比如导航设备,GPS数据采集的程序可以算这一类。按上述事项,同样只引出数据类接口。


2. 业务数据处理模块。

3. 辅助模块
这部分主要是给业务数据处理模块提供一些辅助功能,比如:数据/参数存储等模块,也就是这些模块是其使用者请求什么他就返回什么,自身不具有复杂的逻辑处理。


分离关注点,消除重复。

 

这短短打两句话,蕴含了多少编程世界的哲学!

 

其中包含编程原则,也包含设计模式的思想,还有代码重构的思想!

 

最后上传份最近写的代码框架:

https://download.csdn.net/download/mingting1323/10372393

 

界面与后台程序分离分层。 
采用模块化思想封装装各个模块,除配置外只使用了个全局变量。
含有gps,
语音模块
v4l2视频模块
定时器线程

 

 

 

Logo

开源、云原生的融合云平台

更多推荐