嵌入式软件架构设计( 二 )


任务之间通信
网关软件中的普通任务相互隔离,所有普通任务只与消息推送任务进行数据交互,消息推送任务将消息推送给相应任务 。各个任务之间的信息交互模式如下:

嵌入式软件架构设计

文章插图
 
这种设计模式为中间者模式 。在中间者模式,对象之间不能直接通信,而是间接地通过中间者进行通信 。中间者收到信息后,再将信息转发给相关对象,这样减少了对象之间的相互依赖 。中间者模式有以下优点:
1、对象之间是松耦合
2、将多对多的关系通过中间者转换成一对一的关系
3、修改一个对象,不需要考虑其它对象通信适应问题 。
消息推送任务采用订阅与发布机制 。普通任务状态改变向消息推送任务发布消息,推送任务获取发布任务的发布信息名称,并一层检查其他任务的订阅信息名称,是否包含发布信息名称,然后将信息推送给相关任务 。这样减少了任务之间的耦合,提高了软件的扩展性 。消息推送任务代码如下:
 
嵌入式软件架构设计

文章插图
 
业务控制
网关软件使用模块化设计,普通任务不参入软件的整体业务控制,每个普通任务只负责完成模块内部的控制逻辑,如RTC任务时负责设置时间和读取时间,GPIO只负责读取IO口和控制IO口 。软件设计了一个特殊的逻辑控制任务,这个任务负责记录软件整体状态,并通过发布消息改变其他的任务的状态 。这种也是使用的中间者模式 。逻辑框图如下:
嵌入式软件架构设计

文章插图
 
逻辑控制任务是通过发布特定的消息来实现对子任务的控制,子任务状态改变后也是通过发布消息通知逻辑控制任务 。
逻辑控制任务分析
网关软件中逻辑控制任务控制整个程序运行状态,因此逻辑控制任务设计非常关键,逻辑控制任务设计软件设计框架如下:
嵌入式软件架构设计

文章插图
 
子任务将信息发布给逻辑控制任务,由于不同的子任务发布的消息格式不同,数据长度不同,因此逻辑控制任务先用指令归一化接口,将不同模块的不同格式的数据转换成逻辑任务中统一的数据格式如:指令类型+指令数据 。代码如下:
嵌入式软件架构设计

文章插图
 
指令归一化处理后将指令放入队列缓存器中,然后指令过滤器读取队列缓存器中的指令进行处理,这种设计模式为命令模式,这种设计模式可以把一个命令的形成和执行在时间上去耦,命令的生成和执行可以在不用时间完成 。
指令过滤器从指令队列中读取指令,并一层一层处理指令得到有效的执行指令,这种设计构架为过滤器构架,代码如下:
 
嵌入式软件架构设计

文章插图
 
经过逻辑处理后产生一些控制指令,并将控制指令放入队列缓存,指令分发处理模块读取控制指令,根据控制指令类型发布消息给相应的任务 。
总结
网关的软件框架基本描述完了,希望获取源码的朋友们可以在评论区里留言,我将提供学习源码(删减部分与商业相关代码) 。
总结一下关键词:
模块化设计,分层设计,单一原则,接口隔离原则,中间者模式,订阅发布,归一化,命令模式,过滤器架构
嵌入式软件架构设计

文章插图
 




推荐阅读