当前位置:网站首页>【调试记录1】提高MC3172浮点运算能力,IQmath库的获取与导入使用教程
【调试记录1】提高MC3172浮点运算能力,IQmath库的获取与导入使用教程
2022-08-11 05:24:00 【McuBoy~C】
在MC3172使用IQmath数学库,提高浮点运算能力
【调试记录1】提高MC3172浮点运算能力,IQmath库的获取与导入使用教程
背景:
TI针对没有浮点运算器的定点DSP推出了IQmath库,在使用Q格式对数据进行分析和处理的过程中,十分方便,代码也变得更加简洁。
而在RISC-V架构的也有人实现或者一致了IQmath库。本文目的在于获取RISC架构的IQmath库,并在MC3172 MCU芯片上导入与使用。
MC3172芯片是感芯科技公司新推出的一款单核多线程的MC3172芯片。点击进入官网链接
工程模板准备
打开官方网站,前往以下链接:
在Gitee下载【工程模板文件】并解压工程模板,得到如下文件:
安装 MounRiver Studio
一路Next即可。
IQmath库的获取
打开工程文件:
导出后,解压得到两个文件:.a 和.h文件
IQmath库的导入
这里新建两个文件夹,include放.h文件,lib放.a文件,直接如下拖进来,选择复制方式。
对.a文件进行配置:
配置好后,如下:
在项目中使用
打开main.c引入头文件:
打开头文件,可以见到有许多中文注释,并介绍了函数的作用,如下:
IQmath库的使用与测试
详细的使用介绍,见文末提供的资料文件。
在这里,通过计算三角函数sin,cos进行性能速度对比,通过计算同样次数的三角函数,并且进行IO电平反转,通过一个LED灯或者直接测量IO输出的频率,即可对比库函数的浮点计算与Q格式计算速度。
IO控制实现:
led.c文件
在这里插入代码片#include "../include/led.h"
void Led_Init(u32 gpio_sel,u32 gpio_pin)
{
INTDEV_SET_CLK_RST(gpio_sel,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));
GPIO_SET_OUTPUT_EN_VALUE(gpio_sel,(gpio_pin),GPIO_SET_ENABLE);
LED_OFF(gpio_sel,(gpio_pin));
}
/* * led.h * * Created on: 2022年7月31日 * Author: 四维度 */
#ifndef USER_CODE_LED_H_
#define USER_CODE_LED_H_
#include "../MC3172/MC3172.h"
#define LED_ON(gpio_sel,gpio_pin) GPIO_SET_OUTPUT_PIN_TO_0(gpio_sel,gpio_pin);
#define LED_OFF(gpio_sel,gpio_pin) GPIO_SET_OUTPUT_PIN_TO_1(gpio_sel,gpio_pin);
void Led_Init(u32 gpio_sel,u32 gpio_pin);
#define LED0_ADDR GPIOA_BASE_ADDR
#define LED0_Pin GPIO_PIN6
#define LED0_Init() Led_Init(LED0_ADDR,LED0_Pin)
#define LED0_ON LED_ON(LED0_ADDR,LED0_Pin)
#define LED0_OFF LED_OFF(LED0_ADDR,LED0_Pin)
#endif /* USER_CODE_LED_H_ */
文件路劲如下:
在main添加头文件,准备调用:
先对IQmath测试:
void thread0_main(void)
{
u32 i,j,k;
_iq s,c;
LED0_Init();
while(1){
LED0_ON
for (i = 0; i < 2000; ++i){
for (j = 0; j < 2000; ++j){
for (k = 0; k < 2000; ++k){
c=_IQcosPU(_IQ(3.1415926));
s=_IQsinPU(_IQ(3.1415926));
}
}
}
LED0_OFF
for (i = 0; i < 2000; ++i){
for (j = 0; j < 2000; ++j){
for (k = 0; k < 2000; ++k){
c=_IQcosPU(_IQ(3.1415926));
s=_IQsinPU(_IQ(3.1415926));
}
}
}
}
thread_end();
}
再对math库函数测试:
void thread0_main(void)
{
u32 i,j,k;
float s,c;
LED0_Init();
while(1){
LED0_ON
for (i = 0; i < 2000; ++i){
for (j = 0; j < 2000; ++j){
for (k = 0; k < 2000; ++k){
c=cos(_IQ(3.1415926));
s=sin(_IQ(3.1415926));
}
}
}
LED0_OFF
for (i = 0; i < 2000; ++i){
for (j = 0; j < 2000; ++j){
for (k = 0; k < 2000; ++k){
{
c=cos(_IQ(3.1415926));
s=sin(_IQ(3.1415926));
}
}
}
}
}
thread_end();
}
两次测试程序分别下载到开发板,通过IO口PA6接上LED或者示波器即可观察到对比:
本文到这里结束,测试过程文件以及IQmath手册文末下载,感谢您的观看。
https://gitee.com/Jim-Chenming/mc3172/tree/master/
点击跳转
边栏推荐
- CVPR2020: Seeing Through Fog Without Seeing Fog
- 梅科尔工作室-DjangoWeb 应用框架+MySQL数据库第三次培训
- 用正则验证文件名是否合法
- CVPR2020:Seeing Through Fog Without Seeing Fog
- 内核与用户空间通过字符设备通信
- GBase 8s中IO读写方法
- 【uniapp】跨端开发问题记录
- 梅科尔工作室-DjangoWeb 应用框架+MySQL数据库第四次培训
- Reconstruction and Synthesis of Lidar Point Clouds of Spray
- CVPR2022——A VERSATILE MULTI-VIEW FRAMEWORK
猜你喜欢
360°大视野安全帽识别系统-深度学习智能视频分析
The selection points you need to know about the helmet identification system
Toward a Unified Model
TAMNet: A loss-balanced multi-task model for simultaneous detection and segmentation
Pay “Attention” to Adverse Weather
AI智能图像识别的工作原理及行业应用
mAPH - Waymo dataset
梅科尔工作室-PR第三次培训笔记(效果与转场及插件使用)
>>技术应用:用于 REST API 开发和测试的 10 大工具
小程序技术原理分析
随机推荐
梅科尔工作室-DjangoWeb 应用框架+MySQL数据库第六次培训
OpenPCDet installs the latest version: spconv in one step
博客目录
梅科尔工作室-HarmonyOS应用开发第四次培训
2021-05-10
Use regex to verify whether the file name is legal
GBase 8s存储结构简介及空间管理
360°大视野安全帽识别系统-深度学习智能视频分析
动画(其一)
GBase 8s集中式企业级安全事务型数据库
目标检测思维导图
【docker-compose】mysql安装
Safety helmet recognition system
安全帽识别系统-为安全生产保驾护航
@2022-02-22:每日一语
跳转到微信小程序方法
TAMNet:A loss-balanced multi-task model for simultaneous detection and segmentation
Generic kernel and userspace Makefiles
Androd 基本布局(其一)
Realize data exchange between kernel and userspace through character device virtual file system (passed based on kernel 5.8 test)