1、前言
在熟悉任务调度、 程序分层 和模块化编程关于软件架构、分层和模块设计后,除了函数调用设计中出现的情况外,还会遇到同层模块之前如何进行消息交互,通常是应用层之间。
比如一个设备通过架构设计包含 人机交互应用层模块 (一般会调用按键和显示屏等功能驱动模块)和 通信应用层模块 (一般调用串口、CAN和网络ESP8266等功能驱动模块),两个同层之间的模块如果需要互传数据,一般都是调用各自头文件提供的接口(模块对外提供的接口尽量不要使用全局变量,防止其他模块擅自修改),这样就造成了耦合。
2、解决思路
上述情况,也可以采用回调函数的实现方式进行模块解耦,但是需要引入新的内容,即公共模块Commoon层(包含第三方功能库)。
公共模块主要有各模块都需要使用的类型定义、结构体定义、通用函数或常用宏定义等(通常属于基础类的功能,不会受功能需求和不同平台的影响)。
基于公共模块,为了解决各模块之前的数据交互,可以通过公共模块实现基础类的功能达到各应用层模块解耦的目的。
参考消息队列的方式,可以实现一个生产者/消费者的功能模块(这种可以称作 观察者模式 ,即存在 观察者 和 被观察者 ),即某一模块更新数据后