IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 毫米波雷达(AWR1864)-MSS和DSS的信息交流 -> 正文阅读

[游戏开发]毫米波雷达(AWR1864)-MSS和DSS的信息交流


前言

上一期我们讲述了MSS的main函数的源码,这一期我来解读一下MSS和DSS信息交流的代码


一、代码位置及Semaphore文档位置

打开mss_main.c的文件,搜索Semaphore,大概位置如下:在这里插入图片描述
这里发现Semaphore在mmWave SDK Module Documentation无法找到相关定义,于是我打算找到这个的头文件
在这里插入图片描述
我这里的方法是直接在电脑里用everything软件搜索Semaphore.h,找到类似的地址
在这里插入图片描述
这里能发现这个地址和头文件引用的地址十分相像,所以接下来我们大概率可以在这个地方附件找到相关文档。
接下来,我们就在目录中往上寻找,找到docs,点击进去,能发现一个官方文档
在这里插入图片描述
地址为:mmwave_sdk_3.2所在地址\bios_6_73_01_01\docs\Bios_APIs.html

点击进入,进行一定的索引,就能找到Semaphore相关文档。
在这里插入图片描述
成功找到。
接下来要用到的mailbox文档就在mmWave SDK Module Documentation中
在这里插入图片描述

二、代码解释

1.创建一个二进制Semaphore来处理信箱中断

    /* Create a binary semaphore which is used to handle mailbox interrupt. */
    Semaphore_Params_init(&semParams);
    semParams.mode             = Semaphore_Mode_BINARY;
    gMrrMSSMCB.mboxSemHandle = Semaphore_create(0, &semParams, NULL);

Semaphore_Params_init

函数介绍索引如下:
在这里插入图片描述
代码介绍:

Void Semaphore_Params_init(Semaphore_Params *params);
// Initialize this config-params structure with supplier-specified defaults before instance creation

Semaphore_Mode_BINARY

在这里插入图片描述
功能:These enumerations specify the type of semaphore.,指定信号量的类型为二进制

Semaphore_create(0, &semParams, NULL)

在这里插入图片描述
参数含义:

count:初始化信号量的计数值
params:每个实例配置参数,当为NULL时选择默认值
eb:错误处理块,当NULL时选择默认策略

所以这里设定初始化时的计数值为0,错误处理块为默认值。

2.Mailbox

    /* Setup the default mailbox configuration */
    Mailbox_Config_init(&mboxCfg);

    /* Setup the configuration: */
    mboxCfg.chType       = MAILBOX_CHTYPE_MULTI;
    mboxCfg.chId         = MAILBOX_CH_ID_0;
    mboxCfg.writeMode    = MAILBOX_MODE_BLOCKING;
    mboxCfg.readMode     = MAILBOX_MODE_CALLBACK;
    mboxCfg.readCallback = &MmwDemo_mboxCallback;

Mailbox初始化

在这里插入图片描述

功能:函数将Mailbox_Config结构初始化为其默认值。

初始化Mailbox虚拟通道

  /* Initialization of Mailbox Virtual Channel  */
    gMrrMSSMCB.peerMailbox = Mailbox_open(MAILBOX_TYPE_DSS, &mboxCfg, &errCode);
    if (gMrrMSSMCB.peerMailbox == NULL)
    {
        /* Error: Unable to open the mailbox */
        System_printf("Error: Unable to open the Mailbox to the DSS [Error code %d]\n", errCode);
        return;
    }

找文档流程与上文类似,接下来不再赘述。主要进行代码功能的解释。
在这里插入图片描述
功能:函数初始化邮箱驱动程序的实例。

注意:在MSS<->BSS之间,只能打开驱动程序的一个实例。
如果Mailbox为空,则会进行初始化失败的报错。

创建任务进行Mailbox信息处理

    /* Create task to handle mailbox messges */
    Task_Params_init(&taskParams);
    taskParams.stackSize = 16*1024;
    Task_create(MmwDemo_mboxReadTask, &taskParams, NULL);

该文档与一开始的Semaphore位于同一区域,都属于头文件调用,具体文档这里不再贴出来了。
在这里插入图片描述
功能:读取Mailbox里的数据

注册侦听器

   /* Register Chirp Available Listener */
    memset ((void*)&listenerCfg, 0, sizeof(SOC_SysIntListenerCfg));
    listenerCfg.systemInterrupt   = SOC_XWR18XX_MSS_CHIRP_AVAIL_IRQ;
    listenerCfg.listenerFxn       = MRR_MSS_chirpIntCallback;
    listenerCfg.arg               = 0;
    gMrrMSSMCB.chirpIntHandle = SOC_registerSysIntListener (gMrrMSSMCB.socHandle, &listenerCfg, &errCode);
    if (gMrrMSSMCB.chirpIntHandle == NULL)
    {
        System_printf ("Error: Unable to register the Chirp Available Listener [Error code %d]\n", errCode);
        return;
    }
    /* Register Frame Start Listener */
    memset ((void*)&listenerCfg, 0, sizeof(SOC_SysIntListenerCfg));
    listenerCfg.systemInterrupt   = SOC_XWR18XX_MSS_FRAME_START_INT;
    listenerCfg.listenerFxn       = MRR_MSS_frameStartIntCallback;
    listenerCfg.arg               = 0;
    gMrrMSSMCB.frameStartIntHandle = SOC_registerSysIntListener (gMrrMSSMCB.socHandle, &listenerCfg, &errCode);

    if (gMrrMSSMCB.frameStartIntHandle == NULL)
    {
        System_printf("Error: Unable to register the Frame start Listener [Error code %d]\n", errCode);
        return ;
    }

主要函数SOC_registerSysIntListener
相关文档位于
在这里插入图片描述
在这里插入图片描述

功能:该函数用于注册系统中断的侦听器。可以将多个侦听器连接到一个系统中断,一旦触发中断,SOC模块将确保调用已注册的侦听器。
返回值:


Success	- Handle to the System Interrupt Listener
Error	- NULL

要是返回值为NULL,则报错。
listenerCfg的结构体定义文档
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
里面可以看到结构体变量的定义。

总结

这次主要的问题是找不到Semaphore文档的位置,所以毫无头绪,只能靠代码来猜测含义,不过这也体现了Ti定义的完善性,许多代码哪怕不看文档也能猜测出大概的含义。不过要是需要深究代码的功能,则需要详细的文档。
寻找文档的方法:
首先先去mmWave SDK Module Documentation文档中寻找,一般的驱动程序文档在里面都找的到,如果找不到,则通过Ctrl+F找到头文件,然后通过头文件的位置,往上级目录里找,找到类似于docs的文件夹,大概率文档就在这个文件夹里面。
不得不说,Ti公司的文档写的十分详细,在索引的时候一级接着一级,环环相扣,逻辑清晰。
接下来的更新还是看时间,最近有亿点忙。。。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 16:02:57  更:2022-05-01 16:05:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:41:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码