【MCAL】TC397+EB-tresos之I2c配置实战(同步、异步)
I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信。本篇文章首先从理论讲起,介绍了英飞凌TC3x系列芯片对应MCAL中对I2C驱动的定义与介绍,建议读者在阅读本篇文章之前对I2C有个简单的认识,协议本身比较简单,笔者就不在文章中赘述了。文章后边主要介绍了I2c的EB配置,如果是异步则需要配置中断和回调函数。文章的最后还是老样子给读者介绍了I2C驱动的调试代码和测试结果,因为本系列是基于KIT_A2G_TC397XA_TFT开发板做的调试,所以就直接使用了开发板上接的MCP79411芯片来验证I2C是否调通。PS:关于MCP79411芯片的一些I2C参数要求都源自其芯片手册,文中就不截相关的图了。
目录
概述
依赖模块
I2C
SCU
Port
SRC
环境与目标
EB tresos配置
MCU
Port
I2C
General
I2cChannelconfiguration
IRQ
I2C驱动调试
测试代码
测试结果
概述
MCAL实现的I2c驱动程序负责初始化I2c硬件模块。它还提供将数据写入从机并从从机读取数据的服务,实现方式支持同步(数据传输不会发生中断调用)和异步(数据将通过中断调用传输)的读写操作模式。MCAL实现的I2c驱动程序不支持从机模式。
该驱动程序支持:
- 主机模式
- 标准模式数据传输速率高达100k bit/s(20k bit/s~100k bit/s)
- 快速模式数据传输速率高达400k bit/s(100k bit/s~400k bit/s)
- 7位I2c总线寻址
模块软硬件接口如下图所示。
依赖模块
I2C
12C驱动程序使用的I2C硬件单元的关键特性有:
- 主机模式
- 标准模式数据传输速率高达100k bit/s(20k bit/s~100k bit/s)
- 快速模式数据传输速率高达400k bit/s(100k bit/s~400k bit/s)
- 7位I2c总线寻址
- I2C时钟的预分频器(从0到255)
- 通过分数除法器生成比特率
驱动使用的硬件事件包括(涉及的大写标志位相关寄存的位域名称):
- 发送/接收完成时的TX_END标志。
- 从发送模式切换到接收模式时的RX标志。
- LSREQ_INT,SREQ_INT,LBREQ_INT,BREQ_INT标志,用于用确定的数据数填充FIFO。
- 传输和接收过程中出现错误时的错误标志。
SCU
kernel_clk由来自fl2C的MCU驱动程序设置。内核时钟对于保持l2C协议指定的比特率是必需的。
interface_clk直接连接到fSPB。interface_clk需要驱动FIFO、SFR和服务请求块。
SCU模块为所有外围设备提供时钟。MCU驱动程序负责时钟树的配置。
I2C驱动程序依赖于MCU驱动程序进行时钟生成。fI2C定义了I2C核心的应用时钟频率。从PLL2(200MHZ)导出的fI2C独立于fSPB,允许I2C以恒定的波特率(频率)运行。此配置可以使用Tresos中MCU模块中的Mcul2Cfrequency完成。频率需要在MCU模块配置参数McuClockRefSelection中简历对应引用,而McuClockRefSelection最终由Tresos中的I2C配置引用。
Port
I2C外围设备的SCL、SDA引脚的方向和模式选择由Port驱动器配置。PORT驱动程序配置整个微控制器的端口引脚。用户必须在调用I2C初始化之前通过PORT配置引脚,并初始化端口引脚。
I2C驱动程序需要配置两个引脚,SCL和SDA。SCL代表时钟,SDA代表数据。由于I2C协议允许多主,因此需要将SDA配置为开漏以实现线与逻辑。
SRC
I2C可以在多种事件发生时触发中断,每种I2C模块的中断情况都不同。对于这些中断,I2C驱动程序依赖于中断路由器进行中断传递。中断路由器的任何功能块都不由I2C驱动程序管理。中断路由器完全由IRQ驱动程序管理。中断优先级和服务类型(TOS)在IRQ 驱动程序中集中配置,从而避免了资源冲突。I2C模块有三个中断线:
- Protocol Interrupt:这个中断源有七种,分别是:发送结束、接收模式、仲裁丢失、没有ACK、地址匹配、通用调用和主码构成。服务请求线SRC_I2C0P被用作协议中断。MCAL提供的中断处理函数为I2c_IsrI2cProtocol,用作在读取且地址已经发出的情况下,进行包括I2C_NO_ACK、I2C_ARBITRATION_LOST等协议状态获取,并回调对应通道的通知函数。
- Error Interrupt:这个中断有四个来源。这个中断是由传输溢出、传输下溢、接收下溢。服务请求线SRC_I2C0ERR用于错误中断。用户必须确保在发生错误中断时调用12c驱动程序提供的错误中断服务例程。MCAL提供的错误中断实现函数为I2c_IsrI2cError。
- Data transfer Interrupt:这个中断有四个来源。这个中断由任何类型突发请求、上次突发请求、单次请求、上次单次请求生成。服务请求线SRC_I2C0DTR用于数据传输中断。MCAL提供的中断处理函数为I2c_IsrI2cDtr,它负责处理I2C数据的连续写入和读取。
环境与目标
本文使用的为英飞凌提供的开发板KIT_A2G_TC397XA_TFT,使用X102上排针的P15.4和P15.5作为I2C使用引脚。
在TC397 KIT开发板上,P15.4和P15.5,不仅从X102引出,还连接到了RTC MCP79411。
涉及的软件如下:
- EB-tresos:用于生成动态代码,具体工程搭建参考《【AUTOSAR MCAL】MCAL基础与EB tresos工程新建》。
- HighTech:用于编译生成elf文件,具体的工程搭建参考《【MCAL】HighTec集成TC3xx对应MCAL的Demo》。
- UDE 5.2:用于下载和调试程序。
涉及的参考文档如下表。
序号 | 参考资料 | 内容 |
1 | 《Infineon-AURIX_TC39x-UserManual-v02_00-EN》 | 英飞凌TC39x用户手册 |
2 | 《Infineon-AURIX_TC3xx_Part1-UserManual-v02_00-EN.pdf》 | 英飞凌TC3xx用户手册 |
3 | 《Infineon-AURIX_TC3xx_Part2-UserManual-v02_00-EN.pdf》 | 英飞凌TC3xx用户手册 |
4 | 《Infineon-TC39x-DataSheet-v01_00-EN》 | 英飞凌TC39x数据手册 |
5 | 《ApplicationKitManual-TC3X7-ADAS-V21.pdf》 | 开发板KIT_A2G_TC397XA_TFT说明 |
6 | 《MC-ISAR_TC3xx_UM_I2c.pdf》 | 英飞凌提供的TC3xx芯片I2C用户手册 |
7 | 《DS22266A_CN》 | MCP79410/MCP79411/MCP79412芯片手册 |
配置目标如下:
- 通过I2C同步/异步读取MCP79411芯片中6字节长度的ID值。
EB tresos配置
MCU
配置fI2C的频率。
Port
上图是Port口的配置信息,根据的是下图芯片DataSheet信息。
注意SDA需要配置成开漏输出。
I2C
General
跟其他的模块差不多,都是包含了一些API使能,错误检测以及时钟选择等。
I2cChannelconfiguration
我们需要关注的配置项包括:
- I2cHwUnit:此参数选择要分配给通道的硬件单元。
- I2cSDASelect:该参数选择SDA对应的引脚端口。
- I2cSCLSelect:该参数选择SCL对应的引脚端口。
- I2CSpeed:定义了数据传输速度的模式信息,包括STANDARD_MODE、FAST_MODE、HIGH_SPEED_MODE。
- I2cAddressingMode:这个参数定义了寻址模式(7/10位),需要寻址slave。
- I2cFractionalDividerDec:该参数包含了小数分法器的DEC值。
- I2cFractionalDividerInc:此参数包含了小数分发器的INC值。它跟I2cFractionalDividerDec、I2CSpeed共同决定了I2C的通信速率,下面是手册中包含的计算方法。
- I2cRmc:该参数包含CLC1寄存器的I2cRmc值。
- I2cAsyncNotification :是否启用回调函数。
- I2cPacketEndNotification:回调函数名。
- I2cTxTimeOut:该参数包含写操作的超时值。
- I2cRxTimeOut:该参数包含读操作的超时值。
IRQ
配置对应中断优先级,打开相应中断。
I2C驱动调试
测试代码
测试代码如下,可以看到它给MCP79411发送完I2C设备地址1010111(0x57)之后,在写入了要读取的EEPROM地址0xF2之后,然后再向同样的设备地址发送读取6字节ID数据。代码分别实现了异步和同步I2C操作,通过条件编译宏I2CASYENABLE区分。I2cDemoInit实现了I2C的初始化,异步的需要完成中断的配置,I2C_DemoFunction完成使用I2C读取MCP79411中设备的6字节ID数据(分为同步和异步),IoHwAb_I2cNotification0则是中断的回调函数,若协议中断的返回不是I2C_NO_ERR,则进入死循环。
void I2cDemoInit()
{
#if I2CASYENABLEIrqI2c_Init();SRC_I2C0DTR.B.SRE = 1;SRC_I2C0ERR.B.SRE = 1;SRC_I2C0P.B.SRE = 1;
#endifI2c_Init(&I2c_Config);
}#define MCP79411_EEPROM_ADDRESS 0x57 /* 7 bit slave device address for reading from EEPROMof MCP79411 is 0b1010111 which is 0x57. */
#define ADDRESS_OF_MAC_ADDRESS 0xF2 /* Location of EUI-48 node address (MAC address) */
#define LENGTH_OF_ADDRESS 1 /* Length of address of the register, in which therequested MAC address is stored in bytes */
#define LENGTH_OF_MAC_ADDRESS 6 /* Length of the MAC address in bytes */uint8 g_macAddr[LENGTH_OF_MAC_ADDRESS] = {0, 0, 0, 0, 0, 0}; /* Global parameter for 6-byte EUI-48 MAC address */#define I2C_USER_CHANNEL0 (0)
I2c_ChannelStatusType I2c_GetStatuss = I2C_UNINIT;void I2C_DemoFunction(void)
{/* Address of 6-byte EUI-48 MAC address location */uint8 i2cTxBuffer[1] = {ADDRESS_OF_MAC_ADDRESS};#if I2CASYENABLE//Async read operationI2c_AsyncWrite(I2C_USER_CHANNEL0, &i2cTxBuffer[0], LENGTH_OF_ADDRESS, MCP79411_EEPROM_ADDRESS);//write read addresswhile(I2c_GetStatus(I2C_USER_CHANNEL0) == I2C_BUSY);I2c_AsyncRead(I2C_USER_CHANNEL0, &g_macAddr[0], LENGTH_OF_MAC_ADDRESS, MCP79411_EEPROM_ADDRESS);//read registerwhile(I2c_GetStatus(I2C_USER_CHANNEL0) == I2C_BUSY);
#elseI2c_SyncWrite(I2C_USER_CHANNEL0, &i2cTxBuffer[0], 1, MCP79411_EEPROM_ADDRESS);//write read addressI2c_SyncRead(I2C_USER_CHANNEL0, &g_macAddr[0], 6, MCP79411_EEPROM_ADDRESS);//read register#endif}
#endifvoid IoHwAb_I2cNotification0(I2c_ErrorType ErrorId)
{count++;if(ErrorId){while(1);}
}
测试结果
我们连接X102引出的引脚之后,可以通过逻辑分析仪测量实际的信号,可以得到如下的结果:
- 发送:0xAE 0xF2
- 接收:0xAF 0xE8 0xD6 0x36 0x11 0x04 0x66
发送的地址为0x57,左移一位为0xAE,写的话最低位为0,则发送的第一个字节为0xAE,然后再发送我们想发送的EEPROM地址为0xF2,接收发送的第一个字节为0xAE+1(最低位为1表示接收),然后后边的6个字节即为地址0xF2下的6字节设备ID。
当然,您也可以在UDE观察g_macAddr数组的值。一般读取ID都是调试I2C的第一阶段,读到了就代表I2C已经通了。
十六宿舍 原创作品,转载必须标注原文链接。
©2023 Yang Li. All rights reserved.
欢迎关注 『十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。
相关文章:
【MCAL】TC397+EB-tresos之I2c配置实战(同步、异步)
I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信。本篇文章首先从理论讲起,介绍了英飞凌TC3x系列芯片对应MCAL中对I2C驱动的定义与介绍,建议读者在阅读本篇文章之前对I2C有个简单的认识…...
电网拓扑分析:原理与应用
在现代电力系统中,电网拓扑分析是一项至关重要的技术,它为电力系统的安全、稳定和高效运行提供了坚实的基础。电网拓扑描述了电力系统中各元件(如发电机、变压器、输电线路、负荷等)之间的连接关系,通过拓扑分析&#…...
leetcode-hot-100(哈希)
写在前面 这部分官方标记为哈希,下面的代码使用的都是 C 进行实现,说到 C 中的哈希,需要了解一下 C 中的 hashtable(std::unordered_map或std::unordered_set)。 std::unordered_map std::unordered_map 是一个存储…...
音频类网站或者资讯总结
我爱音频网: 我爱音频网 - 我们只谈音频,丰富的TWS真无线蓝牙耳机拆解报告 (52audio.com) 其他更多资讯 音频行业全品类深度剖析,2024市场趋势解读汇总-EDN 电子技术设计 (ednchina.com)...
优选算法——前缀和
目录 1. 数组的中心下标 2. 除自身以外数组的乘积 3. 和为k的子数组 4. 和可被K整除的子数组 5. 连续数组 6. 矩阵区域和 1. 数组的中心下标 题目链接:724. 寻找数组的中心下标 - 力扣(LeetCode) 题目展示: 题目分析&am…...
VScode密钥(公钥,私钥)实现免密登录【很细,很全,附带一些没免密登录成功的一些解决方法】
一、 生成SSH密钥对 ssh-keygen 或者 ssh-keygen -t rsa -b 4096区别:-t rsa可以明确表示生成的是 RSA 类型的密钥-b参数将密钥长度设置为 4096 位默认:2048 位密钥不指定-t参数,ssh -keygen默认也可能生成 RSA 密钥【确保本机安装ssh&#…...
MySQL进阶篇2_SQL优化、锁
文章目录 1 SQL优化1.1插入数据优化1.2主键优化页分裂页合并主键设计原则 1.3order by设计优化1.4group by设计优化小理解 1.5limit设计优化顺序IO和随机IO小疑惑 1.6count设计优化1.7update优化关于隐式事务事务的DML操作 锁全局锁表级锁表锁元数据锁意向锁 行级锁锁的释放条件…...
Yocto项目实战经验总结:从入门到高级的全面概览
本文面向开发者和实际项目经验者,分享经过大量实战积累的 Yocto 项目工程经验和基础技巧。本文简明但精彩,应用和观察相结合,充分适合做为全面进阶 Yocto 项目开发的实用指南。 一、入门理解:Yocto 是什么?规划如何开始…...
关于web3
主流看法,集合当前网络上的大部分资料的看法? 基于区块链运行的交易系统?面向的交易市场是基于世界的,由于将整个世界的交易联系起来,所以底层区块链就类似于一个非常大的分布式系统,由于需要在各个地区都…...
以影像为笔,劳润智在世界舞台上书写艺术之路
在光影交织中,摄影师劳润智的镜头仿佛能穿透喧嚣,捕捉人类情感最细腻的脉动。从疫情下洛杉矶裁缝日常的温馨瞬间,到象征自由与解脱的飞鸟影像,再到探索时间与空间交错的抽象作品,每一幅作品都展现了他对艺术的深度追求与对生活的温柔洞察。 劳润智的作品为他赢得了多个国际奖项…...
2025python学习笔记
一.Python语言基础入门 第一章 01.初识Python Python的起源: 1989年,为了打发圣诞节假期,Gudio van Rossum吉多范罗苏姆(龟叔)决心开发一个新的解释程序(Python维形)1991年,第一个…...
数学相关使用笔记
1、样本标准差计算步骤整理 1. 基础数据 数据样本:[44.530, 44.023, 43.837, 44.213, 44.498] 样本量:n5 2. 计算步骤 (1) 求均值 总和 44.53044.02343.83744.21344.498 221.101 均值 221.101/5 44.2202 (2) 求平方差 ① (44.530-44.2202) 0.3…...
0.环境初始化
容器化部署 Nginx 前端文件在 html\hmdp 下,挂载到 /usr/share/nginx/html 下 所以要求 nginx.conf : root /usr/share/nginx/html; index index.html; 反向代理:proxy_pass http://host.docker.internal:8081; listen 80; 因为容器内端…...
数仓-范式建模、维度建模、雪花模型、星型模型对比及其适用范围
1. 范式建模 定义 范式建模是一种基于关系型数据库设计的建模方法,遵循数据库的范式规则(如第一范式、第二范式、第三范式等),通过消除数据冗余、规范化字段和表结构来优化存储。数据被分解为多个表,通过外键关系进行…...
批量导出docker镜像
#!/bin/bash # 创建备份目录 BACKUP_DIR"docker_images_single_backup" mkdir -p "$BACKUP_DIR" # 遍历所有镜像 docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" | while read -r line; do # 提取镜像名称和ID REPO_TAG$(echo …...
棒球裁判员学习指南·棒球1号位
针对棒球裁判员的规则学习与能力提升指南,包含系统性学习路径和实践建议,帮助裁判员高效掌握规则并提升执法水平: 一、基础规则体系构建 1. 官方规则精读 核心文件:完整研读《世界棒垒球联盟(WBSC)官方规…...
vue注册用户使用v-model实现数据双向绑定
定义数据模型 Login.vue //定义数据模型 const registerData ref({username: ,password: ,confirmPassword: })使用 v-model 实现数据模型的key与注册表单中的元素之间的双向绑定 <!-- 注册表单 --><el-form ref"form" size"large" autocompl…...
BM14 链表的奇偶重排
20250510 题目我的解法❗️问题描述:为什么会报 OutOfMemoryError?🔍详细分析✅如何修复?✅推荐修改方案(正确版本)✅为什么这样改有效?🧪测试示例✅总结 修改 题目 我的解法 impor…...
Client 和 Server 的关系理解
client.py 和 server.py 是基于 MCP(Multi-Component Protocol)协议的客户端-服务端架构,二者的关系如下: 1. 角色分工 server.py:服务端,负责注册和实现各种“工具函数”(如新闻检索、情感分…...
Checkmk实战指南:从零构建企业级监控系统
在当今复杂的IT环境中,监控系统如同运维团队的"眼睛"和"耳朵",而Checkmk正是一款能够帮助企业实现全方位监控的开源利器。本文将带您从零开始,通过8个关键步骤构建一个功能完备的监控系统,涵盖从安装部署到高级优化的完整流程。 一、为什么选择Checkm…...
多模态大模型中的视觉分词器(Tokenizer)前沿研究介绍
文章目录 引言MAETok背景方法介绍高斯混合模型(GMM)分析模型架构 实验分析总结 FlexTok背景方法介绍模型架构 实验分析总结 Emu3背景方法介绍模型架构训练细节 实验分析总结 InternVL2.5背景方法介绍模型架构 实验分析总结 LLAVA-MINI背景方法介绍出发点…...
车载电子电器架构 --- 汽车网关概述
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
JVM对象创建内存分配
对象创建的主要流程: 检查加载类–》分配内存–》初始化–》设置对象头–》实例化,执行init方法。 在内存分配中,虚拟机将为新生对象内存分配 Minor GC : 新生代垃圾收集,特点是频繁,回收速度快; Full GC …...
project从入门到精通(五)
目录 创建资源的基本信息 在project中创建资源工作表 编辑信息详解 最大单位 标准费率与加班费率 每次使用成本 成本累算 基准日历 三类资源工作表的总结——不同的资源必须要设置的属性 除了资源名称是必须设置的之外,剩余的资源的可设置选项如下图所…...
研发效率破局之道阅读总结(5)管理文化
研发效率破局之道阅读总结(5)管理文化 Author: Once Day Date: 2025年5月10日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 程序的艺术_Once-Day…...
Java常用类概述
Java常用类概述 一、字符串三剑客1. String(不可变字符串)2. StringBuilder(可变,线程不安全)3. StringBuffer(可变,线程安全) 二、日期时间类(重点掌握新版APIÿ…...
202535| Kafka架构与重要概念+幂等性+事务
好的!以下是关于 Kafka 架构 以及其 重要概念 的详细介绍,结合 Mermaid 图形 和 表格,帮助你更好地理解各个概念的关系和作用。 Kafka 架构与重要概念 Kafka 是一个分布式消息系统,广泛应用于日志收集、流处理、事件驱动架构等场…...
MySQL 索引和事务
目录 一、MySQL 索引介绍 1、索引概述 2、索引作用 3、索引的分类 (1)普通索引 (2)唯一索引 (3)主键索引 (4)组合索引(最左前缀) (5&…...
IPFS与去中心化存储:重塑数字世界的基石
引言 在数据爆炸式增长的数字时代,中心化存储的弊端日益凸显——数据垄断、隐私泄露、单点故障等问题频发。IPFS(InterPlanetary File System) 作为一种去中心化存储协议,正与区块链技术共同推动一场存储革命。本文将深入解析IPF…...
Web3 学习全流程攻略
目录 🧭 Web3 学习全流程攻略 🌱 第一阶段:打好基础(Web3 入门) 🧠 目标: 📚 学习内容: ✅ 推荐资源: 🧑💻 第二阶段:技术栈搭建(成为 Web3 开发者) 🧠 目标: 📚 学习内容: ✅ 推荐资源: 🌐 第三阶段:构建完整 DApp(去中心化应用)…...
AUTODL Chatglm2 langchain 部署大模型聊天助手
资源申请 注册登录 进入下面的链接 AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDLAutoDL为您提供专业的GPU租用服务,秒级计费、稳定好用,高规格机房,7x24小时服务。更有算法复现社区,一键复现算法。https://autodl.com/ho…...
牛客练习赛138
牛客练习赛138 A.小s的签到题 思路:过题人数最多的就是签到题 #include <bits/stdc.h> using namespace std; typedef long long ll; typedef pair<int, char> PII;bool cmp(PII a, PII b) {return a.first > b.first; }void solve() {int n;cin …...
【脑机接口临床】脑机接口手术的风险?脑机接口手术的应用场景?脑机接口手术如何实现偏瘫康复?
脑机接口的应用 通常对脑机接口感兴趣的两类人群,一类是适应症患者 ,另一类是科技爱好者。 1 意念控制外部设备 常见的外部设备有:外骨骼、机械手、辅助康复设备、电刺激设备、电脑光标、轮椅。 2 辅助偏瘫康复或辅助脊髓损伤患者意念控制…...
普通IT的股票交易成长史--股价起伏的真相-缺口(2)
声明:本文章的内容只是自己学习的总结,不构成投资建议。价格行为理论学习可参考简介中的几位,感谢他们的无私奉献。 送给自己的话: 仓位就是生命,绝对不能满仓!!!!&…...
基于NI-PXI的HIL系统开发
基于NI-PXI平台的汽车电控单元HIL系统开发全解析 引言:HIL系统如何成为汽车电控开发的“效率倍增器”? 某车企通过基于NI-PXI的HIL系统,将悬架控制器的测试周期从3个月压缩至2周,故障检出率提升65%。这背后是硬件在环技术对汽车电…...
IOC和Bean
IOC IOC将对象的创建,依赖关系的管理和生命周期的控制从应用程序代码中解耦出来了 IOC容器的依赖注入(DI) 在程序运行过程中动态的向某个对象中注入他所需要的其他对象 依赖注入是基于反射实现的 Spring IOC 容器使用的是Map(concorrentMapÿ…...
助力你的Neovim!轻松管理开发工具的魔法包管理器来了!
在现代编程环境中,Neovim 已经成为许多开发者的编辑器选择。而针对 Neovim 的各种插件与功能扩展,则是提升开发体验的重要手段。今天我们要介绍的就是一个强大而便捷的开源项目——mason.nvim,一个旨在简化和优化 Neovim 使用体验的便携式包管…...
AI与机器人学:从SLAM到导航的未来
AI与机器人学:从SLAM到导航的未来 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 AI与机器人学:从SLAM到导航的未来摘要引言技术路线对比1. 传感器融合架构:纯激光 vs 多模态2. …...
C++学习之模板初阶学习
今天我们来学习C中模板的学习。但是模板是C中比较难的部分,因此本节我们直接出相对比较初阶的部分。 目录 泛型编程 函数模板 函数模板格式 函数模板的原理 函数模板的特性 函数模板的实例化 模板参数的匹配原则 类模板 类模板定义格式 类模板实例化 泛型…...
专业级软件卸载工具:免费使用,彻底卸载无残留!
在数字生活节奏日益加快的今天,我们的电脑就像每天都在"吃进"各种软件。但您是否注意到,那些看似消失的程序其实悄悄留下了大量冗余文件?就像厨房角落里积攒的调味瓶空罐,日积月累就会让系统变得"消化不良"。…...
JSON|cJSON 介绍以及具体项目编写
一、JSON介绍 JSON(JavaScript Object Notation 即JavaScript对象表示法)是一种轻量级的数据交换格式。采用完全独立于编程语言的文本格式来存储和表示数据。 JSON是一种数据交换格式.JSON独立于编程语言(你不必学习JavaScript).JSON表达数据的方式对通…...
Cell | 大规模 单细胞图谱 揭示非小细胞肺癌抗PD-1治疗后的免疫微环境异质性
–https://doi.org/10.1016/j.cell.2025.03.018 A single-cell atlas reveals immune heterogeneity in anti-PD-1-treated non-small cell lung cancer 留意更多内容:组学之心 研究简介 背景与问题 非小细胞肺癌(NSCLC)术后复发率高。新…...
光流 | 基于深度学习的光流估计算法汇总,原理,公式,流程图,代码
基于深度学习的光流算法 一、光流估计的基本原理二、基于深度学习的光流估计算法1. **FlowNet系列**2. **FlowNet 2.0**3. **PWC-Net**4. **RAFT(Recurrent All-Pairs Field Transformers)**5. **LiteFlowNet系列**三、算法流程图示例FlowNet2.0架构PWC-Net金字塔处理流程四、…...
常见的算法介绍
算法概述线性回归(Linear Regression)线性回归是一种通过属性的线性结合来进行预测的线性模型, 其目的是找到一条直线, 一个平面或者更高维的超平面, 使预测值和真实值之间的误差最小化逻辑回归(Logistic Regression)逻辑回归是一种分类模型, 入二分类公式 P ( Y 1 ∣ X ) e …...
【基于 LangChain 的异步天气查询1】异步调用 Open-Meteo API 查询该城市当前气温
目录 一、功能概述 二、文件结构 三、城市天气实时查询(运行代码) weather_runnable.py main.py 运行结果 四、技术亮点 五、使用场景 一、功能概述 它实现了以下主要功能: 用户输入地点(城市名) 构造提示词…...
深入解析JavaScript变量作用域:var、let、const全攻略
在JavaScript中,变量作用域是一个核心概念,它决定了变量的可访问性和生命周期。理解变量作用域对于编写清晰、高效且无错误的代码至关重要。本文将深入探讨JavaScript中不同类型的变量声明方式(var、let、const等),分析…...
C33-函数嵌套及编码实战
我们以一个编程题目的实践来学习此部分内容 题目:输入四个数,以函数的方式找出最大值 思维:使用两个数找出较大值→较大值与第三个数比较得出新的较大值→新的较大值与第四个数比较得出最大值 代码 #include <stdio.h>//内层函数的封装int GetMaxFromTwoNums(int a,int…...
clangd与clang-tidy
Clangd是基于Clang的Language Server,主要用于提供代码补全、跳转定义、错误提示等IDE功能。而Clang-Tidy则是静态代码分析工具,用于检查代码中的潜在问题,比如风格违规、潜在bug等。 clangd 核心工作原理 1. 基于编译器的精准解析 底层引擎…...
【Linux】冯诺依曼体系结构和操作系统的理解
目录 冯诺依曼体系结构一个例子来深入理解 初识操作系统操作系统的作用设计操作系统的目的操作系统之上和之下分别有啥 管理的精髓,先描述,再组织 冯诺依曼体系结构 我们知道,计算机这个东西发明出来就是帮助人们快速解决问题的。那如果我们想…...
Windows系统Jenkins企业级实战
目标 在Windows操作系统上使用Jenkins完成代码的自动拉取、编译、打包、发布工作。 实施 1.安装Java开发工具包(JDK) Jenkins是基于Java的应用程序,因此需要先安装JDK。可以从Oracle官网或OpenJDK下载适合的JDK版本。推荐java17版本&#x…...