当前位置:网站首页>小猫爪:AWR294x学习笔记02-AWR294x之DPM&IPC
小猫爪:AWR294x学习笔记02-AWR294x之DPM&IPC
2022-08-04 05:58:00 【小猫爪】
小猫爪:AWR294x学习笔记02-AWR294x之DPM,IPC和Mailbox
1 前言
这一章稍来微介绍一下AWR294x的核间通信,即DPM,IPC以及Mailbox。
2 结构关系
首先得搞清楚DPM,IPC和Mailbox三者关系,如下图:
其中Mailbox很好理解,它其实就是一个专门实现核间通信的硬件外设;而IPC也很容易理解,它其实就是Mailbox的驱动软件;至于DPM它则是基于IPC搭建的一个可执行的软件架构,基于DPM则可以很轻松的实现核间通信管理。
3 MailBox简介
MailBox是AWR294x的一个硬件外设,它的原理也是非常的简单,其结构如下图:
通信原理为:每两个核之间都有两块专属RAM,其实一块用来核A读,核B写,而另外一块则是核A写,核B读,因为AWR294x里面有三个独立运行的核,所以这样的RAM共有6块。如果一个核需要给另外一个核发送信息的时候,那么发送核只需要在两个核的专属RAM中事先准备好需要传输的数据,然后再主动发送一个可以触发接收核RECEIVER中断的信号告知接收核有新数据需要读取,接收核读取完RAM中的数据后,则发送一个可以触发发送核Acknowledgment中断的信号告知发送核消息已读取,至此一次完整的核间通信完成。
4 IPC简介
IPC其实就是MailBox的底层驱动,,打开mmWave的SDK包,可以发现IPC分为了ipc_notify和ipc_rpmsg,其中ipc_notify实现了发送信号量,而ipc_rpmsg则是在ipc_notify的基础上实现了发送数据包。
在这里就不多说什么了,感兴趣的小伙伴可以去翻看一下源码了解一下。
5 DPM详解
DPM(Data Path Manager)是一个完整的软件架构,或者说是一个软件服务,只需要将其移植进软件中,就可以在这个软件架构上实现我们想要的功能,接下来看看它的架构是怎样的。
5.1 三种工作模式
首先DPM规定了其工作的三种模式,分别是Local Domian,Remote Domain,Distributed Domain,这三种的区别在于其在DPM架构中为控制端还是执行端。每个核可以给本身发送命令,也可以给其他核发送命令,当然也可以接收命令并执行,可以向另一个核发送命令的一端称为控制端,而接收另外一个核的命令并执行的一端被称为执行端。
5.1.1 Local Domain
这种模式下,只有一个核具有DPM服务,如下所示:
如上图,DPM工作在Local Domain模式下,MSS端本身不仅作为控制端,也作为执行端,MSS端只能给自己发送命令,并且自己解析命令并执行。在这个模式下,并没有第二个核来参与。
5.1.2 Remote Domain
这种模式下,需要两个核来运行DPM服务,举个例子如下:
如上图,DPM工作在Remote Domain模式下,MSS端作为控制端,而DSS端作为执行端,此时MSS端可以给DSS发送命令,而DSS作为执行端,接收MSS的命令并执行。
5.1.3 Distributed Domain
这种模式下,需要两个核来运行DPM服务,举个例子如下:
如上图,DPM工作在Distributed Domain模式下,MSS端作为控制端的同时也作为执行端,而DSS端也是同样如此,两者互相发送和接收MSS的命令并执行。
5.2 DPM流程的实现
那DPM建立了一个什么样的软件机制来实现核间通信的呢?
DPM服务本身具有一个操作解释器,不管是控制端还是执行端,为了完成一次行为都需要发起或者接收一个或者多个操作,然后去执行,比如说有初始化操作,开始服务操作以及停止服务操作等。为此DPM定义了一个操作队列,DPM在运行时会根据目的需求往这个操作队列里面插入操作元素从而来发起操作,然后DPM就会从队列中读取操作并执行。DPM中定义了如下操作类型:
操作类型 | 描述 | 操作端 |
---|---|---|
DPM_MessageId_START | 启动DPM服务 | 控制端和执行端分别发起和执行 |
DPM_MessageId_STOP | 停止DPM服务 | 控制端和执行端分别发起和执行 |
DPM_MessageId_DPC_CFG | DPC配置,可自定义子类型,通常用其从控制端向执行端传输信息 | 控制端发起,执行端执行 |
DPM_MessageId_BSS_FAULT | CPU/ESM错误报告 | 控制端发起,执行端执行 |
DPM_MessageId_DPC_ASSERT | ASSERT报告 | 控制端和执行端分别发起和执行 |
DPM_MessageId_RESULT | 结果反馈,执行端执行操作后向控制端反馈执行结果 | 执行端发起和控制端执行 |
DPM_MessageId_DPC_INFO | 输出DPC信息 | 控制端和执行端分别发起和执行 |
DPM_MessageId_RESPONSE | 操作响应,控制端和执行端执行操作后的响应 | 控制端和执行端分别发起和执行 |
如果想要实现一个行为的话就需要单个或者多个操作相互组合才能实现,这样说可能比较抽象,接下来举个非常通用的例子就是,如果想实现从MSS端给DSS端发送命令或者数据的功能,那么在DPM中是怎样的一个过程呢?首先需要使用DPC配置操作来传输数据或者命令,流程如下图:
5.3 DPM的函数
DPM可供外部调用的函数如下:
名称 | 描述 |
---|---|
DPM_execute | 操作解释器,从操作队列中获取操作并执行,需周期性调用,操作队列为空时,其内的信号量堵塞 |
DPM_ioctl | 发起操作,包括DPC_CFG,DPC_CFG,BSS_FAULT,DPC_INFO,按需调用 |
DPM_start | 启动DPM服务,start-up时调用一次 |
DPM_sendResult | 用于执行端向控制端发送执行结果 |
DPM_relayResult | 用于执行端向控制端发送执行结果,只能在Distributed Domain模式中使用 |
DPM_stop | 停止DPM服务 |
DPM_notifyExecute | post信号量,让DPM_execute执行一次 |
DPM_synch | 完成DPM同步,start-up时在DPM_init后调用一次 |
DPM_init | 初始化DPM,start-up时调用一次 |
DPM_deinit | 复位DPM相关配置 |
所以结合DPM的函数,以非Local Domain模式为例,DPM运行Flow如下:
END
边栏推荐
- 更改mysql数据库默认的字符集(mysql 存储 emoji表情)
- 数组的一些方法
- IDEA中创建编写JSP
- Based on the EEMD + + MLR GRU helped time series prediction
- npm包发布与迭代
- 数据库知识:SQLServer创建非sa用户笔记
- matlab让我的旧手机起死回生
- LeetCode(剑指 Offer)- 18. 删除链表的节点
- NelSon:一款新的适配matlab编程语法的编程工具
- Software: Recommend a domestic and very easy-to-use efficiency software uTools to everyone
猜你喜欢
数据特征预处理——缺失值的查看方式及处理
90多款matlab工具箱打包放送
Database: Organize Four Practical SQL Server Scripting Functions
数据库:整理四个实用的SQLServer脚本函数
SENet detailed explanation and Keras reproduction code
curl (7) Failed connect to localhost8080; Connection refused
IoU, GIoU, DIoU and CIoU in target detection
Based on the EEMD + + MLR GRU helped time series prediction
[漏洞问题] log4j漏洞 关于2.17.0升级到2.18.0 方案
基于EEMD+GRU+MLR的时间序列预测
随机推荐
mysql月份比較是否相等
拒绝碰运气,导师人品这样了解!
[漏洞问题] log4j漏洞 关于2.17.0升级到2.18.0 方案
curl (7) Failed connect to localhost8080; Connection refused
C语言实现-华为太空人手表
异步编程之promise,任务队列,事件循环
数据库:整理四个实用的SQLServer脚本函数
SystemVerilog-条件(三元)运算符
数组的一些方法
元素的增删克隆以及利用增删来显示数据到页面上
目标检测中的IoU、GIoU、DIoU与CIoU
反序列化字符逃逸漏洞之
微软电脑管家2.0公测版体验
数据库文档生成工具V1.0
mysql基础(4)
ubuntu18.04安装redis教程
Database: Organize Four Practical SQL Server Scripting Functions
用手机也能轻松玩转MATLAB编程
系统流量预估、架构设计方案
SENet详解及Keras复现代码