当前位置: 首页 > article >正文

I2C基础复习

一、I2C 基础详解I2CInter-Integrated Circuit集成电路总线是一种半双工、同步、多主多从的串行通信协议由 Philips现 NXP于 1982 年发明广泛用于 MCU 与低速外设如传感器、EEPROM、RTC、OLED 屏之间的通信。1. 核心引脚I2C 仅需 2 根双向信号线且均需上拉电阻通常 4.7kΩ ~ 10kΩ引脚全称功能SDASerial Data串行数据线用于传输数据/地址SCLSerial Clock串行时钟线由主设备产生控制通信节奏2. 通信协议核心时序I2C 通信由起始信号开始停止信号结束中间包含地址、数据和应答位起始信号SSCL 为高电平时SDA 从高变低启动通信。停止信号PSCL 为高电平时SDA 从低变高结束通信。数据传输SCL 低电平时SDA 可变化SCL 高电平时SDA 必须稳定采样数据。应答位ACK/NACK每传输 8 位数据后接收方拉低 SDA 发送 ACK确认否则发送 NACK非确认。3. 地址模式7 位地址最常用从机地址占 7 位第 8 位是读写位0写1读。10 位地址扩展地址空间分两个字节传输第一个字节高 5 位固定为11110。4. 时钟速度模式模式时钟速度典型应用标准模式100 kHz通用低速外设快速模式400 kHz传感器、EEPROM快速模式1 MHz高速需求场景高速模式3.4 MHz极少用需特殊硬件二、Linux 应用层 I2C 实现基于 i2c-dev 驱动Linux 内核提供了i2c-dev驱动将 I2C 总线抽象为/dev/i2c-X设备文件X 为总线号应用层通过ioctl即可控制 I2C 通信。步骤 1准备环境确保系统加载了i2c-dev驱动lsmod|grepi2c_dev若未加载执行sudomodprobe i2c_dev查看可用的 I2C 总线i2cdetect-l# 列出所有 I2C 总线扫描总线上的从设备以总线 0 为例sudoi2cdetect-y0# 扫描 /dev/i2c-0 上的设备步骤 2代码实现一步一步以下是完整的应用层 I2C 通信代码以MPU6050 陀螺仪/加速度计从机地址0x68WHO_AM_I 寄存器0x75返回值应为0x68为例包含打开设备、写寄存器、读寄存器、组合读写等步骤。#includestdio.h#includestdlib.h#includestring.h#includefcntl.h#includeunistd.h#includesys/ioctl.h#includelinux/i2c-dev.h#defineI2C_DEV_PATH/dev/i2c-0// 需根据实际硬件修改如 /dev/i2c-1#defineMPU6050_ADDR0x68// MPU6050 从机地址#defineWHO_AM_I_REG0x75// WHO_AM_I 寄存器地址// 步骤 1打开 I2C 设备文件inti2c_open(constchar*dev_path){intfdopen(dev_path,O_RDWR);if(fd0){perror(Failed to open I2C device);return-1;}returnfd;}// 步骤 2设置从机地址inti2c_set_addr(intfd,uint8_taddr){if(ioctl(fd,I2C_SLAVE,addr)0){perror(Failed to set I2C slave address);return-1;}return0;}// 步骤 3向从机写单个寄存器inti2c_write_reg(intfd,uint8_treg,uint8_tdata){uint8_tbuf[2]{reg,data};// 第一个字节是寄存器地址第二个是数据if(write(fd,buf,2)!2){perror(Failed to write I2C register);return-1;}return0;}// 步骤 4从从机读单个寄存器inti2c_read_reg(intfd,uint8_treg,uint8_t*data){// 先写寄存器地址告诉从机要读哪个寄存器if(write(fd,reg,1)!1){perror(Failed to write register address);return-1;}// 再读数据if(read(fd,data,1)!1){perror(Failed to read I2C register);return-1;}return0;}// 步骤 5组合读写更高效使用 I2C_RDWR 一次完成inti2c_read_reg_combined(intfd,uint8_treg,uint8_t*data){structi2c_msgmsgs[2];uint8_treg_buf[1]{reg};// 第一条消息写寄存器地址msgs[0].addrMPU6050_ADDR;msgs[0].flags0;// 0写msgs[0].len1;msgs[0].bufreg_buf;// 第二条消息读数据msgs[1].addrMPU6050_ADDR;msgs[1].flagsI2C_M_RD;// I2C_M_RD读msgs[1].len1;msgs[1].bufdata;// 执行组合传输structi2c_rdwr_ioctl_dataioctl_data{.msgsmsgs,.nmsgs2// 消息数量};if(ioctl(fd,I2C_RDWR,ioctl_data)0){perror(Failed to do combined I2C transfer);return-1;}return0;}intmain(){intfd;uint8_twho_am_i;// 1. 打开 I2C 设备fdi2c_open(I2C_DEV_PATH);if(fd0)returnEXIT_FAILURE;// 2. 设置从机地址MPU6050if(i2c_set_addr(fd,MPU6050_ADDR)0){close(fd);returnEXIT_FAILURE;}// 3. 方法 1分两次读写 WHO_AM_I 寄存器printf( 方法 1分两次读写 \n);if(i2c_read_reg(fd,WHO_AM_I_REG,who_am_i)0){close(fd);returnEXIT_FAILURE;}printf(WHO_AM_I (方法 1): 0x%02X\n,who_am_i);// 4. 方法 2组合读写 WHO_AM_I 寄存器推荐printf(\n 方法 2组合读写 \n);if(i2c_read_reg_combined(fd,WHO_AM_I_REG,who_am_i)0){close(fd);returnEXIT_FAILURE;}printf(WHO_AM_I (方法 2): 0x%02X\n,who_am_i);// 验证结果MPU6050 的 WHO_AM_I 应为 0x68if(who_am_i0x68){printf(\n✅ MPU6050 验证成功\n);}else{printf(\n❌ MPU6050 验证失败\n);}// 5. 关闭 I2C 设备close(fd);returnEXIT_SUCCESS;}三、代码关键步骤解析打开设备open(/dev/i2c-0, O_RDWR)以读写模式打开 I2C 总线设备文件。设置从机地址ioctl(fd, I2C_SLAVE, addr)告诉内核接下来要通信的从机地址。分两次读写先write寄存器地址告诉从机要访问的寄存器。再read数据从指定寄存器读取。缺点两次系统调用效率较低且可能被其他进程打断。组合读写推荐使用struct i2c_msg定义多个消息写地址读数据。通过ioctl(fd, I2C_RDWR, ...)一次完成所有消息传输原子性强效率高。四、编译与运行编译gcc i2c_test.c-oi2c_test运行需 root 权限因操作硬件设备sudo./i2c_test五、注意事项设备节点选择需根据实际硬件修改I2C_DEV_PATH可通过i2cdetect -l查看总线号。从机地址7 位地址直接使用如0x68不要左移i2c-dev会自动处理读写位。若不确定从机地址可用i2cdetect -y X扫描。硬件连接确保 SDA/SCL 正确连接且共地。必须接上拉电阻4.7kΩ ~ 10kΩ否则通信不稳定。权限问题若无法打开设备可尝试临时修改权限sudochmod666/dev/i2c-0RK3588的 I2C 驱动层实现一、RK3588 I2C 硬件基础RK3588 集成了9 个 I2C 控制器I2C0 ~ I2C8支持以下核心特性通信模式标准模式100 kHz、快速模式400 kHz、快速模式1 MHz。硬件 FIFO发送/接收各 32 字节降低 CPU 中断频率。DMA 支持大数据量传输时可启用 DMA进一步减少 CPU 占用。多从机支持通过 7 位/10 位地址寻址多个从设备。硬件纠错支持总线错误检测如仲裁丢失、ACK 缺失。二、Linux I2C 驱动整体架构Linux I2C 驱动分为三层与 SPI 框架类似但更细化I2C 主机控制器驱动i2c_adapter负责直接操作 RK3588 的 I2C 硬件寄存器处理时序、FIFO、DMA、中断等。对应源码drivers/i2c/busses/i2c-rockchip.c瑞芯微官方通用 I2C 驱动。I2C 设备驱动i2c_driver挂在主机控制器下的具体外设驱动如 EEPROM、传感器、OLED 屏等。通过i2c_msg与主机驱动交互不直接操作硬件。用户态接口i2c-dev将 I2C 总线抽象为/dev/i2c-X设备文件应用层通过ioctl通信对应上一篇应用层代码。三、RK3588 I2C 主机驱动深度分析i2c-rockchip.c我们以 Linux 5.10 内核源码为例分析核心实现。1. 关键数据结构// drivers/i2c/busses/i2c-rockchip.cstructrockchip_i2c{structi2c_adapteradap;// 指向 I2C 主机适配器对象void__iomem*regs;// I2C 寄存器基地址ioremap 后的虚拟地址structclk*clk;// I2C 外设时钟SCLK_I2Cxstructclk*pclk;// APB 总线时钟PCLK_I2Cxstructcompletioncomplete;// 用于同步等待传输完成conststructrockchip_i2c_data*data;// RK3588 芯片特定数据u32 fifo_len;// FIFO 深度RK3588 为 32u8*tx_buf;// 发送缓冲区指针u8*rx_buf;// 接收缓冲区指针inttx_len;// 剩余发送长度intrx_len;// 剩余接收长度intmsg_len;// 当前消息总长度bool use_dma;// 是否使用 DMA 传输// ... 其他成员如错误状态、DMA 描述符等};2. 驱动初始化与probe函数驱动通过platform_driver框架注册与设备树匹配后执行probestaticconststructof_device_idrockchip_i2c_of_match[]{{.compatiblerockchip,rk3588-i2c,.datark3588_i2c_data},// ... 其他芯片兼容项};MODULE_DEVICE_TABLE(of,rockchip_i2c_of_match);staticstructplatform_driverrockchip_i2c_driver{.proberockchip_i2c_probe,.removerockchip_i2c_remove,.driver{.namerockchip-i2c,.of_match_tablerockchip_i2c_of_match,},};module_platform_driver(rockchip_i2c_driver);rockchip_i2c_probe核心流程分配i2c_adapteradapdevm_i2c_alloc_adapter(pdev-dev,sizeof(structrockchip_i2c));i2ci2c_get_adapdata(adap);i2c-adapadap;获取硬件资源寄存器地址映射i2c-regsdevm_platform_ioremap_resource(pdev,0);时钟获取与使能i2c-clkdevm_clk_get(pdev-dev,i2c);i2c-pclkdevm_clk_get(pdev-dev,pclk);clk_prepare_enable(i2c-clk);clk_prepare_enable(i2c-pclk);中断申请retdevm_request_irq(pdev-dev,irq,rockchip_i2c_isr,0,dev_name(pdev-dev),i2c);初始化i2c_adapter接口adap-algorockchip_i2c_algo;// 核心算法结构体含 master_xferadap-dev.parentpdev-dev;adap-dev.of_nodepdev-dev.of_node;snprintf(adap-name,sizeof(adap-name),Rockchip I2C%d,pdev-id);其中rockchip_i2c_algo定义了核心传输函数staticconststructi2c_algorithmrockchip_i2c_algo{.master_xferrockchip_i2c_xfer,// 核心传输函数.functionalityrockchip_i2c_func,// 支持的功能如 I2C_FUNC_I2C};硬件初始化复位 I2C 控制器配置 FIFO 阈值清空 FIFO。从设备树读取clock-frequency如 400kHz并配置时钟分频器。注册i2c_adapterretdevm_i2c_add_adapter(pdev-dev,adap);3. 核心传输函数rockchip_i2c_xfer这是 I2C 主机驱动的“心脏”负责处理设备驱动提交的i2c_msg数组。流程概览staticintrockchip_i2c_xfer(structi2c_adapter*adap,structi2c_msg*msgs,intnum){structrockchip_i2c*i2ci2c_get_adapdata(adap);intret;// 1. 初始化同步完成量reinit_completion(i2c-complete);// 2. 遍历所有 i2c_msg一次传输可能包含多个消息for(inti0;inum;i){structi2c_msg*msgmsgs[i];// 配置从机地址、读写方向rockchip_i2c_set_addr(i2c,msg-addr,msg-flagsI2C_M_RD);// 选择传输方式DMA 或 PIOif(i2c-use_dmamsg-leni2c-fifo_len){retrockchip_i2c_dma_xfer(i2c,msg);// DMA 模式大数据量}else{retrockchip_i2c_pio_xfer(i2c,msg);// PIO 模式小数据量}// 等待传输完成通过中断唤醒wait_for_completion_timeout(i2c-complete,msecs_to_jiffies(1000));}returnnum;// 返回成功传输的消息数量}PIO 模式实现小数据量无 DMAstaticintrockchip_i2c_pio_xfer(structrockchip_i2c*i2c,structi2c_msg*msg){i2c-tx_bufmsg-buf;i2c-rx_bufmsg-buf;i2c-tx_len(msg-flagsI2C_M_RD)?0:msg-len;i2c-rx_len(msg-flagsI2C_M_RD)?msg-len:0;i2c-msg_lenmsg-len;// 使能中断TX FIFO 空、RX FIFO 满、传输完成、错误rockchip_i2c_enable_irq(i2c,ROCKCHIP_I2C_INT_TX|ROCKCHIP_I2C_INT_RX|ROCKCHIP_I2C_INT_DONE|ROCKCHIP_I2C_INT_ERR);// 启动传输写起始信号 从机地址rockchip_i2c_start_xfer(i2c);return0;}4. 中断处理函数rockchip_i2c_isr当 FIFO 可写/可读、传输完成或发生错误时触发中断staticirqreturn_trockchip_i2c_isr(intirq,void*dev_id){structrockchip_i2c*i2cdev_id;u32 statusreadl_relaxed(i2c-regsROCKCHIP_I2C_INTR_STAT);// 1. 处理错误中断仲裁丢失、ACK 缺失等if(statusROCKCHIP_I2C_INT_ERR){rockchip_i2c_handle_error(i2c,status);gotoout;}// 2. 处理发送 FIFO 空中断填充数据到 TX FIFOif(statusROCKCHIP_I2C_INT_TX){rockchip_i2c_fill_tx_fifo(i2c);}// 3. 处理接收 FIFO 满中断从 RX FIFO 读取数据if(statusROCKCHIP_I2C_INT_RX){rockchip_i2c_read_rx_fifo(i2c);}// 4. 处理传输完成中断if(statusROCKCHIP_I2C_INT_DONE){complete(i2c-complete);// 唤醒等待队列}out:writel_relaxed(status,i2c-regsROCKCHIP_I2C_INTR_STAT);// 清除中断标志returnIRQ_HANDLED;}四、RK3588 I2C 设备树配置DTSRK3588 的 I2C 节点定义在arch/arm64/boot/dts/rockchip/rk3588.dtsi中用户需在板级 DTS如rk3588-evb.dts中启用并配置具体参数。1. 控制器节点示例rk3588.dtsi片段i2c0: i2cfeb00000 { compatible rockchip,rk3588-i2c, rockchip,rk3399-i2c; reg 0x0 0xfeb00000 0x0 0x1000; // 寄存器物理地址 interrupts GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH; // 中断号 clocks cru SCLK_I2C0, cru PCLK_I2C0; // 时钟源 clock-names i2c, pclk; pinctrl-names default; pinctrl-0 i2c0m0_xfer; // 引脚复用配置 #address-cells 1; #size-cells 0; status disabled; // 默认禁用板级 DTS 中启用 };2. 板级 DTS 配置启用 I2C0 并挂载 EEPROMi2c0 { status okay; // 启用 I2C0 clock-frequency 400000; // 配置时钟为 400kHz快速模式 // I2C EEPROM 子节点AT24C02从机地址 0x50 eeprom50 { compatible atmel,24c02; reg 0x50; // 从机地址7 位 status okay; }; };3. 引脚复用配置pinctrlRK3588 的 I2C 引脚需配置为 I2C 功能在rk3588-pinctrl.dtsi中定义i2c0m0_xfer: i2c0m0-xfer { m0 { rockchip,pins 1 RK_PA0 1 pcfg_pull_none, // I2C0_SDA 1 RK_PA1 1 pcfg_pull_none; // I2C0_SCL }; };注意I2C 引脚需外部接上拉电阻4.7kΩ ~ 10kΩpcfg_pull_none表示不使用内部上拉避免与外部上拉冲突。五、关键调试与验证方法1. 检查 I2C 总线与设备# 列出所有 I2C 总线i2cdetect-l# 扫描 I2C0 上的从设备需 root 权限sudoi2cdetect-y0# 读取 EEPROM从机地址 0x50的所有寄存器sudoi2cdump-y00x50# 向 EEPROM 的 0x00 寄存器写入 0xAAsudoi2cset-y00x50 0x00 0xAA2. 查看内核日志# 查看 I2C 驱动相关日志dmesg|grepi2c3. 硬件验证逻辑分析仪/示波器抓取 SDA/SCL 波形验证起始/停止信号是否正确。从机地址、读写位、ACK 位是否正常。时钟频率是否符合配置如 400kHz。上拉电阻检查确保 SDA/SCL 空闲时为高电平3.3V 或 1.8V取决于 RK3588 的 IO 域。六、总结RK3588 的 I2C 驱动层核心在于主机驱动i2c-rockchip.c通过platform_driver匹配设备树初始化硬件实现master_xfer接口支持 PIO/DMA 双模式。设备树配置控制器寄存器、时钟、引脚复用以及挂载的具体 I2C 设备。中断与同步通过中断处理 FIFO 数据使用completion同步传输流程。

相关文章:

I2C基础复习

一、I2C 基础详解 I2C(Inter-Integrated Circuit,集成电路总线)是一种半双工、同步、多主多从的串行通信协议,由 Philips(现 NXP)于 1982 年发明,广泛用于 MCU 与低速外设(如传感器、…...

春晚具身机器人惊艳亮相,具身智能行业即将迎来黄金时代?高薪岗位火热招聘,这份求职指南你值得拥有!

今年春晚,具身又迎来了高光时刻。不少朋友看完后找我调侃,这几家上春晚的公司估值又要拉升了。其中,宇树的武术表演实在惊叹,双截棍、后空翻,把全球机器人运控能力拉升了一个档次,unitree可以说是断层领先。…...

SpringBoot 仓储信息管理系统设计:基于效率提升的毕业设计实战

在准备毕业设计时,很多同学会选择开发一个仓储信息管理系统。这个选题很经典,因为它能综合运用数据库、Web开发、业务逻辑等多种知识。但我也发现,很多同学做出来的系统,功能虽然齐全,却常常忽略了“效率”这个关键点。…...

Qwen3-Coder-Next-Base:800亿参数编码AI重磅登场

Qwen3-Coder-Next-Base:800亿参数编码AI重磅登场 【免费下载链接】Qwen3-Coder-Next-Base 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-Coder-Next-Base 导语:Qwen3-Coder-Next-Base正式发布,这款拥有800亿总参数的开源…...

RAG技术新篇章:Modular RAG模块化架构如何引爆效率与效果?

本文深入解析了RAG技术的演进历程,从最初的Naive RAG到Advanced RAG,再到如今的Modular RAG,阐述了三者间的继承与发展关系。Modular RAG通过模块化设计和智能编排,实现了更高的灵活性和可扩展性。其核心在于Orchestration编排模块…...

ChatTTS 语音合成中如何高效添加语气词:原理与实战指南

最近在做一个语音播报项目,用到了ChatTTS,发现生成的语音虽然清晰,但总感觉少了点“人味儿”。特别是那些“嗯”、“啊”、“哦”之类的语气词,插进去之后特别生硬,像机器人在念稿,用户体验大打折扣。这让我…...

达摩院智能客服人工智能训练师实战:从模型训练到生产部署的全链路优化

在智能客服系统的开发过程中,我们常常面临一个核心矛盾:业务方希望模型能快速迭代、精准理解用户意图,而技术团队则受困于漫长的训练周期、复杂的多轮对话逻辑以及繁琐的生产部署流程。传统的自建训练环境,从数据清洗、特征工程到…...

Chatbot、Composer与Agent架构深度解析:如何选择最优对话系统方案

Chatbot、Composer与Agent架构深度解析:如何选择最优对话系统方案 想象一下,你正在为一个电商平台设计智能客服。老板要求:既要能秒回“我的订单到哪了”这种简单问题,又要能处理“帮我推荐几款适合周末露营的装备,预…...

Web毕业设计效率提升指南:从脚手架选型到自动化部署的全流程优化

最近在帮学弟学妹们看毕业设计,发现大家普遍在项目初期浪费了大量时间。不是卡在环境配置,就是困在重复的脚手架搭建里,真正花在业务逻辑上的时间反而很少。今天就来聊聊,如何通过一套标准化的流程和工具,把 Web 毕业设…...

从零构建 eNSP 小型校园网络毕业设计:架构解析与避坑指南

最近在帮学弟学妹们看网络相关的毕业设计,发现很多同学在用华为 eNSP 搭建小型校园网络时,思路容易混乱。要么是拓扑图画得一团麻,分不清层次;要么是配置完 VLAN 后,不同网段的电脑死活 ping 不通;还有的干…...

OpenClaw+nanobot自动化写作:Qwen3-4B模型内容生成实测

OpenClawnanobot自动化写作:Qwen3-4B模型内容生成实测 1. 为什么需要自动化写作助手 作为一个技术博客作者,我经常面临一个困境:有太多想写的内容,但时间总是不够用。从选题、资料收集到初稿撰写、排版校对,每个环节…...

一键部署生产力:星图平台OpenClaw+Qwen3.5-9B体验

一键部署生产力:星图平台OpenClawQwen3.5-9B体验 1. 为什么选择云端沙盒方案 上周我在本地尝试部署OpenClaw时,经历了Python版本冲突、CUDA驱动不兼容等一系列典型环境问题。当看到星图平台提供预装OpenClawQwen3.5-9B的完整镜像时,第一反应…...

嵌入式C语言面试核心问题与实战技巧

嵌入式C语言面试核心问题深度解析1. 预处理指令与宏定义1.1 常量定义与类型安全#define SEC_YEAR (365*24*60*60)UL这个宏定义展示了三个关键点:使用括号确保运算顺序正确使用UL后缀防止16位系统溢出让预处理器计算表达式而非硬编码结果1.2 参数化宏设计#define MIN…...

数据密集型文件的高效压缩技术:从原理到企业级解决方案

数据密集型文件的高效压缩技术:从原理到企业级解决方案 【免费下载链接】romm A beautiful, powerful, self-hosted rom manager 项目地址: https://gitcode.com/GitHub_Trending/rom/romm 一、问题溯源:为什么传统存储方案会失效? 在…...

CAN总线故障诊断与维修全指南

经典CAN总线现场故障分析与诊断指南1. CAN总线故障概述1.1 常见故障现象当CAN总线系统出现传输异常时,通常会表现为多种复合故障现象,包括但不限于:仪表板显示异常车辆启动/熄火功能失效动力系统性能下降特定电控模块功能丧失这些现象的根本原…...

零基础玩转OpenClaw:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF镜像快速入门

零基础玩转OpenClaw:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF镜像快速入门 1. 为什么选择云端镜像快速体验OpenClaw 第一次听说OpenClaw时,我就被它的自动化能力吸引了——能让AI像人类一样操作我的电脑完成各种任务。但当我看到本地安装…...

2025年卡膜优质企业TOP榜|亲测分享实践案例

引言随着包装材料市场对功能性、环保性及定制化需求的不断提升,卡膜作为高透明、高韧性的包装材料,广泛应用于文件收纳、相册制作、资料分类、礼品包装等领域。2025年,各大卡膜生产企业在生产工艺、原材料把控、定制服务能力及交付效率等方面…...

遗传算法优化PID控制:MATLAB 2021b下的 m 文件与Simulink联合仿真之旅

遗传算法优化 PID 控制,采用 m 文件联合 Simulink进行仿真,MATLAB2021b,在控制系统领域,PID控制凭借其结构简单、鲁棒性好等优点,一直占据着重要地位。然而,传统PID控制器参数的整定往往依赖经验&#xff0…...

嵌入式开发调试技巧与宏应用详解

嵌入式软件开发调试技巧全解析 1. 调试基础宏的使用 1.1 编译器内置调试宏 在嵌入式开发中,GCC编译器提供了一系列内置宏用于调试,这些宏会在编译时自动展开: __FILE__ // 当前源文件名 (char*) __FUNCTION__ // 当前函数名 (char*) _…...

Python 3.14 JIT编译器深度调优实战(官方未公开的profile-driven优化链)

第一章:Python 3.14 JIT编译器演进与调优全景概览Python 3.14 引入了实验性但高度可配置的内置 JIT 编译器(代号“Torchlight”),标志着 CPython 首次在标准发行版中集成生产就绪的即时编译能力。该 JIT 并非替代解释器&#xff0…...

OpenClaw低配适配:nanobot在4GB内存设备运行技巧

OpenClaw低配适配:nanobot在4GB内存设备运行技巧 1. 为什么要在低配设备上运行OpenClaw? 去年夏天,我在整理一台2015年的老笔记本时突发奇想:这台只有4GB内存的"古董"能否跑得动OpenClaw?当时市面上大多数…...

聊聊 COMSOL 激光热应力模型那些事儿

Comsol激光热应力模型以及步骤讲解视频(8分钟) 我是高价买来的 卖出去回回血 只卖模型不 COMSOL激光热应力模型,采用固体力学、固体传热研究激光焊接下材料的应力及温度变化情况,研究指定点的温度、应力随时间的变化情况。最近我入手了一个超棒的 COMSO…...

百川2-13B模型中文OCR增强:OpenClaw图片信息提取优化

百川2-13B模型中文OCR增强:OpenClaw图片信息提取优化 1. 为什么需要OCR增强的智能体 上个月在处理一份电子合同时,我遇到了一个典型问题:合同是扫描件图片格式,我需要从中提取关键条款、金额和日期等信息。手动录入不仅耗时&…...

嵌入式软件开发相关的硬件知识及技能

对于嵌入式软件开发工程师来说,硬件知识并非要求达到硬件工程师那样的设计深度,而是更侧重于理解、交互与协同。掌握必要的硬件知识,能让你写出更稳定、更高效的代码,并在软硬件联调时快速定位问题。以下从几个核心层面详述所需掌…...

5步掌握Blender置换贴图:从基础到高级的完整指南

5步掌握Blender置换贴图:从基础到高级的完整指南 【免费下载链接】awesome-blender 🪐 A curated list of awesome Blender addons, tools, tutorials; and 3D resources for everyone. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-ble…...

Python内存占用直降63%!20年CTO首次公开智能体内存策略的3级缓存配置模板

第一章:Python智能体内存管理策略配置步骤详解 Python智能体(如基于LangChain、LlamaIndex构建的Agent)在长时间运行或高并发场景下易遭遇内存泄漏、对象堆积与GC延迟问题。合理配置内存管理策略,是保障其稳定性和响应效率的关键环…...

【MySQL】7.MySQL基本查询(2)

文章目录6. 表的增删改查6.2 Retrieve(读取/筛选)6.2.2 WHERE 条件6.2.2.1 英语不及格的同学及英语成绩 ( < 60 )6.2.2.2 语文成绩在 [80, 90] 分的同学及语文成绩6.2.2.3 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩6.2.2.4 姓孙的同学 及 孙某同学6.2.2.5 …...

告别格式烦恼!3个让视频播放丝滑的小妙招

周末窝在沙发上追剧&#xff0c;结果播放器突然弹出"格式不支持"的提示&#xff1b;精心拍摄的旅行vlog想分享给朋友&#xff0c;却发现文件太大传不过去——这些视频格式的小麻烦&#xff0c;是不是让你头疼过&#xff1f;其实掌握几个实用技巧&#xff0c;就能让视…...

OpenClaw定时任务配置:GLM-4.7-Flash实现凌晨自动备份与报告

OpenClaw定时任务配置&#xff1a;GLM-4.7-Flash实现凌晨自动备份与报告 1. 为什么需要夜间自动化 作为独立开发者&#xff0c;我经常面临一个矛盾&#xff1a;白天需要专注写代码&#xff0c;但服务器日志分析、数据库备份、日报生成这些琐事又不得不做。直到发现OpenClaw的…...

低延迟鸿蒙设备管控革新:HOScrcpy跨域投屏技术全解析

低延迟鸿蒙设备管控革新&#xff1a;HOScrcpy跨域投屏技术全解析 【免费下载链接】鸿蒙远程真机工具 该工具主要提供鸿蒙系统下基于视频流的投屏功能&#xff0c;帧率基本持平真机帧率&#xff0c;达到远程真机的效果。 项目地址: https://gitcode.com/OpenHarmonyToolkitsPl…...