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

Lazy Stacking的设计说明

为什么寄存器压栈这个动作会“慢”到需要专门设计一套复杂的“懒压栈”机制?
其实并不是FPU本身运行慢,而是“内存访问”相对于“处理器处理速度”太慢了。我们可以从以下三个维度来拆解这个原因:
1、数据的“量”级差异:从8个到25个在没有FPU的情况下,Cortex-M进入中断时硬件会自动压栈8个通用寄存器(RO-R3,R12,LR,PC,xFSR)。一旦开启FPU 且任务使用了浮点运算,硬件需要额外压栈17个寄存器(S0-S15和FPSCR)。
普通中断:8个寄存器 x 4字节 = 32字节
FPU中断:(8+17)个寄存器 × 4字节 = 100字节
要把这100字节数据从CPU寄存器写入RAM,需要消耗大量的总线周期。对于追求“确定性”和“低延迟”的实时系统(RTOS)来说,这种翻倍的压栈时间是不可接受的。
2. 关键瓶颈:总线与内存
虽然CPU核心频率很高(比如200MHz),但内存(SRAM)和总线接口往往跟不上这个速度。
指令执行:CPU内部处理加减法可能只需要1个周期。
内存写入:连续写入25个字(Word)可能需要几十个甚至上百个时钟周期(取决于等待周期、总线竞争等)。
中断延迟:ARM Cortex-M的卖点之一就是极快的中断响应(通常12个周期左右)。如果每次进中断都要老老实实把FPU寄存器存完,这个响应时间可能直接变成40-50个周期。
3. “无用功”的浪费
在嵌入式开发中,绝大多数的中断服务函数(ISR)其实根本不涉及浮点运算。
如果没有Lazy Stacking:即使你的ISR只是为了清理一个定时器标志位,CPU也会强行把那17个浮点寄存器存入堆栈,然后出中断再取回来。这纯粹是浪费电力和执行时间。
有了Lazy Stacking:只有当你真的在ISR里写了类似 float = b * 1.5f 的代码时,CPU才会“极不情愿”地停下来去完成压栈。

后记:寄存器,名称,作用(通俗解释)
R0-R3:通用寄存器,搬砖工。函数调用时的前4个参数通常放在这里,也是计算时最常用的临时存数位。
R12:内部调用暂时寄存器(IP),临时工。通常用于在函数调用间隙暂时存放数据。
LR(R14):链接奇存器(Link Register),回冢的路。保存函数返回后的地址,或者中断返回时的特殊编码(EXC_RETURN)。
PC(R15):程序计数器(Program Counter),指挥棒。指向CPU当前正在执行(或即将执行)的那行代码的地址。
xPSR:组合程序状态寄存器,仪表盘。记录当前运算是否溢出、是否有进位,以及当前处在哪个中断编号里。

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

相关文章:

  • CSDN-Markdown新版说明 - 指南
  • 数字化转型加速器:国内企业如何选择最适合的CI/CD工具
  • ARM 汇编指令系列文章导读
  • Spring Boot + SSE 企业级实时推送完整指南
  • 基于 Spring Boot + SkyWalking + Prometheus 的性能工程闭环实战
  • agent skills是任务导向的,不是按不同软件开放的,同一个任务可能会用到不同的软件接口
  • 一文吃透Java WebSocket:原理、实现与核心特性解析
  • 有调用skills很强的框架吗 MS-Agent
  • 开通快捷支付,这些好处直接拉满体验!
  • Spring Boot 企业级 RSA + AES-GCM 混合加密自动解密中间件设计与实战
  • ASTM F1980标准详解
  • 基于深度学习YOLOv11的车辆类型检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • RavenDB:打破数据库策略壁垒的创新解决方案
  • 世界经济论坛专家称人工智能需要纠正发展方向
  • X 因 Grok 生成色情深度伪造内容面临欧盟调查
  • 基于Wails框架的Ollama模型桌面管理系统设计与实现
  • 基于eBPF技术的高性能网络防火墙系统设计与实现
  • 关于SpringBoot MVC
  • 机器学习:大数据python图书推荐系统 基于用户协同过滤推荐算法 基于物品协同过滤推荐算法 书籍推荐 Django框架 大数据毕业设计(源码)✅
  • 【实战】Vue+Canvas 实现标注组件
  • 065.丑数
  • 神秘大三角(洛谷P1355)
  • 震惊!AI大模型又出骚操作:一张图看懂图像理解与生成统一技术,小白程序员也能秒懂!
  • 震惊!这些开源LLMs已经可以媲美GPT-5了!编程开发者的福音,附部署全攻略
  • 价值投资中的公司文化:软实力的重要性
  • 微信表情GIF传不上?GIF压缩到微信表情不模糊方法
  • 大模型“记性差“怎么办?RAG技术让AI变身“信息检索专家“,小白也能快速上手!
  • 【Effective Modern C++】第三章 转向现代C++:13. 优先选用const_iterator,而非iterator
  • 更弱智的算法学习 day57
  • Excel ADDRESS函数深度解析:动态构建单元格地址的艺术