跳转进入到任务线程函数,按照老套路,在函数开头都会首先定义该线程所需结构体来存储相关的消息,回到该任务线程函数,仍是如此(如下代码片段),可以看到定义了两个参数 。
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完成的 。如下代码片段;
- 游戏江湖二八分化:前十厂商挣了810亿,但腾讯网易赚走八成 世界十大游戏公司
- 中国十大皇陵,秦始皇陵只能排第八,唐宗汉武年代虽久,气势不输 中国十大古墓
- 我与普洱四十年变迁|我与思茅机场的三十八年 普洱机场吉尼斯记录
- 陈寿认为三国最厉害的八位谋士:郭嘉、诸葛亮、法正无一上榜 历史上的三国之最强谋士
- 普遍被接受为八贤王原型的是谁?为何没当上皇帝?
- 西游记隐藏的八大真相揭秘,西游记八大金刚,十八罗汉是谁?
- 曾家家户户都有的“二八自行车”,如今难觅踪迹……丨旧物件小辰光 中国之最交通工具
- 人教版八下英语Ui6单词、知识梳理、词汇句式精讲及单元检测卷 世界之最翻译
- 后三国时代第一个傻子皇帝竟娶个丑八怪老婆
- 清朝实行旗籍制度:八旗中最强的是那两旗?