嵌入式系统中Flash操作全面解析与最佳实践
嵌入式系统中Flash操作全面解析与最佳实践
一、Flash存储器基础与分类
Flash存储器是嵌入式系统中最重要的非易失性存储介质,根据内部架构和工作原理主要分为两大类:
1.1 NOR Flash与NAND Flash对比
特性 | NOR Flash | NAND Flash |
---|---|---|
架构 | 随机存取架构 | 串行存取架构 |
读取方式 | 支持字节/字随机读取 | 按页(512B-4KB)读取 |
写入速度 | 较慢(约5-50μs/字) | 较快(约200-400μs/页) |
擦除速度 | 较慢(约0.5-2s/块) | 较快(约1-2ms/块) |
容量 | 通常KB到数百MB | 通常GB到TB级 |
成本 | 较高 | 较低 |
XIP支持 | 支持代码直接执行 | 不支持 |
典型应用 | Bootloader、固件存储 | 文件系统、大容量数据存储 |
NOR Flash适合存储需要快速随机访问的小容量代码,而NAND Flash更适合大容量数据存储。
1.2 嵌入式系统中常见的Flash类型
- 内部Flash:集成在MCU内部,如STM32的Embedded Flash
- 外部NOR Flash:如Winbond W25Q系列、Micron M25P系列
- 外部NAND Flash:如Kioxia TC58系列、Samsung K9系列
- eMMC/UFS:基于NAND的高性能嵌入式存储方案
二、Flash操作核心原理
2.1 基本操作机制
Flash存储器的操作基于浮栅晶体管技术,通过F-N隧道效应或热电子注入实现电荷存储:
- 擦除(Erase):将存储单元电荷释放(写1),以块为单位
- 写入(Program):向浮栅注入电荷(写0),以页/字为单位
- 读取(Read):检测单元电荷状态,非破坏性操作
2.2 关键特性与限制
- 写入前必须擦除:Flash不能直接覆盖写入,必须先擦除成全1状态
- 有限的擦写次数:通常NOR 10万次,NAND 1-10万次
- 操作单位不对称:
- 擦除:块(Block)为单位,大小通常64KB-256KB
- 写入:页(Page)或字(Word)为单位
- 位反转问题:NAND Flash容易出现位错误,需ECC校验
三、Flash操作对齐要求详解
3.1 64K对齐的必要性
在嵌入式系统中,特别是STM32等MCU的内部Flash操作中,64K对齐要求主要基于:
- 硬件擦除单位:Flash擦除以扇区(Sector)为单位,大容量MCU通常为64KB/128KB
- 写入保护机制:避免跨扇区写入导致数据损坏
- 总线架构限制:32位/64位总线最佳性能对齐要求
3.2 不同MCU系列的对齐要求
MCU系列 | 最小写入单位 | 擦除单位 | 对齐要求 |
---|---|---|---|
STM32F1 | 16位(半字) | 1KB/2KB | 2字节对齐 |
STM32F4 | 32位(字) | 16KB/64KB/128KB | 4字节对齐 |
STM32H7 | 64位(双字) | 128KB/256KB | 8字节对齐 |
NXP Kinetis | 32位 | 4KB/64KB | 4字节对齐 |
3.3 对齐实现方法
3.3.1 编译器属性强制对齐
// GCC/Clang编译器
__attribute__((aligned(64))) uint8_t flash_buffer[65536];// IAR编译器
#pragma data_alignment=64
uint8_t flash_buffer[65536];
3.3.2 结构体封装与填充
typedef struct {uint32_t magic; // 4字节魔术字uint8_t data[65528]; // 数据区uint32_t checksum; // 4字节校验和
} __attribute__((aligned(64))) FlashSection;
3.3.3 动态地址对齐检查
uint32_t align_to_64k(uint32_t addr) {return (addr + 0xFFFF) & ~(0xFFFF);
}void write_to_flash(uint32_t addr, void* data, uint32_t size) {if((addr & 0xFFFF) != 0 || (size % 65536) != 0) {// 错误处理return;}// 实际写入操作
}
四、Flash操作实战指南
4.1 STM32内部Flash编程步骤
-
解锁Flash:解除写保护
HAL_FLASH_Unlock();
-
擦除目标扇区:
FLASH_EraseInitTypeDef erase; erase.TypeErase = FLASH_TYPEERASE_SECTORS; erase.Sector = FLASH_SECTOR_5; // 选择扇区 erase.NbSectors = 1; // 擦除数 erase.VoltageRange = FLASH_VOLTAGE_RANGE_3; // 电压范围uint32_t sector_error; HAL_FLASHEx_Erase(&erase, §or_error);
-
数据写入:
uint32_t address = 0x08080000; // Flash起始地址 uint32_t data = 0x12345678; HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, data);
-
重新上锁:
HAL_FLASH_Lock();
4.2 外部SPI Flash操作示例
以W25Q128为例的读写流程:
-
初始化SPI接口
-
发送写使能:
0x06
-
扇区擦除(4KB):
uint8_t cmd[4] = {0x20, (addr>>16)&0xFF, (addr>>8)&0xFF, addr&0xFF}; HAL_SPI_Transmit(&hspi1, cmd, 4, HAL_MAX_DELAY);
-
页编程(256B):
uint8_t cmd[4] = {0x02, (addr>>16)&0xFF, (addr>>8)&0xFF, addr&0xFF}; HAL_SPI_Transmit(&hspi1, cmd, 4, HAL_MAX_DELAY); HAL_SPI_Transmit(&hspi1, data, 256, HAL_MAX_DELAY);
-
读取数据:
uint8_t cmd[4] = {0x03, (addr>>16)&0xFF, (addr>>8)&0xFF, addr&0xFF}; HAL_SPI_Transmit(&hspi1, cmd, 4, HAL_MAX_DELAY); HAL_SPI_Receive(&hspi1, buffer, length, HAL_MAX_DELAY);
五、关键注意事项与优化策略
5.1 Flash操作黄金法则
- 擦写前备份:操作前备份目标区域数据
- 中断处理:关键操作期间禁用中断
- 电源稳定:确保操作期间供电稳定
- 时序遵守:严格遵循器件手册的时序要求
- 状态检查:每次操作后检查状态寄存器
5.2 寿命优化策略
-
磨损均衡:动态分配写入位置,平均分布擦写次数
uint32_t get_next_write_addr() {static uint32_t index = 0;uint32_t addr = BASE_ADDR + (index * SECTOR_SIZE);index = (index + 1) % TOTAL_SECTORS;return addr; }
-
坏块管理:维护坏块表,跳过损坏区域
-
数据压缩:减少实际写入数据量
-
批量写入:合并多次小写入为单次大写入
5.3 错误处理与恢复
-
ECC校验:为NAND Flash实现纠错码
uint16_t calculate_ecc(uint8_t *data, uint32_t length) {// 实现Hamming码或BCH码计算 }
-
CRC校验:写入数据时添加校验信息
typedef struct {uint32_t magic;uint8_t data[252];uint32_t crc; } FlashEntry;
-
双备份机制:关键数据存储两份,互为备份
六、高级应用场景
6.1 固件OTA升级实现
- 双Bank设计:利用MCU的双Bank Flash特性
- 引导加载程序:实现安全可靠的升级流程
- 完整性验证:数字签名+CRC校验
- 回滚机制:保留旧版本直至新版本验证通过
6.2 嵌入式文件系统实现
- LittleFS:专为嵌入式优化的抗掉电文件系统
- SPIFFS:轻量级SPI Flash文件系统
- Wear Leveling:集成磨损均衡算法
- Power-loss Resilient:掉电安全设计
6.3 安全存储方案
- 加密存储:AES加密敏感数据
- 写保护:配置Flash保护区域
- 安全启动:结合TrustZone实现安全启动链
七、调试与排错指南
7.1 常见问题排查
-
写入失败:
- 检查Flash是否解锁
- 验证目标地址是否可写
- 确认供电电压符合要求
-
数据损坏:
- 检查擦除操作是否成功
- 验证写入时序是否符合规格
- 检测是否有意外复位发生
-
性能低下:
- 优化擦除策略,减少擦除次数
- 实现写入缓冲机制
- 考虑使用DMA加速数据传输
7.2 调试工具推荐
- J-Link Commander:直接读写Flash内容
- STM32 ST-LINK Utility:可视化Flash操作
- 逻辑分析仪:抓取SPI/I2C时序
- Flash芯片编程器:离线编程验证
结语
Flash存储器的正确操作是嵌入式系统稳定可靠运行的基础。通过深入理解Flash的工作原理、严格遵循对齐要求、实施优化策略和健全的错误处理机制,开发者可以构建出高性能、长寿命的嵌入式存储解决方案。在实际项目中,建议结合具体芯片手册和实际需求,制定最适合的Flash操作规范。
相关文章:
嵌入式系统中Flash操作全面解析与最佳实践
嵌入式系统中Flash操作全面解析与最佳实践 一、Flash存储器基础与分类 Flash存储器是嵌入式系统中最重要的非易失性存储介质,根据内部架构和工作原理主要分为两大类: 1.1 NOR Flash与NAND Flash对比 特性NOR FlashNAND Flash架构随机存取架构串行存取…...
tomcat 的安装与启动
文章目录 tomcat 服务器安装启动本地Tomcat服务器 tomcat 服务器安装 https://tomcat.apache.org/下载 Tomcat 10.0.X 启动本地Tomcat服务器 进入 Tomcat 的 bin...
Flash存储器(二):SPI NAND Flash与SPI NOR Flash
目录 一.存储架构 二.接口与封装 三.特性对比 四.典型应用场景 4.1 SPI NOR Flash 4.2 SPI NAND Flash 五.技术演进与市场趋势 六.选择建议 6.1 选择SPI NOR的场景 6.2 选择SPI NAND的场景 SPI NAND Flash和SPI NOR Flash是嵌入式设备中常用的存储器。下面通过全面对…...
第 7 期:DDPM 采样提速方案:从 DDPM 到 DDIM
本期关键词:采样加速、DDIM 推导、可控性提升、伪逆过程、代码实战 前情回顾:DDPM 的采样瓶颈 在前几期中,我们构建了一个完整的 DDPM 生成流程。但是你可能已经发现: 生成一张图像太慢了!!! 原因是: DDPM 要在 T 个时间步中一步步地去噪,从 x_T → x_0。而通常 T 至…...
axios 模拟实现
axios 模拟实现 包含[发送请求,拦截器,取消请求] 第一步 , axios模拟发送请求 //使用 xhr 发送请求function xhr_adpter(config){return new Promise(function handle(resolve,reject){let xhr new XMLHttpRequest();xhr.open(config.method, config.url,true);xhr.onreadys…...
架构师面试(三十一):IM 消息收发逻辑
问题 今天聊一下 IM 系统最核心的业务逻辑。 在上一篇短文《架构师面试(三十):IM 分层架构》中详细分析过,IM 水平分层架构包括:【入口网关层】、【业务逻辑层】、【路由层】和【数据访问层】;除此之外&a…...
hadoop三大组件的结构及各自的作用
1 HDFS 1.1功能 HDFS 是 Hadoop 的分布式文件系统,用于存储和管理海量数据。它具有高容错性、高吞吐量和可扩展性,能够在多个节点上存储和管理大规模数据 1.2架构:采用主从架构,由一个 NameNode 和多个 DataNode 组成。NameNode…...
GEE学习笔记 29:基于GEE的多源Landsat合成与植被指数时序提取
基于GEE的多源Landsat合成与植被指数时序提取 🌿 1.写在前面 | 基于GEE的Landsat多尺度植被指数提取脚本📌 2.常用植被指数计算公式2.1. 🌿 NDVI(归一化植被指数)Normalized Difference Vegetation Index2.2. 🌱 EVI(增强型植被指数)Enhanced Vegetation Index2.3.…...
负载均衡的策略
目的:将请求均衡分发到后台的服务器 算法: 随机算法:随机数获取服务器加权随机算法:根据权重,增加某些服务器(性能比较好等)选择的随机比例轮询算法:轮流分发给服务器加权轮询算法…...
AWS Elastic Beanstalk的部署Python Flask后端服务(Hello,World)
问题 最近需要使用AWS Elastic Beanstalk来部署Python的Flask后端web接口。这里先做一个最简单的Flask Hello,World接口服务程序。 Flask工程与代码 创建本地虚拟环境 conda create -n flask python3.13 # 激活 conda activate flaskapp.py from flask import …...
Hadoop的三大结构及各自的作用?
1.HDFS 作用: 存储海量数据,支持高容错(数据自动备份)和高吞吐量(适合大文件读写)。 采用主从架构: NameNode:管理文件系统的元数据(如文件目录结构)。 Dat…...
在Ubuntu系统中安装和升级RabbitVCS
在Ubuntu系统中安装和升级RabbitVCS 目前在ubuntu中使用svn的GUI工具,已经安装了。想升级一下。 当前遇到的问题是,我想用它看看我当前的代码对应的版本号,然后再决定是否update。但是,好像我看不出来。根本不如在windows使用To…...
深入理解红黑树:原理、实现与应用
深入理解红黑树:原理、实现与应用 引言 红黑树(Red-Black Tree)是计算机科学中一种重要的自平衡二叉查找树。它通过简单的规则和高效的调整策略,保证了插入、删除、查找等操作的时间复杂度均为 O(log n)。红黑树广泛应用于实际开…...
Java学习手册:Java并发编程最佳实践
在Java并发编程中,遵循最佳实践可以显著提高程序的性能、可靠性和可维护性。本文将总结Java并发编程中的关键最佳实践,帮助开发者避免常见陷阱并编写高效的并发程序。 1. 选择合适的并发工具 Java提供了丰富的并发工具,选择合适的工具可以简…...
接口自动化测试(二)
一、接口测试流程:接口文档、用例编写 拿到接口文档——编写接口用例以及评审——进行接口测试——工具/自动化框架进行自动化用例覆盖(70%)——输出测试报告 自动化的目的一般是为了回归 第一件事情:理解需求,学会看接口文档 只需要找到我…...
C++类和对象上
1. 面向对象编程与面向过程编程的比较 我们一开始接触的C语言就是一门面向过程编程的语言,而C就是一门面向对象编程的语言。那么这两者有什么区别呢? 举个例子,就比如说点外卖,如果是C语言的话,那么在程序的编写过程…...
hadoop的三大结构及各自的作用
Hadoop 分布式文件系统(HDFS) 存储大量数据:HDFS 被设计用于在商品硬件上存储海量数据,它将大文件分割成多个数据块,并分布存储在集群中的不同节点上,支持数据的可靠存储和高效访问。提供数据冗余和容错机制…...
珈和科技遥感赋能农业保险创新 入选省级卫星应用示范标杆
为促进空天信息与数字经济深度融合,拓展卫星数据应用场景价值,提升卫星数据应用效能和用户体验,加速卫星遥感技术向民生领域转化应用,近日,湖北省国防科工办组织开展了2024年湖北省卫星应用示范项目遴选工作。 经多渠…...
香港服务器CPU对比:Intel E3与E5系列核心区别与使用场景
香港服务器的 CPU 配置(核心数与主频)直接决定了其并发处理能力和数据运算效率,例如高频多核处理器可显著提升多线程任务响应速度。在实际业务场景中,不同负载需求对 CPU 架构的要求存在显著差异——以 Intel E3 和 E5 系列为例,由于两者在性…...
【人工智能】DeepSeek 与 RAG 技术:构建知识增强型问答系统的实战
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 本文深入探讨了如何利用 DeepSeek R1 模型结合检索增强生成(RAG)技术,构建一个高效的知识增强型问答系统。RAG 技术通过结合信息检索与生…...
得佳胜哲讯科技 SAP项目启动会:胶带智造新起点 数字转型新征程
在全球制造业加速向数字化、智能化转型的浪潮中,胶带制造行业正迎来以“自动化生产、数据化运营、智能化决策”为核心的新变革。工业互联网、大数据分析与智能装备的深度融合,正推动胶带制造从传统生产模式向“柔性化生产精准质量控制全链路追溯”的智慧…...
超导体的应用价值:超导磁探测技术开启科技与生活的新变革
科技的飞速发展,带来了一种新型材料的快速应用,那就是超导体材料。超导体的特性,能够为当今社会众多领域带来革命性的变革,也将极大的改变我们现在的生活质量。 超导体的特性 超导体是指在特定温度下的电阻会突然消失,…...
UNION和UNION ALL的主要区别
UNION和UNION ALL的主要区别在于处理重复数据和排序的方式。 UNION和UNION ALL都是SQL语言中用于合并两个或多个SELECT语句结果集的关键字。它们的主要区别如下: 1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,而UNION ALL不会…...
软件项目验收报告模板
软件项目验收报告 一、项目基本信息 项目名称XX智能仓储管理系统开发单位XX科技有限公司验收单位XX物流集团合同签订日期2023年3月15日项目启动日期2023年4月1日验收日期2024年1月20日 二、验收范围 入库管理模块(包含RFID识别、库存预警)出库调度模…...
第五章 SQLite数据库:5、SQLite 进阶用法:JOIN、UNION、TRIGGER、INDEX、ALIAS、INDEXED BY 等模块
一、JOIN:跨表查询的核心机制 1. JOIN 类型总览 JOIN 是连接多个表获取综合信息的关键手段。常见 JOIN 类型如下: INNER JOIN(内连接):仅返回两个表中满足连接条件的行。LEFT OUTER JOIN(左连接…...
中间件--ClickHouse-10--海量数据存储如何抉择ClickHouse和ES?
在Mysql数据存储或性能瓶颈时,采用冷热数据分离的方式通常是一种选择。ClickHouse和Elasticsearch(ES)是两个常用的组件,但具体使用哪种组件取决于冷数据的存储目的、查询模式和业务需求等方面。 1、核心对比 (1&…...
JESD204B标准及其在高速AD采集系统中的应用详解
一、JESD204B协议的本质与核心价值 JESD204B是由JEDEC制定的第三代高速串行接口标准(2011年发布),专为解决高速ADC/DAC与FPGA/ASIC间数据传输瓶颈而设计。其核心突破体现在: 速率革命性提升 支持每通道最高12.5Gbps(通…...
给予FLUX更好的控制:FLUX.1-dev-ControlNet-Union-Pro-2.0
Shakker Labs FLUX.1-dev-ControlNet-Union-Pro-2.0 一、模型概述 Shakker Labs发布的FLUX.1-dev-ControlNet-Union-Pro-2.0是一个统一的ControlNet模型,专为FLUX.1-dev模型设计。该模型在前一版本基础上进行了多项改进,包括移除模式嵌入以减小模型尺寸…...
Hadoop的三大结构及其作用?
Hadoop是一个分布式存储和计算框架,其三大核心组件是HDFS(Hadoop Distributed File System)、YARN(Yet Another Resource Negotiator)和MapReduce。它们各自有着重要的作用,共同构成了Hadoop生态系统的基础…...
langgraph框架之初识
1.什么是langgraph? LangGraph 是一个用于构建可控代理的底层编排框架。在AI中,代理也就是执行动作的智能体,也就是agent。使用这个框架可以构建一个可以自由控制的智能执行体,它可以帮我们做许多事情,如下࿱…...
3个实用的脚本
1. Linux 系统清理临时文件脚本 该脚本用于清理系统中 /tmp 目录下超过 7 天的临时文件。 #!/bin/bash# 清理 /tmp 目录下超过 7 天的文件 find /tmp -type f -atime 7 -exec rm -f {} \;# 清理 /var/tmp 目录下超过 7 天的文件 find /var/tmp -type f -atime 7 -exec rm -f {…...
Vue3 Composition API与十大组件开发案例详解
文章目录 一、Vue3核心API解析1.1 Composition API优势1.2 核心API 二、十大组件开发案例案例1:响应式表单组件案例2:动态模态框(Teleport应用)案例3:可复用列表组件案例4:全局状态通知组件案例5࿱…...
万用表判断MOS好坏
无论什么封装,D极一般在正面看的上面,或者焊盘面积最大的一面: 【零】烧个洞的那种,不用量了,一眼损坏 【一】万用表的二极管档位测量 检修:使用万用表的二极管档位,S极接红表笔,黑…...
算法驱动光场革命:SLM技术引领智能光学新时代
◀背景引入▶ 空间光调制器本质上是一种能够对光波的振幅、相位或偏振状态进行空间分布调制的动态光学器件,我司自主研发的SLM产品采用硅基液晶技术,通过电信号控制液晶分子的排列状态,实现对入射光波的精确调控。这种精确调控能力使得SLM成…...
webgl入门实例-11WebGL 视图矩阵 (View Matrix)基本概念
WebGL 视图矩阵 (View Matrix) 在WebGL中,视图矩阵(View Matrix)定义了观察者(相机)在世界空间中的位置和方向,它实现了从世界坐标系到相机坐标系的转换。 什么是视图矩阵? 视图矩阵是一个4x4的矩阵,用于: 将场景从…...
ESP32 搭建IDF+Vscode环境(详细教程)
1. IDF环境安装 1.1 ESP-IDF介绍 ESP-IDF (Espressif IoT Development Framework) 是 Espressif( 乐鑫) 公司提供的面向ESP32 系列 的官方开源开发框架,用于开发物联网应用。ESP-IDF 的特点是高度的集成性和可移植性,提供了完整的 SDK,…...
精准计量+AI管控——安科瑞助力高校水电管理数字化转型
安科瑞顾强 传统管理痛点:效率低、隐患多、成本高 高校后勤水电管理长期面临多重挑战:人工抄表需宿管逐层逐户记录,耗时耗力且易出现漏抄、错抄,导致费用核算不公;老旧机械式电表误差率高达5%-10%,计量纠…...
PHP腾讯云人脸核身获取SIGN Ticket
参考腾讯云官方文档:人脸核身 获取 SIGN ticket_腾讯云 前提条件:已经获取了access_token。获取方法可参考: PHP腾讯云人脸核身获取Access Token-CSDN博客 public function getSignTicket(){$access_token file_get_contents(/data/confi…...
探索 Higress:下一代云原生 API 网关
引言 在云原生时代,API 网关作为连接客户端与后端服务的桥梁,扮演着至关重要的角色。Higress 是一款由阿里巴巴开发的先进云原生 API 网关,基于开源的 Istio 和 Envoy 构建。它通过将流量网关、微服务网关和安全网关三者高度集成,…...
UE5编辑器静止状态下(非 Play 模式)睫毛和眼睛的渲染是正常的,而在 Play 模式下出现模糊
这通常指向以下几个 运行时(Runtime) 特有的原因: 抗锯齿 (Anti-Aliasing) 方法,特别是 Temporal Anti-Aliasing (TAA): 这是最可能的原因。 UE5 默认启用的 TAA 通过混合多帧信息来平滑边缘和减少闪烁,尤其是在运动中…...
ubuntu-24.04.2-live-server-arm64基于cloud-init实现分区自动扩容(LVM分区模式)
1. 环境 虚拟机镜像ISO:ubuntu-24.04.2-live-server-arm64.iso 2. 定制cloud-init镜像 2.1 安装OS 基于ubuntu-24.04.2-live-server-arm64.iso,通过virt-manager安装操作系统,语言建议选择英文,分区选择基于LVM的自动分区&…...
解决 Spring Boot 多数据源环境下事务管理器冲突问题(非Neo4j请求标记了 @Transactional 尝试启动Neo4j的事务管理器)
0. 写在前面 到底遇到了什么问题? 简洁版: 在 Oracle 与 Neo4j 共存的多数据源项目中,一个仅涉及 Oracle 操作的请求,却因为 Neo4j 连接失败而报错。根本原因是 Spring 的默认事务管理器错误地指向了 Neo4j,导致不相…...
直线轴承在自动化机械设备中的应用
直线轴承作为机械传动系统中的关键部件,凭借其高精度、低摩擦和稳定性能,被广泛应用于各类自动化设备中。以下是直线轴承在自动化领域的典型应用场景: CNC机床 在数控机床的进给系统中,直线轴承与精密导轨配合使用,为刀…...
生物化学笔记:医学免疫学原理22 肿瘤及肿瘤治疗
肿瘤及肿瘤治疗 免疫疗法 CAR-T细胞介绍...
6.数据手册解读—运算放大器(二)
目录 6、细节描述 6.1预览 6.2功能框图 6.3 特征描述 6.3.1输入保护 6.3.1 EMI抑制 6.3.3 温度保护 6.3.4 容性负载和稳定性 6.3.5 共模电压范围 6.3.6反相保护 6.3.7 电气过载 6.3.8 过载恢复 6.3.9 典型规格与分布 6.3.9 散热焊盘的封装 6.3.11 Shutdown 6.4…...
010数论——算法备赛
数论 模运算 一般求余都是对正整数的操作,如果对负数,不同编程语言结果可能不同。 C/javapythona>m,0<a%m<m-1 a<m,a%ma~5%32~-5%3 -21(-5)%(-3) -2~5%(-3)2-1正数:(ab)%m((a%m)(b%m))%m~正数ÿ…...
算法01-最小生成树prim算法
最小生成树prim算法 题源:代码随想录卡哥的题 链接:https://kamacoder.com/problempage.php?pid1053 时间:2025-04-18 难度:4⭐ 题目: 1. 题目描述: 在世界的某个区域,有一些分散的神秘岛屿&…...
轻量化高精度的视频语义分割
Video semantic segmentation (VSS)视频语义分割 Compact Models(紧凑模型) 在深度学习中,相对于传统模型具有更小尺寸和更少参数数量的模型。这些模型的设计旨在在保持合理性能的同时,减少模型的计算和存储成本。 紧凑模型的设计可以涉及以下一些技术: 深度剪枝(Deep…...
【AI飞】AutoIT入门七(实战):python操控autoit解决csf视频批量转换(有点难,AI都不会)
背景: 终极目标:通过python调用大模型,获得结果,然后根据返回信息,控制AutoIT操作电脑软件,执行具体工作。让AI更具有执行力。 已完成部分: 关于python调用大模型的,可以参考之前的…...
Android守护进程——Vold (Volume Daemon)
简介 介绍:Vold 是用来管理 android 系统的存储设备,如U盘、SD卡、磁盘等移动设备的热插拔、挂载、卸载、格式化 框架结构:Vold 在系统中以守护进程存在,是一个单独的进程。处于Kernel和Framework之间,是两个层级连接…...