Flash擦除后数据为什么会变NaN
一句话: Flash 擦除后全是 0xFF当 float 读出来是 NaN。NaN 转整型行为未定义——可能是 0也可能是满量程。如果这个值直接写 DAC 控制电流或电压器件可能在几秒内烧毁。适合谁读用 Flash 存配置参数、模拟 EEPROM 的嵌入式开发者。0xFF 是怎么变成 NaN 的Flash 擦除后每位都是 1。四个字节连起来是0xFFFFFFFF。如果代码里把这块 Flash 当成float来读float fVal *(float*)flash_data; // 0xFFFFFFFF → NaNIEEE 754 标准里0xFFFFFFFF正好落在 NaN 的编码范围内。读出来不是 0不是很大的数是不存在的东西。NaN 的意思是 Not a Number——它确实不是任何数字。转整型的灾难如果接下来把 NaN 转成整型写 DACuint16_t dacCode (uint16_t)(fVal * SCALE); // NaN * anything ?NaN 参与的运算结果还是 NaN。NaN 强转整型的行为在 C 标准里是未定义的。ARMCC 可能给 0GCC 可能给一个很大的数同一编译器换优化等级结果都可能不一样。如果是 0——万幸DAC 输出 0安全。如果是满量程 4095——DAC 输出满量程电流器件可能几秒烧毁。测十次十次都是 0第十一次换个优化等级就炸。这不是 Bug是未定义行为。不止 FlashNaN 陷阱不限于 Flash。任何数据还没初始化就被读的场景都可能触发场景怎么产生 NaN后果Flash 擦除后未写0xFFFFFFFF → NaN随机 DAC 值结构体未初始化就读取栈上残留值随机配置参数通信超时没收到数据缓冲区旧值过期的命令参数传感器断线ADC 读到浮空值虚假的测量值本质上都是同一个问题把不确定的值当成有效值用了。怎么防1. Flash 预写安全默认值上板第一步往所有配置区写最小安全值。就算意外读取输出也在阈值以下。2. 读出来先判有效性float fVal ReadFlashFloat(addr); if (isnan(fVal) || isinf(fVal)) { fVal SAFE_DEFAULT; // 读坏了用默认值 }isnan()和isinf()是math.h标准函数一行的事。3. 任何从 Flash 读出的值先做范围检查if (dacCode MIN_VALID || dacCode MAX_VALID) { dacCode SAFE_DEFAULT; }三条规则五秒写完。比烧一颗器件便宜。有用的话点个收藏下次调试直接用。有问题欢迎评论区交流看到了都会回。

相关新闻

Unity Animator参数实战:Bool、Trigger、Float核心用法与游戏案例解析

Unity Animator参数实战:Bool、Trigger、Float核心用法与游戏案例解析

1. 项目概述:从“背参数”到“玩转参数”的思维跃迁如果你在Unity开发中,尤其是涉及到角色动画、UI交互或者任何需要状态切换的地方,还在对着Animator Controller里那些Bool、Trigger、Float参数列表死记硬背,那说明你可能还没真正…

2026/7/22 14:01:09 阅读更多 →
手画图形自动修正HTML

手画图形自动修正HTML

仅在于其形式转载商用利用AI模型识别您绘制的形状&#xff0c;并将其修正为标准的几何图形。html<!DOCTYPE html><html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

2026/7/22 14:01:09 阅读更多 →
结点电压法保姆级教程

结点电压法保姆级教程

一句话: 结点电压法用更少的方程、更统一的套路直接求各点电位。不堆公式推导——核心模板就一句话&#xff0c;加上四步操作&#xff0c;复杂电路变成填空题。适合谁读&#xff1a;被支路电流法列方程列到头晕的电路初学者。万能公式 结点电压法的本质是基尔霍夫电流定律&…

2026/7/22 14:01:08 阅读更多 →

最新新闻

MT6357的耳机插入过程中accdet机制及代码分析

MT6357的耳机插入过程中accdet机制及代码分析

文章目录前言一、设备树及原理图二、accdet机制三、mt6357-accdet.c 代码分析3.1 mtk_accdet_irq_handler_thread代码分析3.2 eint_work_callback分析3.3 accdet_work_callback3.4 dis_micbias_timerhandler3.5 dis_micbias_work_callback3.6 delay_init_timerhandler和delay_i…

2026/7/22 16:10:27 阅读更多 →
笔记本KVM虚拟机VFIO显卡直通完整教程

笔记本KVM虚拟机VFIO显卡直通完整教程

1. 项目概述在Linux环境下运行Windows应用程序一直是许多用户的痛点&#xff0c;尤其是对于游戏玩家和专业软件用户而言。传统的兼容层方案如Wine和Proton虽然取得了一定进展&#xff0c;但在性能和兼容性方面仍存在局限。而虚拟机方案虽然兼容性更好&#xff0c;却常因图形性能…

2026/7/22 16:10:27 阅读更多 →
Alfred高效工作流:从基础搜索到深度定制

Alfred高效工作流:从基础搜索到深度定制

1. Alfred 核心功能解析 Alfred作为macOS平台上的效率神器&#xff0c;其核心价值在于将分散的系统操作整合为统一的指令入口。我使用Alfred五年多&#xff0c;最深体会是它彻底改变了我的工作流结构——通过CommandSpace这组全局快捷键&#xff0c;可以瞬间唤醒搜索框&#x…

2026/7/22 16:10:27 阅读更多 →
C/C++内存管理进阶:从栈堆原理到智能指针实战

C/C++内存管理进阶:从栈堆原理到智能指针实战

1. 项目概述&#xff1a;为什么内存管理是C/C的“成人礼”干了这么多年C/C开发&#xff0c;我越来越觉得&#xff0c;内存管理这门手艺&#xff0c;是区分“会用C”和“懂C”的一道分水岭。新手入门&#xff0c;往往被语法、循环、类这些概念吸引&#xff0c;写得飞起。但一到项…

2026/7/22 16:10:27 阅读更多 →
TI PSC控制器详解:嵌入式低功耗电源管理的核心机制与实战

TI PSC控制器详解:嵌入式低功耗电源管理的核心机制与实战

1. 项目概述与核心价值在嵌入式开发&#xff0c;尤其是电池供电或对功耗极其敏感的应用场景里&#xff0c;电源管理从来都不是一个“锦上添花”的选项&#xff0c;而是决定产品成败的基石。我经历过不少项目&#xff0c;早期因为对电源管理理解不深&#xff0c;要么是设备续航远…

2026/7/22 16:10:27 阅读更多 →
【JAVA毕设源码分享】基于springboot自行车仓库管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot自行车仓库管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2026/7/22 16:09:26 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统&#xff0c;尤其是像TI C6000系列这样的高性能DSP开发中&#xff0c;我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动&#xff0c;但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案&#xff1f; 在数字化协作环境中&#xff0c;消息通知系统的重要性不言而喻明。但现实情况是&#xff0c;企业级通知方案往往需要复杂的API对接&#xff08;如企业微信、钉钉、飞书&#xff09;&#xff0c;个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点"&#xff0c;乙方听到的是"少做几页"。甲方说"不要太复杂"&#xff0c;乙方理解成"别放图表了"。结果交过去&#xff0c;甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里&#xff0c;是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻