AWR1642 SRR 案例MSS代码解读-main(一)

摘要:在这篇博文中,将会对demo的主函数分片段来描述它的作用,并且会对一些函数作用进行描述。

1.变量参数的声明:

主程序是案例代码的入口,进入主程序,我们会先看到定义三个变量参数,为了方便表述,下面将用参数一,二,三来表述;

1)参数一是用于创建线程的线程参数,且是一个结构体,它与创建线程函数是密不可分的(如下中展示的创建线程函数就用到该参数作为它的输入参数)作用用于设置线程函数的优先级等;关于线程的相关知识可以参考操作系统指南

2)参数二是一个整数型的错误参数,它主要用来标识在整个main函数中程序出现错误时的类型,不同的返回值代表不同的信息。

3)参数三是一个片上系统的结构体变量,它包含了打开和初始化片上系统(SOC)驱动所需要的配置信息,这个的组成如下;

2.参数初始化

参数声明之后,我们将会看到下面三行调用函数代码,这三行代码用到的函数的作用、存在的头文件接下来将一一解答

1)ESM_init函数原型

ESM_init函数在头文件中定义 #include <ti/drivers/esm/esm.h>

作用:初始化ESM驱动,ESM驱动提供api来配置和处理来自ESM H/W模块的错误, 如果不调用这个API,就不能使用ESM API。并且如果你使用TI RTOS,那么ESM错误在进入main之前被清除,并且这个输入参数可以设置为0。 对于任何其他RTOS,检查RTOS实现或将此输入参数设置为1 。

2)在执行ESM驱动初始化之后,接下来就是对全局变量、SOC配置参数初始化为0,函数参数定义之后都需要进行初始化,主要的一个原因是避免出错或值的丢失。其中函数memset()C语言标志库函数,下面是这个函数的一些基本描述;

注意:

 全局变量在mss_main.c文件的第101行中声明,它是一个用于存储全局信息的一个结构体,通俗来说是用于案例SRR TI设计所需的跟踪信息的全局变量

3.SOC系统初始化

demo在参数初始化之后,接下来就是对SOC进行初始化,SOC驱动程序需要在整个系统中初始化一次。 这是使用SOC_init完成的。 如果不调用这个API,就不能使用任何SOC API ,在进行初始化之前,需要对SOC初始化参数进行配置,在本案例中仅对系统的时钟频率初始化进行配置(如下片段中的第一行),接下来就是调用SOC初始化函数对系统进行初始化并返回控制句柄储存在全局变量中,这个句柄用来告诉系统,已经对其SOC初始化了,可以使用SOC API了,如果这个句柄等于空(NULL,则说明SOC初始化不成功,并退出程序,且在控制台显示相应的错误信息,否则则说明SOC初始化成功,并转到下一步检查判断设备是否是安全设备,这是使用SOC_isSecureDevice完成的,如果设备处于安全保护状态,这时要对一些模块进行访问时则需要先对其禁用防火墙,才可访问它,这是使用SOC_controlSecureFirewall完成的,在这个demo中需要禁用JTAG和LOGGER (UART)的防火墙 ,以便可以对它进行访问。值得注意的是SOC安全设备防火墙功能模块定义在一个枚举变量中,在函数后边附上这个枚举类型的变量。

 

补充:

函数原型:

1

描述

该函数用于初始化和设置SOC Driver。 如果应用程序请求系统时钟配置,则该功能将解除BSS,并等待直至APLL校准完成。 

参数

[in] ptrCfg 指向SOC配置的指针

[out] errCode 错误时生成的错误代码

返回值

成功 - 指向SOC驱动程序的指针

错误 - NULL 

2)

描述

该函数用于判断设备是否是安全设备

参数

[in] handle SOC 驱动控制句柄

[out] errCode 错误时生成的错误代码

返回值

成功 - 1

失败 - 0

其它错误 - <0

3)

描述

该函数用于指定模块开启/关闭安全防火墙。只有当设备是安全设备时,才需要调用该功能

参数

[in] handle  SOC 驱动控制句柄

[in] firewallModulesBitmap 需要修改防火墙的模块(由SOC_SecureFirewallModules指定)的位图 

[in] control                      SOC_SECURE_FIREWALL_DISABLE—禁用防火墙(允许访问模块);

                                          SOC_SECURE_FIREWALL_ENABLE—启用防火墙(禁止对模块的访问) 

[out] errCode 错误时生成的错误代码

返回值

成功 - 0

错误 - <0

4.创建线程

主程序在完成上述之后,将会创建一个线程,线程通常都是定义在一个死循环中,通常用信号量(semaphore)来阻塞和执行。

 在这片代码创建了一个线程,在创建线程函数时需要对线程参数进行初始化,这是使用Task_Params_init来完成的,参数初始化后,就需要对线程的优先级进行设置,优先级越高,则这个线程将会更优先执行,并使用Task_create来创建线程,使得SRR_MSS_initTask函数得以运行在线程中,即程序将会进入线程中一直执行。最后开始BIOS系统,这是BIOS_start完成的。

注意:

关于BIOS_start这个函数,大可不必深究其意,BIOS_start()可以看作是一个系统调用,调用LIB是由BIOS启动起来的。这个函数不会返回。也就是在基于TI-RTOS,都需要调用这个函数。

5.总结

 最终程序执行将进入SRR_MSS_initTask线程函数中一直运行,在下一篇博文中详细阐述这个线程函数。至此demo的主函数已经讲解完成。

参考示例:

mmwave_automotive_toolbox\mmwave_automotive_toolbox_3_5_0\labs\lab0002_short_range_radar

AWR1642是一种基于毫米波雷达技术的传感器芯片,用于实现目标检测和距离测量等功能。AWR1642代码解读是指对AWR1642芯片的相关代码进行分析和理解。 AWR1642代码解读的主要目的是理解和学习AWR1642的工作原理和功能。代码解读过程中,可以分析代码中的各个模块、函数和数据结构,逐步理解其功能和作用。首先,需要了解AWR1642芯片的工作原理和功能,包括射频前端、基带处理和目标检测等方面的知识。然后,根据代码的结构和命名规则,逐步定位到关键的模块和函数,理解它们的功能和相互之间的调用关系。 在AWR1642代码解读过程中,可以注重以下几个方面的内容: 1. 配置参数的设置:AWR1642芯片需要进行参数配置才能正常工作,代码中通常包含了不同配置选项和相应的参数设置函数。通过解读这些代码,可以理解不同参数对系统性能的影响和设置方法。 2. 数据处理流程:AWR1642芯片采集到的毫米波数据需要经过一系列的处理步骤才能变成目标检测结果。通过解读代码,可以了解到这些处理步骤的具体实现方式和流程,例如数据滤波、范围测量、目标检测算法等。 3. 硬件操作接口:AWR1642芯片需要与外部硬件进行通信和控制,例如串口、SPI接口等。代码中通常包含了与硬件操作相关的函数和数据结构,通过解读这部分代码,可以了解AWR1642与外部硬件的接口方式和通信协议。 总之,AWR1642代码解读是深入了解AWR1642芯片工作原理和功能的重要途径。通过对代码解读,可以理解AWR1642在目标检测和距离测量等方面的具体实现方式,为进一步的应用和开发提供基础。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值