利用Linux的I2C子系统和i2c-tools工具集写出的对I2C设备AP3216C读写的应用程序
前言
由于NXP官方提供的BSP里已经包含了其片上I2C控制器的驱动并接入到了Linux的I2C子系统,所以我们可以直接去写与I2C有关的应用程序了。
在本篇博文中我们用两种方式对I2C设备AP3216C进行读写操作。
第一种:直接利用Linux的I2C子系统对I2C设备AP3216C进行读写操作。
第二种:利用i2c-tools工具集对I2C设备AP3216C进行读写操作,当然i2c-tools也是运行于Linux的I2C子系统基础上的用户空间工具集,之前已经介绍过它了,并且之前已经用它的命令行对I2C设备AP3216C进行过读写操作了,详情见: https://blog.csdn.net/wenhao_ir/article/details/146319007
在阅读本文前建议还是先将博文 https://blog.csdn.net/wenhao_ir/article/details/146319007 阅读一遍。
直接利用Linux的I2C子系统对I2C设备AP3216C进行读写操作
完整代码(I2C_direct_control_ATP2126C.c)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
#include <errno.h>#define I2C_BUS "/dev/i2c-0" // I2C 设备文件
#define I2C_ADDR 0x1E // AP3216C 设备地址// 写入 I2C 设备寄存器
void i2c_write(int fd, unsigned char reg, unsigned char value) {unsigned char buf[2] = {reg, value};if (write(fd, buf, 2) != 2) {perror("Failed to write to I2C device");exit(EXIT_FAILURE);}
}// 读取 I2C 设备寄存器(16位数据)
int i2c_read_word(int fd, unsigned char reg) {unsigned char buf[2];if (write(fd, ®, 1) != 1) {perror("Failed to set register address");exit(EXIT_FAILURE);}if (read(fd, buf, 2) != 2) {perror("Failed to read from I2C device");exit(EXIT_FAILURE);}return buf[0] | (buf[1] << 8); // 低字节在前,高字节在后
}int main() {int fd = open(I2C_BUS, O_RDWR);if (fd < 0) {perror("Failed to open I2C bus");return EXIT_FAILURE;}if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) {perror("Failed to select I2C device");return EXIT_FAILURE;}// 1. 软复位 AP3216Ci2c_write(fd, 0x00, 0x04);sleep(1); // 等待复位完成// 2. 启用光感和距离检测i2c_write(fd, 0x00, 0x03);sleep(1); // 等待设备启动while (1) {// 3. 读取光照强度数据int als_data = i2c_read_word(fd, 0x0C);printf("Ambient Light: %d\n", als_data);// 4. 读取距离数据int ps_data = i2c_read_word(fd, 0x0E);int distance = ((ps_data >> 8) & 0x3F) << 4 | (ps_data & 0x0F);printf("Proximity Distance: %d\n", distance);sleep(3); // 每 3 秒读取一次}close(fd);return EXIT_SUCCESS;
}
代码ioctl(fd, I2C_SLAVE, I2C_ADDR)
的作用
I2C_SLAVE
是一个 ioctl
命令,用于设置当前通信的 I2C 从设备地址,在同一条 I2C 总线上可以有多个设备,这个 ioctl
调用用于选择当前要操作的I2C设备,它告诉 Linux的I2C 驱动,后续所有 read()
和 write()
操作都针对 0x1E 这个 I2C 设备。
代码int distance = ((ps_data >> 8) & 0x3F) << 4 | (ps_data & 0x0F);
通过博文 https://blog.csdn.net/wenhao_ir/article/details/146319007 【搜索“读取距离值”】中我们知道需要取一个字的高8位的低6位和低8位的低4位组成一个10位的数值,所以有了这个distance
的计算公式。
注意:0x3F
= 0b0011 1111
,作与操作后就可以得到ps_data高8位的低6位。
交叉编译代码
将文件I2C_direct_control_ATP2126C.c
复制到Ubuntu中:
运行下面的命令编译它得到ELF可执行程序:
arm-buildroot-linux-gnueabihf-gcc -o I2C_direct_control_ATP2126C I2C_direct_control_ATP2126C.c
测试生成的可执行程序
将刚才交叉编译生成的ELF可执行程序复制到NFS网络文件目录中:
打开串口终端→打开开发板→挂载网络文件系统:
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
然后运行下面的命令执行程序:
cd /mnt/IC2_app1
./I2C_direct_control_ATP2126C
运行结果如下:
然后我用手电筒照向芯片AP3216C,运行结果如下:
可见光照强度的数值变大了很多。
接下来我再用我的手指靠近芯片AP3216C,运行结果如下:
可见距离接近值也变大了很多,说明程序没有问题,测试成功。
附代码文件和编译好的ELF可执行程序
https://pan.baidu.com/s/1URp5fmx5iBuusK2GZXCKaA?pwd=3yuq
利用i2c-tools工具集对I2C设备AP3216C进行读写操作
完整代码(I2C_tools_control_ATP2126C.c)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <smbus.h>#define I2C_BUS "/dev/i2c-0" // I2C 设备文件
#define I2C_ADDR 0x1E // AP3216C 设备地址// 写入 I2C 设备寄存器
void i2c_write(int fd, unsigned char reg, unsigned char value) {if (i2c_smbus_write_byte_data(fd, reg, value) < 0) {perror("Failed to write to I2C device");exit(EXIT_FAILURE);}
}// 读取 I2C 设备寄存器(16位数据)
int i2c_read_word(int fd, unsigned char reg) {int res = i2c_smbus_read_word_data(fd, reg);if (res < 0) {perror("Failed to read from I2C device");exit(EXIT_FAILURE);}return res; // 低字节在前,高字节在后
}int main() {int fd = open(I2C_BUS, O_RDWR);if (fd < 0) {perror("Failed to open I2C bus");return EXIT_FAILURE;}if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) {perror("Failed to select I2C device");return EXIT_FAILURE;}// 1. 软复位 AP3216Ci2c_write(fd, 0x00, 0x04);sleep(1); // 等待复位完成// 2. 启用光感和距离检测i2c_write(fd, 0x00, 0x03);sleep(1); // 等待设备启动while (1) {// 3. 读取光照强度数据int als_data = i2c_read_word(fd, 0x0C);printf("Ambient Light: %d\n", als_data);// 4. 读取距离数据int ps_data = i2c_read_word(fd, 0x0E);int distance = ((ps_data >> 8) & 0x3F) << 4 | (ps_data & 0x0F);printf("Proximity Distance: %d\n", distance);sleep(3); // 每 3 秒读取一次}close(fd);return EXIT_SUCCESS;
}
代码分析说明
代码没啥好分析与详解的,与上一个代码差不多,差别就是把对设备的读写函数read、write换成了i2c-tools工具集的函数i2c_smbus_read_word_data
、i2c_smbus_write_byte_data
,其实i2c-tools工具集的函数也是在基本的读写函数read、write上套壳开发的嘛。
交叉编译代码
首先请参考博文 https://blog.csdn.net/wenhao_ir/article/details/146364042 把i2c-tools
编译并安装配置好。
然后把源代码文件I2C_tools_control_ATP2126C.c
复制到Ubuntu中:
运行下面的命令编译它得到ELF可执行程序:
arm-buildroot-linux-gnueabihf-gcc -o I2C_tools_control_ATP2126C I2C_tools_control_ATP2126C.c -L/home/book/mybuild/i2c-tools-4.2/tmp/usr/local/lib -li2c
测试生成的可执行程序
将刚才交叉编译生成的ELF可执行程序复制到NFS网络文件目录中:
打开串口终端→打开开发板→挂载网络文件系统:
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
然后运行下面的命令执行程序:
cd /mnt/IC2_app2
./I2C_tools_control_ATP2126C
运行结果如下:
然后我用手电筒照向芯片AP3216C,运行结果如下:
可见光照强度的数值变大了很多。
接下来我再用我的手指靠近芯片AP3216C,运行结果如下:
可见距离接近值也变大了很多,说明程序没有问题,测试成功。
附代码文件和编译好的ELF可执行程序
https://pan.baidu.com/s/1H6n1CtONgR8JPpqciKq6ww?pwd=z4us
相关文章:
利用Linux的I2C子系统和i2c-tools工具集写出的对I2C设备AP3216C读写的应用程序
前言 由于NXP官方提供的BSP里已经包含了其片上I2C控制器的驱动并接入到了Linux的I2C子系统,所以我们可以直接去写与I2C有关的应用程序了。 在本篇博文中我们用两种方式对I2C设备AP3216C进行读写操作。 第一种:直接利用Linux的I2C子系统对I2C设备AP3216…...
springCloud集成tdengine(原生和mapper方式) 其二 原生篇
mapper篇请看另一篇文章 一、引入pom文件 <!-- TDengine 连接器--><dependency><groupId>com.taosdata.jdbc</groupId><artifactId>taos-jdbcdriver</artifactId><version>3.5.3</version></dependency>二、在nacos中填…...
gralloc usage flags
下面这些示例主要说明了 gralloc usage flags 在图像处理和多媒体应用中如何影响性能和正确性。让我们逐个详细分析每个问题的 根因 和 修复方案,并深入解析 gralloc 标志对 缓存管理 和 数据流 的影响。 ✅ Example 1: 长曝光快照耗时异常 📌 问题描述…...
RIP路由欺骗攻击与防御实验详解
一、基础网络配置 1. 路由器R1配置 interface GigabitEthernet0/0/0ip address 192.1.2.254 255.255.255.0 ! interface GigabitEthernet0/0/1ip address 192.1.3.254 255.255.255.0 ! router rip 1version 2network 192.1.2.0network 192.1.3.0 2. 路由器R2配置 interface…...
在 Linux下使用 Python 3.11 和 FastAPI 搭建带免费证书的 HTTPS 服务器
在当今数字化时代,保障网站数据传输的安全性至关重要。HTTPS 协议通过使用 SSL/TLS 加密技术,能够有效防止数据在传输过程中被窃取或篡改。本教程将详细介绍如何在 Ubuntu 22.04 系统上,使用 Python 3.11 和 FastAPI 框架搭建一个带有免费 SS…...
[QMT量化交易小白入门]-三十五、如何将聚宽策略信号转为QMT实盘交易
本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。 QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。 文章目录 相关阅读一、聚宽模拟运行:构建交易策略的基础在聚宽…...
国思RDIF低代码快速开发框架 v6.2版本发布
1、平台介绍 国思RDIF企业级低代码开发平台,给用户和开发者最佳的框架平台方案,为企业快速构建跨平台、企业级的应用提供强大支持。致力于解决企业信息化项目交付难、实施效率低、开发成本高的问题。能帮助企业快速构建美观易用、架构专业、安全可控的企…...
学习笔记 ASP.NET Core Web API 8.0部署到iis
一.修改配置文件 修改Program.cs配置文件将 if (app.Environment.IsDevelopment()) {app.UseSwagger();app.UseSwaggerUI(); }修改为 app.UseSwagger(); app.UseSwaggerUI(); 二.安装ASP.NET Core Runtime 8.0.14 文件位置https://dotnet.microsoft.com/en-us/download/do…...
【Linux】信号:产生信号
🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 01.信号信号处理简单理解信号的发送和保存由软件产生的信号由硬件(异常)产生的信号 01.信号 进程信号是操作系统提供的一种异步通知机制,用于…...
单片机自学总结
自从工作以来,一直努力耕耘单片机,至今,颇有收获。从51单片机,PIC单片机,直到STM32,以及RTOS和Linux,几乎天天在搞:51单片机,STM8S207单片机,PY32F003单片机,…...
Idea集成docker通过ca加密实现镜像打包
Idea集成docker实现镜像打包_ideadocker镜像打包-CSDN博客 之前通过这种方式虽然可以实现idea通过maven打jar包的同时把docker镜像也进行打包,但是这种方式存在很大漏洞,就是服务器的2375端口大开,任何人拿着idea通过这种方式都可以连…...
【Prometheus】prometheus标签替换label_replace,动态修改生成标签,增强查询的灵活性和表达能力
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
蓝桥杯 之 暴力回溯
文章目录 数字接龙小u的最大连续移动次数问题 在蓝桥杯中,十分喜欢考察对于网格的回溯的问题,对于这类的问题,常常会使用到这个DFS和BFS进行考察,不过无论怎么考察,都只是会在最基础的模本的基础上,根据这个…...
在K8S中挂载 Secret 到 Pod
在 Kubernetes 里,把 Secret 挂载到 Pod 中有两种主要方式:作为卷挂载和作为环境变量挂载。下面为你提供相应的代码示例。 作为卷挂载 Secret 将 Secret 作为卷挂载到 Pod 时,Secret 的每个键会成为挂载目录下的一个文件,文件内…...
LINUX网络编程API原型详细解析
1. 网络体系 1.1. 简介 网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。 每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供…...
Android 13 Launcher3最近任务列表“全部清除“按钮位置优化实战
一、问题背景与实现难点 在Android 13横屏设备开发中,系统默认将最近任务列表的"全部清除"按钮布局在屏幕左侧,这与用户习惯的底部布局存在明显差异。相较于Android 8.1时代SystemUI模块的实现,Android 13将相关逻辑迁移至Launche…...
docker最新源,及遇到问题+处理
目前国内可用Docker镜像源汇总(截至2025年3月) - CoderJia 遇到问题: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:13287->[:…...
Python简单爬虫实践案例
学习目标 能够知道Web开发流程 能够掌握FastAPI实现访问多个指定网页 知道通过requests模块爬取图片 知道通过requests模块爬取GDP数据 能够用pyecharts实现饼图 能够知道logging日志的使用 一、基于FastAPI之Web站点开发 1、基于FastAPI搭建Web服务器 # 导入FastAPI模…...
统信UOS中使用Vscode编程
写在前面:统信UOS其实就是套壳的Linux系统,所以有问题如果搜不到解决方法,可以参考Linux下的解决方法。 1.环境配置 Vscode : 1.85.0 Vscode就直接下载安装就行,然后安装插件:Volar、中文汉化包 node:18…...
C#从入门到精通(1)
目录 第一章 C#与VS介绍 第二章 第一个C#程序 (1)C#程序基本组成 1.命名空间 2.类 3.Main方法 4.注释 5.语句 6.标识符及关键字 (2)程序编写规范 1.代码编写规则 2.程序命名方法 3.元素命名规范 第三章 变量 &…...
openharmony中hilog实证记录说明(3.1和5.0版本)
每次用这个工具hilog都有一些小用法记不清,需要花一些时间去查去分析使用方法,为了给丰富多彩的生活留出更多的时间,所以汇总整理共享来了,它来了它来了~~~~~~~~~ 开始是想通过3.1来汇总的,但实际测试发现openharmony…...
飞书 设计智能字段:通过“字段类型”添加AI功能列
在飞书多维表格中,通过“字段类型”添加AI功能列的核心逻辑是将AI模型能力与结构化数据结合,实现自动化内容生成与信息处理。以下是具体操作步骤及关键要点,结合实际应用场景说明: 一、基础操作步骤 创建多维表格 登录飞书&#x…...
Cannot find module @rollup/rollup-win32-x64-msvc
方法1 在package.json中添加postinstall: "scripts": {"postinstall": "node -e \"const { platform } process; if (platform win32) { require(child_process).execSync(npm install rollup/rollup-win32-x64-msvc, { stdio: inherit });…...
Docker和Dify学习笔记
文章目录 1 docker学习1.1 基本命令使用1.1.1 docker ps查看当前正在运行的镜像1.1.2 docker stop停止容器1.1.3 docker compose容器编排1.1.4 docker网络[1] 进入到容器里面敲命令[2] docker network ls[3] brige网络模式下容器访问宿主机的方式 2 Dify的安装和基础使用2.1 下…...
【AIGC】Win10系统极速部署Docker+Ragflow+Dify
【AIGC】WIN10仅3步部署DockerRagflowDify 一、 Docker快速部署1.F2进入bios界面,按F7设置开启VMX虚拟化技术。保存并退出。2.打开控制面板配置开启服务3.到官网下载docker安装包,一键安装(全部默认勾选) 二、 RagFlow快速部署1.确…...
Oracle ASM 磁盘组冗余策略
Oracle ASM 磁盘组冗余策略 1. 外部冗余(External Redundancy)2. 普通冗余(Normal Redundancy)3. 高冗余(High Redundancy)关键注意事项如何选择合适的策略? Oracle ASM(Automatic S…...
C++ 数据结构
C++ 数据结构 概述 C++作为一种强大的编程语言,在软件开发领域有着广泛的应用。数据结构作为C++编程中不可或缺的一部分,它决定了程序的性能和效率。本文将详细介绍C++中的常见数据结构,包括其定义、特点以及在实际应用中的使用方法。 常见数据结构 1. 数组 数组是一种…...
Unity NodeCanvas AI使用笔记
扩展: 1. 输入输出参数限制,增加描述,根据接口判断类型限制 2.选择节点,遍历节点,行为节点 3.行为节点 行为执行的时候有互斥关系,加入一个queue,最后执行 4.NodeCanvas的参数传参可以由上个节点传到下个节…...
(* IOB = “FORCE“ *) 的使用分享
在Xilinx FPGA设计中,IOBFORCE是一个与输入输出块(IOB)相关的属性设置。这个设置主要用于控制逻辑是否被推入到IOB(Input/Output Block)中,即FPGA芯片边缘的I/O引脚附近的专用硬件资源。使用IOB属性可以帮助…...
【大语言模型_7】利用ragas框架评测rag系统指标
一、介绍 ragas是一个用来评估RAG系统的框架,允许不在依赖人工注释的情况下,通过一套指标评估检索模块和生成模块的性能及其质量。 二、准备 数据准备:需要准备评估数据集,数据集格式如下 [{"question": "安全智…...
adb常用的命令
1. 查看adb版本 adb version 2. 将apk安装包安装到手机/模拟器上 adb install apk路径 3. 获取apk包名和界面名 包名(package):决定程序的唯一性 界面名(activity):一个界面界面名,对应一个界面…...
手动集成sqlite的方法
注意到sqlite有backup方法(https://www.sqlite.org/backup.html)。 也注意到android中sysroot下,没有sqlite3的库,也没有相关头文件。 如果要使用 sqlite 的backup,那么就需要手动集成sqlite代码到项目中。可以如下操…...
自然语言处理(NLP)技术
人工智能(Artificial Intelligence,AI)是一种模拟人类智能思维过程的技术,它在现代科技中的应用非常广泛,涉及诸多领域,如自然语言处理、计算机视觉、机器学习、数据分析等。以下是人工智能在现代科技中的应…...
【GPT入门】第25课 掌握 LangChain:链式调用的奥秘、特性与使用示例
【GPT入门】第25课 掌握 LangChain:链式调用的奥秘、特性与使用示例 语法解释各部分性质链式调用的性质调用方式注意事项 语法解释 你给出的代码 is_duplicated_chain (check_duplicated | model | parser) 运用了 LangChain 里的链式调用语法。在 LangChain 中&a…...
机器学习之DBSCAN算法详解
文章目录 引言1. DBSCAN算法概述2.DBSCAN算法的基本概念2.1 ε-邻域2.2 核心点(Core Point)2.3 边界点(Border Point)2.4 噪声点(Noise Point)2.5 直接密度可达(Directly Density-Reachable&…...
借助vite来优化前端性能
Vite 是一个现代化的前端构建工具,凭借其基于原生 ES 模块的开发服务器和高效的构建能力,可以显著优化前端性能。 一、开发环境优化 1.快速启动与热更新 Vite 利用浏览器对 ES 模块的原生支持,在开发环境中无需打包,直接按需加载…...
[工控机安全] 使用DriverView快速排查不可信第三方驱动(附详细图文教程)
导语: 在工业控制领域,设备驱动程序的安全性至关重要。第三方驱动可能存在兼容性问题、安全漏洞甚至恶意代码,威胁设备稳定运行。本文将手把手教你使用 DriverView工具,高效完成工控机驱动安全检查,精准识别可疑驱动&a…...
Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac‘.
What went wrong: Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac’. Could not resolve all files for configuration ‘:path_provider_android:androidJdkImage’. Failed to transform core-for-system-modules.jar to match attributes {…...
基于SpringBoot的社区/物业管理系统
项目介绍 平台采用B/S结构,后端采用主流的SpringBoot语言进行开发,前端采用主流的Vue.js进行开发。是一个综合的社区/物业管理系统。 整个平台包括前台和后台两个部分。 - 前台功能包括:小区信息、社区论坛、社区公告、社区留言板、个人中心。…...
vmware下linux无法上网解决方法
首先,打开打开"编辑" “虚拟网络编辑器”,并将"桥接"方式的网卡选择为主机上网的网卡。 虚拟机中,设置IP地址为主机网卡同样子网下的ip地址: 并且要选择桥接模式!注意如下图,"复制物理连接状…...
【数据库备份】docker中数据库备份脚本——MySql备份脚本
docker中数据库备份脚本——MySql备份脚本 #!/bin/bash# MySQL数据库信息 DB_USER"root" DB_PASSWORD"你的密码"# 备份保存主目录 BACKUP_ROOT"/data/data_backup/mysql"# 最多保留的备份日期文件夹数 MAX_DATE_FOLDERS15# 数组包含要备份的数据…...
SpringBoot 第二课(Ⅰ) 整合springmvc(详解)
目录 一、SpringBoot对静态资源的映射规则 1. WebJars 资源访问 2. 静态资源访问 3. 欢迎页配置 二、SpringBoot整合springmvc 概述 Spring MVC组件的自动配置 中央转发器(DispatcherServlet) 控制器(Controller) 视图解…...
centos家用笔记
改用阿里云yum源 因CentOS7已经停止维护,原有的yum源也无法使用,在国内,改用阿里云yum源是个方便的选择。 cd /etc/yum.repos.d/ mkdir backup mv Cent* backup wget http://mirrors.aliyun.com/repo/Centos-7.repo mv Centos-7.repo Cen…...
数据可视化(matplotlib)-------辅助图标的设置
目录 一、认识图表常用的辅助元素 坐标轴 二、设置坐标轴的标签、刻度范围和刻度标签 (一)、设置坐标轴的标签 1、xlabel()------设置x轴标签 2、ylabel()------设置y轴标签 (二) 、设置刻度范围和刻度标签 1、xlim()和ylim()函数分别可…...
15-双链表-双链表基本操作
题目 来源 827. 双链表 - AcWing题库 思路 此题我只想说,千万千万别漏了头结点和尾结点,不然根本查不出来是哪里出了问题,因为传入的k会有问题;最左边插入,相当于是在头结点的右边插入(也就是0号节点的右…...
HTTP和RPC的区别
RPC和 HTTP是两种常见的通信方式,它们在设计目标、使用场景和技术实现上有显著区别。以下是它们的详细对比: 1. 定义与核心思想 特性RPCHTTPRemote Procedure Call远程过程调用HyperText Transfer Protocol超文本传输协议定义一种协议或框架࿰…...
【Linux内核系列】:动静态库详解
🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 有些鸟儿是注定是关不住的,因为它们的每一片羽翼都沾满了自由的光辉 ★★★ 本文前置知识: 编译与链接的过程…...
【IROS 2025】CMU提出路径规划器PIPE:机器人探索效率提升14.6%,地图准确率提高9.3%!
在自主机器人探索未知环境的研究中,如何高效地规划路径、最大化信息获取,一直是一个核心问题。传统的方法往往仅在离散的路径点上计算信息增益,而缺乏对整个路径信息获取的综合考量,从而可能导致探索低效甚至错误的规划决策。近日…...
《笔记》Android 获取第三方应用及查看应用信息、apk大小、缓存、存储,以及第三方清除缓存
获取应用相关信息: PS:manifest标签中设置以下属性表示系统应用 android:process"system" android:sharedUserId"android.uid.system" //获取所有应用(非系统apk,有些应用获取不到) List<ApplicationInf…...
npm 安装 pnpm 的详细步骤及注意事项
一、安装步骤 1.全局安装 pnpm npm install -g pnpm2.验证安装 pnpm -v输出版本号即表示安装成功。 二、升级 pnpm 若已安装旧版本,可通过以下命令升级: npm install -g pnpmlatest三、配置镜像加速 设置淘宝镜像 pnpm config set registry http…...