ICM20948 DMP代码详解(36)
接前一篇文章:ICM20948 DMP代码详解(35)
上一回讲到了icm20948_sensor_setup() ---> inv_icm20948_initialize_auxiliary函数 ---> inv_icm20948_set_slave_compass_id函数,本回开始,就对于inv_icm20948_set_slave_compass_id函数进行解析。为了便于理解和回顾,再次贴出该函数源码,在EMD-Core\sources\Invn\Devices\Drivers\ICM20948\Icm20948DataBaseDriver.c中,如下:
int inv_icm20948_set_slave_compass_id(struct inv_icm20948 *s, int id)
{int result = 0;(void)id;//result = inv_icm20948_wakeup_mems(s);//if (result)// return result;inv_icm20948_prevent_lpen_control(s);activate_compass(s);inv_icm20948_init_secondary(s);// Set up the secondary I2C bus on 20630.inv_icm20948_set_secondary(s);//Setup Compassresult = inv_icm20948_setup_compass_akm(s);//Setup Compass mounting matrix into DMPresult |= inv_icm20948_compass_dmp_cal(s, s->mounting_matrix, s->mounting_matrix_secondary_compass);if (result)desactivate_compass(s);//result = inv_icm20948_sleep_mems(s);inv_icm20948_allow_lpen_control(s);return result;
}
inv_icm20948_set_slave_compass_id函数中调用了很多函数,一个一个来看。
1)inv_icm20948_prevent_lpen_control函数
代码片段如下:
inv_icm20948_prevent_lpen_control(s);
inv_icm20948_prevent_lpen_control函数在EMD-Core\sources\Invn\Devices\Drivers\ICM20948\Icm20948DataBaseDriver.c中,代码如下:
void inv_icm20948_prevent_lpen_control(struct inv_icm20948 *s)
{s->sAllowLpEn = 0;
}
这个函数和前文书讲过的inv_icm20948_allow_lpen_control函数是一对:
void inv_icm20948_allow_lpen_control(struct inv_icm20948 *s)
{s->sAllowLpEn = 1;inv_icm20948_set_chip_power_state(s, CHIP_LP_ENABLE, 1);
}
前一个是禁止低功耗模式,后一个是使能低功耗模式。当然,都只是设置结构体成员,并没有实际设置到寄存器中去。
2)activate_compass函数
activate_compass函数也在EMD-Core\sources\Invn\Devices\Drivers\ICM20948\Icm20948DataBaseDriver.c中,代码如下:
static void activate_compass(struct inv_icm20948 *s)
{s->s_compass_available = 1;
}
这个函数和下边的desactivate_compass函数是一对:
static void desactivate_compass(struct inv_icm20948 *s)
{s->s_compass_available = 0;
}
前一个是设置指南针(陀螺仪)可用状态,后一个是设置指南针(陀螺仪)不可用状态。当然,也都是只设置结构体成员,并没有实际设置到寄存器中去。
接下来是以下代码片段:
inv_icm20948_init_secondary(s);// Set up the secondary I2C bus on 20630.inv_icm20948_set_secondary(s);
这一段代码的解析,放在下一回中。
相关文章:
ICM20948 DMP代码详解(36)
接前一篇文章:ICM20948 DMP代码详解(35) 上一回讲到了icm20948_sensor_setup() ---> inv_icm20948_initialize_auxiliary函数 ---> inv_icm20948_set_slave_compass_id函数,本回开始,就对于inv_icm20948_set_sla…...
【框架】Spring、SpringBoot和SpringCloud区别
Spring Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架) IoC(Inversion of Control,控制反转)是一种设计思想,它主要用于降低软件系统中不同模块之间的耦合度,提高代码的可维护…...
计算机网络各层有哪些协议?
计算机网络的各层协议知识总结 一、物理层 没有涉及到比较重要的协议,但是有一个比较重要的技术----非对称数字用户线(ADSL) 二、数据链路层 1、点对点协议(PPP----point to point protocol,用户计算机与ISP进行通信…...
Diffusion Model Stable Diffusion(笔记)
参考资料: 文章目录 DDPM架构模型如何拥有产生逼真图片的能力Denoise模型功能Denoise模型如何训练考虑进文字 文生图流程(Stable Diffusion) DDPM架构 模型如何拥有产生逼真图片的能力 Denoise模型功能 通过Denoise将一个噪音图一步步生成为目标图像 Denoise实际…...
如何创建模板提示prompt
定义模型 from langchain_ollama import ChatOllamallm ChatOllama(base_url"http://ip:11434",model"qwen2",temperature0,tool_choice"auto" )什么是提示模板? 它的目的是根据不同的输入动态生成特定格式的文本,以便…...
C语言 | Leetcode C语言题解之第423题从英文中重建数字
题目: 题解: char * originalDigits(char * s) {int lenstrlen(s);int arr[26]{0},num[10]{0},cot0;for(int i 0; i < len; i)arr[s[i] - a];num[0] arr[z-a];num[2] arr[w-a];num[4] arr[u-a];num[6] arr[x-a];num[8] arr[g-a];num[1] arr[o…...
Jboss CVE-2017-12149 靶场攻略
漏洞简述 该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter过滤器中。该过滤器在没有进⾏任何安全检查的情况下尝试将来⾃客户端的数据流进⾏反序列化,从⽽导 致了漏洞 漏洞范围 JBoss 5.x/6.x 环境搭建 …...
ROS2 中令人困惑的rclpy.shutdown()
在使用rclpy(Robot Operating System (ROS) 2的Python客户端库)时,rclpy.spin()和rclpy.shutdown()是两个非常重要的函数,它们各自承担着不同的角色。 rclpy.spin() rclpy.spin()函数通常被用于启动一个节点的主循环。在这个循环…...
PHP纯离线搭建(php 8.1.7)
要离线从零安装 PHP 8.1.7,需要准备好 PHP 的源代码以及所有相关的依赖包。以下是步骤: 步骤概览 在联网系统上下载 PHP 8.1.7 源代码和所有依赖包。 将这些文件传输到离线系统。 安装所需的依赖包。 编译并安装 PHP 8.1.7。 配置 PHP 和 Web 服务器。 …...
【iOS】push和pop、present和dismiss
目录 前言push和poppushpop present和dismisspresentdismiss实现模态对话框代码示例 区别总结 前言 push 和 present 是两种用于导航和切换视图控制器(ViewController)的常用方法,push与present都可以推出新的界面,present与dismi…...
基于51单片机的两路电压检测(ADC0808)
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,通过ADC0808获取两路电压,通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码,PROTEUS8.15进行仿真,全部资源在页尾,提供…...
JavaScript ---案例(统计字符出现次数)
统计字符出现次数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…...
切换淘宝最新npm镜像源
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:前端工程师 文章目录 一、🌎前言二、🌎切换淘宝最新npm镜像源2.…...
mysql时间戳格式化yyyy-mm-dd
格式化到 年月日 # 将时间换成列名就行;当前是秒级时间戳,如果是毫秒的 / 1000即可 # SELECT FROM_UNIXTIME(1602668106666.777888999 / 1000,%Y-%m-%d) AS a; # SELECT FROM_UNIXTIME(列名 / 1000,%Y-%m-%d) AS a; SELECT FROM_UNIXTIME(1602668106.666…...
网络丢包定位记录(二)
网卡驱动丢包 查看:ifconfig eth1/eth0 等接口 1.RX errors: 表示总的收包的错误数量,还包括too-long-frames错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。 …...
深度学习自编码器 - 自编码器的应用篇
序言 在深度学习的广阔领域中,自编码器( Autoencoder \text{Autoencoder} Autoencoder)作为一种无监督学习算法,凭借其独特的数据处理与特征提取能力,在多个领域展现出巨大的应用潜力。自编码器通过编码器将输入数据映…...
Python 小工具制作 系列文章 - 总目录
【Python实战】 ---- 批量图片压缩【python实战】---- 30行代码提取个人值班表【Python实战】---- 30行代码破解加密压缩包【python 实战】---- 批量将图片转换成base64工具开发【python 实战】---- 批量将xlxs文件中的base64转换成png图片工具开发【Python 实战】---- 批量对图…...
Codeforces Round 973 (Div. 2) - D题
传送门:Problem - D - Codeforces 题目大意: 思路: 尽量要 最大值变小,最小值变大 即求 最大值的最小 和 最小值的最大 -> 二分答案 AC代码: 代码有注释 #include<bits/stdc.h> using namespace std; #…...
threejs性能优化之gltf文件压缩threejs性能优化之glb文件压缩
在使用Three.js进行3D图形开发时,GLTF(GL Transmission Format)文件因其高效性和灵活性而广受欢迎。然而,随着模型复杂度的增加,GLTF文件的大小也会显著增加,这可能会对加载时间和渲染性能产生负面影响。为…...
设计模式 享元模式(Flyweight Pattern)
享元模式 简绍 享元模式(Flyweight Pattern)是一种结构型设计模式,它的目的是通过共享技术来有效地支持大量细粒度的对象。享元模式可以极大地减少内存的使用,从而提高程序的性能。它特别适用于需要创建大量相似对象的场景&#…...
App无辜躺枪?手把手教你搞定腾讯手机管家误报导致的应用商店下架
当合规应用遭遇误报下架:开发者系统性应对指南运动健康类应用被标记为金融诈骗软件?社交工具因"病毒风险"被各大商店紧急下架?这类看似荒谬的误报事件,正在成为中小开发团队的"无妄之灾"。某知名运动App开发团…...
身份证OCR识别接口接入实战:Python/Java/PHP/C#四语言代码示例与踩坑指南
#身份证OCR, #OCR接口, #API接入, #Python示例, #Java示例, #PHP示例, #踩坑指南, #石榴智能, #实名认证, #图片识别 身份证OCR识别接口接入实战:Python/Java/PHP/C#四语言代码示例与踩坑指南 作者:石榴智能技术团队 一、前言 身份证OCR识别已经不是什…...
Redis沙盒体验:在浏览器中零门槛掌握NoSQL核心技能
Redis沙盒体验:在浏览器中零门槛掌握NoSQL核心技能 【免费下载链接】try.redis A demonstration of the Redis database. 项目地址: https://gitcode.com/gh_mirrors/tr/try.redis 当你第一次听说Redis时,是否被那些晦涩的技术术语吓退࿱…...
BurpSuite 2025插件开发JDK版本兼容性实战指南
1. 为什么BurpSuite插件开发环境总在JDK版本上翻车?你是不是也经历过:下载好BurpSuite最新版2025.4,兴冲冲打开插件开发文档,照着官方示例写完第一个HelloWorld插件,一编译——java.lang.UnsupportedClassVersionError…...
Python基础语法:生成器 generator(yield)
一、简介根据指定的规则循环生成数据,当条件不成立时则生成数据结束。数据不是一次性全部生成出来,而是使用一个,再生成一个,好处是可以节约大量的内存。就像设计模式中的懒汉式。适合处理大数据或流数。生成器是一种特殊的迭代器…...
一次搞懂内存取证:用Volatility3和Cobalt Strike分析工具复现VNCTF‘来一把紧张刺激的CS’
实战内存取证:从Volatility3到Cobalt Strike信标分析全解析 在网络安全事件响应中,内存取证往往是发现高级威胁的最后一道防线。当攻击者使用文件无落地的技术时,传统的磁盘取证可能一无所获,而内存中却保留着攻击行为的完整痕迹。…...
账务台账数据
银行里说的 “账务台账数据”,本质就是按会计规则把每笔业务逐笔、分户、分科目记下来的完整明细流水 余额 辅助信息,核心是 “可逐笔追溯、可对账、可审计” 的一套明细数据。下面用通俗、具体的方式拆开说:一、银行 “账务台账” 到底是什…...
Matlab,plot绘图如何添加边框
matlab生成的图——编辑(E)——坐标区属性(A)——框样式——Box,勾选效果:...
InVideo插件深度解析:如何在Unreal Engine中实现高效视频流播放与录制
InVideo插件深度解析:如何在Unreal Engine中实现高效视频流播放与录制 【免费下载链接】InVideo 基于UE4实现的rtsp的视频播放插件 项目地址: https://gitcode.com/gh_mirrors/in/InVideo InVideo是一个基于Unreal Engine 5开发的RTSP视频播放插件࿰…...
PvZ Toolkit终极指南:三步掌握植物大战僵尸最强修改器
PvZ Toolkit终极指南:三步掌握植物大战僵尸最强修改器 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PvZ Toolkit是一款专为植物大战僵尸PC版设计的综合修改器工具,能够让你…...
