前言
写在最前面, 如果博客内容与实际TI文档有任何出入,请以TI官方文档为准.
在上一篇博客中我们宏观的介绍了整个系统的硬件架构以及展示出了一副大的程序执行框图, 在这篇博客中我们将沿着系统软件执行流程, 走马观花式的介绍整个 mmWave Out of box demo 源码, 源码的代码极其的庞大, 同时这样一份系统性的代码阅读下来他的附加价值是很高的. 因为这篇博客介绍软件源码是走马观花式的, 所以强烈建议读者抽出时间仔细的研读源码, 对整个源码进行系统性的梳理以及细节的挖掘, 建议用时在15天左右. 这篇博客中我所给出的一些软件执行的框图也是在阅读源码的过程中进行整理的.
阅读思路
由于demo的源码非常的庞大, 我们需要对它进行宏观把握的前提下进行阅读, 在我进行源码结构梳理的时候我喜欢用一些显著的时间节点来进行分割, 比如 当我在CLI port进行配置时 demo的程序进行了如何的调用, 我在CLI port 发送 sensor start 的时候 demo程序中发生了什么, ARM端发送了什么样的信息告知DSP进行信号处理, DSP 如何将已经处理好的点云数据传送至ARM端等等. 同时在进行源码结构梳理的时候通过对源码进行功能划分, 是最直观且高效的结构梳理方法, Demo中的 功能区划主要有如下的几个:
- CLI: 负责与用户的信息交互 如配置, sensor的控制等
- MMWave: 与 DFE 进行控制信息交换等.
- DPC(DSP): Data process control 用于控制DSP端的信号处理和控制组件
- DPC(HWA): 用于控制arm端 hardware accelerator 的信号处理和控制组件
- DPM: data path manager, 顾名思义 就是在 MSS 和 DSS 中负责数据传输的管理组件
- Demo Misc: 负责 demo 中各各种为了使程序能够正常运行的中间组件比如协调控制, 信息交互等等.
在进行源码梳理的时候我们将围绕着 MSS 和 DSS 这两个相对独立的子系统上运行的程序展开, 同时在本篇博客中给出的软件执行框图中每一部软件执行的步骤都将使用在源码中的函数名进行表示.
下图展示了一个完整的代码结构整理, 他以上一章最后提到的系统执行流程为中心, 以 MSS和 DSS 两条线索分别展开.
源码走读
在代码执行初期 MSS 和 DSS 分别执行他们的初始化任务.
MSS初始化
DSS初始化
当MSS在串口收到Cfar配置信息或者Profile配置信息时
当MSS在串口收到sensor start指令时
当DSS从MSS那里得到DPM start的消息后
同时会向MSS端报告DPC_STARTED, MSS在得到DSS端DPC_STARTED的消息后会在CLI port打印 Done 的消息
之后DSS的HWA和DSS就会等待DFE的数据
当Frame Event的硬件中断到来, 表明当前的Frame已经开始了
在Frame结束后的后处理,如数据传输等
相关代码(plantuml)
为了方便 大家在自行整理源码结构, 以上软件流程框图的 plantuml 源码已经上传至github读者可以自行下载