嵌入式平台模块间通信架构详解

需积分: 5 0 下载量 77 浏览量 更新于2024-08-26 收藏 777KB DOC 举报
"嵌入式软件通信设计文档探讨了在嵌入式平台上模块间通信的架构设计,包括初始化过程、不同类型的通信方式以及相应的接口设计。文档提到了服务号和服务进程初始化,子业务号和消息处理,以及同步和异步消息的处理机制。此外,还涉及跨服务、跨业务以及同业务的子业务间通信的不同实现方式,并介绍了通信接口、业务接口和共享内存通信的使用。" 在嵌入式系统中,通信架构的设计是关键,因为它确保了各个模块之间的有效交互。文档首先介绍了初始化阶段,其中定义了模块和服务号,如0xXY0000,以及业务号,如0xXYAB00。初始化过程中,服务进程OssInit被启动,创建了业务线程、通信线程、定时线程以及相关数据结构,用于业务通信。调度线程负责消息的接收和处理,它依赖于消息队列和阻塞/非阻塞的机制。 对于跨服务的子业务通信,异步消息通过AsynFD非阻塞发送,而同步消息在发送后会阻塞在SynFD,等待接收方的ACK确认。通信线程通过select监听AsynFD,当接收到消息时,将其放入消息队列并释放RecvSemi,触发调度线程继续处理。 跨业务的子业务间通信,无论是异步还是同步,都是通过消息队列API来实现。发送方将消息放入对端消息队列,同步消息发送方则会在SynFD上阻塞,等待接收方的ACK。这一过程同样依赖于调度线程的调度。 同业务的子业务间通信,子业务自己管理socket,通信线程接收数据后放入消息队列,由调度线程调用相应入口函数处理接收到的数据。 通信接口提供了SSend和ASSend两个函数,分别用于同步和异步消息的发送。这些接口可以指定目标子业务号和消息内容,自动判断使用socket、消息队列还是直接调用来传递信息。 业务接口采用了动态链接库的形式,每个子业务提供封装好的接口,负责业务操作、数据库存取以及消息格式的封装,通过Send接口发送消息。 最后,文档提到了共享内存通信的方式,主服务进程通过DBSrvInit申请共享内存,其他服务进程使用DBCliInit进行访问。共享内存的开头部分是DB控制块结构,用于协调不同进程间的共享数据交换。 该文档详细阐述了嵌入式环境下的模块通信架构,包括其初始化流程、通信机制以及各种通信方式的实现,为嵌入式系统的软件设计提供了重要参考。