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

109、代码优化:定点数运算与浮点数运算

飞控算法从入门到精通 · 109 · 代码优化:定点数运算与浮点数运算

从一次炸机说起

去年夏天,我在调试一款自研的四旋翼飞控,MCU是STM32F405,主频168MHz。姿态解算用的Mahony互补滤波,全部float运算,跑在FreeRTOS上,任务周期1kHz。地面站看着一切正常,角度响应平滑,PID输出也稳。结果一上天,悬停不到三秒就开始抖,越抖越厉害,最后直接翻了过去。还好是在草地上试的,桨叶断了两根,机架没事。

查了一整天,最后定位到问题:浮点运算导致的任务超时。1kHz的周期,实际执行时间在中断里被拉长到了1.3ms左右,偶尔还会跳到1.5ms。姿态环和位置环都在同一个高优先级任务里,浮点运算的延迟让控制输出滞后了将近半个周期,系统自然就发散。

从那以后,我对飞控里的浮点数运算就格外敏感。不是说不能用,而是要知道什么时候该用,什么时候必须换成定点数。

浮点数的代价

很多人觉得STM32F4有FPU,浮点运算就是一条指令的事,快得很。这话对了一半。单精度浮点乘法确实是一条指令,但问题出在别的地方。

首先是寄存器上下文切换。飞控里跑RTOS,任务切换时要保存和恢复FPU寄存器。Cortex-M4的FPU有32个单精度寄存器,每个32位,加上FPSCR状态寄存器,一次切换就要保存132字节。如果任务切换频繁,这个开销会累积得很可观。我实测过,在FreeRTOS里开启FPU的LAZY STACKING和关闭它,任务切换时间差了将近40个时钟周期。40个周期看起来不多,但1kHz的任务切换,每秒就是4万周期,占掉168MHz主频的0.0

http://www.jsqmd.com/news/973807/

相关文章:

  • 3个中文Kodi插件打造完美家庭影院:视频搜索与字幕匹配全攻略
  • 【解决方案】Umi-OCR Linux桌面集成与自动化工作流实战配置
  • COMSOL光子晶体仿真工具包:聚焦平带中merging BIC调控、三维能带计算与Q值自动提取
  • AI 全栈开发实战(1):产品定义与架构设计 —— 做一个真正的 AI 知识库产品
  • Power BI网站化设计:用HTML思维重构报表体验
  • 如何用Obsidian Zettelkasten模板告别笔记混乱,构建你的第二大脑
  • 炉石传说HsMod插件:55项功能终极指南与完整教程
  • MSP430G2553 RHB封装下DS18B20单总线温度采集完整CCS工程包(含调试配置与编译输出)
  • 投票小程序哪个好用|海投票2026实测与深度测评 - 微信投票小程序
  • 包头哪里有 CPPM 正规报考机构 - 中供国培
  • 【超详细】一文吃透梅尔倒谱系数MFCC,从声学原理到工程落地全解析
  • UniWorld与主流视觉模型对比:FLUX、Qwen2-VL、SigLIP集成分析
  • 超深度测评!2026广州靠谱黄金回收门店单出炉 - 奢侈品回收评测
  • Claude推理一致性层归零:从运行时校验到编译期约束
  • 股票评论情感分析全流程:爬虫采集+AI判分+MATLAB算相关+Excel出图
  • 炉石传说终极插件HsMod:55项功能完全指南与优化方案
  • 别再手动合并单元格了!若依(RuoYi) 3.5.0导出Excel的合并行功能改造实录
  • 如何在Windows上快速搭建智能音乐控制系统:小白也能懂的完整教程
  • 深度解析:3种高效安装Realtek RTL8125 2.5G网卡驱动的专业方法
  • 2026年郑州市CPPM考试最新全攻略:科目题型、通过率、备考重点及官方双认证报考机构推荐 - 众智商学院课程中心
  • 终极指南:如何让老款Mac完美运行最新macOS系统
  • 2026伺服电阻焊机品牌排行榜:中频点焊机综合实力测评发布 - 速递信息
  • Phigros网页模拟器:5个核心功能让音乐游戏在浏览器中流畅运行
  • 米兰墙布和其他品牌比怎么样?米兰软装差异化明显 - 博客万
  • Fcitx故障排除:解决常见安装和配置问题的10个技巧
  • MixIO平台保姆级上手教程:从注册到RGB灯控制,手把手带你玩转物联网
  • 主流后端技术栈对比分析:选型不再迷茫
  • 用Qt和PaddleOCR快速打造一个本地OCR截图识别工具(附源码与打包发布指南)
  • 2026年襄阳市黄金回收彩金回收铂金回收白银回收安全合规榜:无套路靠谱门店推荐及联系方式 交易放心 - 亦辰小黄鸭
  • 遗传算法工程实战:从早熟崩溃到92秒收敛的调参心法