八 MSS代码解读-MmwDemo_mboxReadTask线程

跳转进入到任务线程函数,按照老套路,在函数开头都会首先定义该线程所需结构体来存储相关的消息,回到该任务线程函数,仍是如此(如下代码片段),可以看到定义了两个参数 。
1)参数 1 ()
这是用于DSS/MSS通信交互的消息结构体,该结构定义了用于在MSS和DSS之间通信的消息结构 。结构体原型如下;
从(参数1的结构体类型)结构体原型中可以看到它总共有三个元素,其中从上到下依次是type、、body,其中
typedemo中用于MSS和DSS之间邮箱通信的消息类型 。它是类型的枚举,保存 demo中MSS和
DSS之间用于邮箱通信的所有消息类型 。
此消息适用的子帧号 。仅当使用高级帧配置时有效 。当高级帧配置不使用时,该字段应该设置为

body 毫米波演示中用于将配置从MSS传递到DSS的消息体 。它的结构体原型如下;
从(参数1中元素body的结构体类型)结构体中可以看到,它总共有四个属性,其中从上到下依次是、、、,其中它们的作用如下
【八MSS代码解读-MmwDemo_mboxReadTask线程】 DSS处理好的探测信息,即用于报告从数据路径到MSS的检测信息的消息,消息的格式满足TLV报文格式 。
数据路径输出数据流大小的设置
DSS断言消息,即用于报告DSS断言信息的消息,该结构定义了应转发到MSS的关于DSS异常的信息的消息体 。
s DSS到MSS ISR信息存储的地址,通常在HSRAM中,通常HSRAM也叫做共享寄存器,用来存放DSS/MSS产生的消息,换句话说
DSS将处理好的消息存放到HSRAM,并告诉MSS,这时MSS就会去访问HSRAM并处理消息,同样MSS也如此;
补充:
TLV消息格式
携带检测信息的输出报文每帧通过UART发送出去 。每个报文由头和包含中枚举类型的各种数据信息的TLV条目数组成(即在下面的结构体原型中的tlv元素,它是一个数组,数组的长度是枚举类型) 。类型的数值可以在.h中找到 。每个TLV项(看下图tlv结构体)由类型、长度和载荷信息(通常为地址信息)组成 。输出包的结构如下图所示 。由于数据包的长度取决于检测到的对象的数量,因此它可以在帧与帧之间变化 。包的结尾被填充,因此包的总长度总是32字节的倍数 。
tlv结构体:
2)参数 2()
这个参数用于接收API的返回值,并通过这个返回值来判断API的执行状态 。这里声明后直接赋值为0;
3.读取消息
在声明参数后,接下来就是在一个while循环里读取邮箱中的信息,进入while循环首先看到 代码,这是用来阻塞线程执行的,因为这个while循环是一个无限循环的函数且,可以将 当做函数的出口,它需要等待邮箱执行回调函数 释放信号量才能接着执行,当DSS向邮箱写入消息时,促发这个回调函数,从而释放信号量,在信号量释放后,由于此时邮箱中已经有消息写入了,这时就需要将消息读取出来存储在前面声明的参数中(这个过程是由API完成的),并将API的返回值传递给参数,然后通过的值(这个值是返回读取的字节数)来判断 API的执行状态,如果小于0则说明读取失败,等于0则表明消息为空,继续循坏这个while循坏,如果都不是,则成功将DSS存放在HSRAM寄存器中的数据读取出来存放在参数中,接下来就是对这个消息进行读取 。
回调函数
在成功将消息读取到参数后,接下来就是对进行后续处理,从而通过串口(UART)将数据发送到上位机 。在进行后续处理前,首先需要将邮箱的内容清除,以表明消息已处理完毕 。这将允许我们在处理接收到的消息时在邮箱中接收另一条消息 。这个过程是由 API完成的 。如下代码片段;