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

保存现场几种场景

场景一:普通函数调用 (如 main调用fun)

  • 触发机制:由BL(Branch with Link)等跳转指令在软件层面主动触发

  • 谁来完成编译器自动生成的代码来完成。

  • 保存了哪些寄存器

    • R4-R11:如果被调用的函数(fun)内部使用了这些寄存器,它会在函数的开头(入口处)用PUSH指令将它们压栈,在返回前用POP恢复。

    • LRBL指令执行时,CPU硬件会自动将返回地址存入LR。但若fun内部还有嵌套调用,它也会把LR压栈保存。

  • 原理:这确保了函数调用前后,调用者(main)的R4-R11内容保持不变,保证了程序的确定性。


场景二:异常/硬件中断 (如外部中断、SysTick)

  • 触发机制:由外部事件或内部外设在硬件层面异步触发

  • 谁来完成CPU硬件自动完成一部分,程序员/编译器完成另一部分。

  • 保存了哪些寄存器:分两步进行。

    1. 硬件自动压栈 (8个寄存器):当异常发生时,Cortex-M4内核会自动将以下8个寄存器压入当前使用的栈中(PSP或MSP),组成一个“栈帧”。

      • R0-R3,R12,LR,PC,xPSR

      • 这在硬件上保证了中断处理函数可以作为普通的C函数来编写。

    2. 软件可选保存:如果中断服务程序(ISR)需要用到R4-R11,编译器会像普通函数一样,在ISR的入口处生成代码来保存它们。

  • 特殊点中断嵌套与返回。处理异常时,LR寄存器会被赋一个特殊值EXC_RETURN,用于指示异常返回时使用哪个栈指针(MSP或PSP)以及返回到线程模式还是处理模式,从而支持嵌套中断。


场景三:FreeRTOS任务切换

  • 触发机制:由SysTick时钟滴答或任务主动阻塞,在软件层面主动触发PendSV(可挂起服务调用)异常来执行。

  • 谁来完成CPU硬件自动完成一部分,FreeRTOS的移植层代码 (port.c)完成其余部分。

  • 保存了哪些寄存器:这是保存最完整、最彻底的一种场景。

    1. 硬件自动压栈:触发PendSV异常后,硬件首先自动保存了和场景二相同的R0-R3,R12,LR,PC,xPSR到当前任务的栈中。

    2. 软件强制保存所有剩余寄存器:紧接着,在PendSV的中断服务函数(通常是xPortPendSVHandler)中,FreeRTOS的汇编代码会主动将当前任务的所有其他通用寄存器,包括R4-R11全部压栈保存。

  • 原理:因为任务切换是完全独立的上下文切换,当前任务的执行现场(所有寄存器的值)必须被完整地保存到它自己的任务栈中,等到下一次它获得CPU时才能精确地恢复现场,继续执行。

总结

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

相关文章:

  • AI Agent上线前必须完成的9项原子级测试,少1项即触发合规风险与用户信任坍塌
  • GPT-5.6、Grok 4.5与MiniMax M3:AI大模型技术对比与实战选型指南
  • 裕华区卖金别踩雷!石家庄黄金回收避坑指南:火烧验金全是坑 - 一日一测评
  • 绝区零自动化助手终极指南:如何一键解放双手,智能完成日常任务与战斗优化
  • 电流互感器与单电源运放在AC电流检测电路中的应用
  • 厦门手表回收高价上门,各类奢侈腕表专业鉴定回收 - 日常比对手册
  • mlx-community/gemma-4-e2b-it-6bit核心功能解析:从图像token到多模态交互全流程
  • OBS Studio多机位直播架构:从场景管理到专业级切换的工作流优化
  • Processing实战:从创意编程到硬件交互的完整解决方案
  • Cowabunga Lite:无需越狱的iOS终极个性化定制指南
  • OpenBidKit_Yibiao:开源免费的智能标书制作工具,知识库管理与内容查重一体化解决方案
  • 2026湘潭卫生间漏水检测找谁靠谱?对比本地3家正规公司报价与服务保障(7月整理) - 防水企业百科
  • WPS Office缓存占用C盘空间问题及解决方案
  • Google Search Results Python 批量异步搜索教程:10分钟处理1000+查询请求
  • 【Claude写作提效黄金法则】:20年AI内容专家亲授5大避坑指南与即刻生效模板
  • 嵌入式系统冷启动全解析:NAND/MMC介质缺陷处理与文件系统导航
  • 2026 年更新:集安正规的专业地基下沉灌浆施工公司哪家可靠,地基沉降不再是难题:揭秘高效灌浆的秘密 - 行业推荐官【认证】
  • Jetpack Compose BOM:简化Android UI开发的版本管理利器
  • 告别频繁切换:Cool Request让你的API调试效率提升300%的终极指南
  • 【2024最新版Kimi Word解析逻辑】:基于NLP模型结构逆向推演的精准阅读策略
  • 终极指南:如何3分钟免费安装Figma中文插件,解锁中文界面设计体验
  • CGrep 高级用户指南:掌握多线程搜索与输出格式化技巧
  • Fable 5 AI编程实战:快速构建电影感网站的完整指南
  • 3步解锁AI少女完整体验:HF补丁一站式解决方案
  • MCA Selector终极指南:轻松管理你的Minecraft世界文件
  • 2026烟台卫生间漏水检测怎么办?屋顶、外墙、地下室3家检测方案对比(7月指南) - 防水企业百科
  • Windows屏幕标注的终极解决方案:ppInk如何让您的演示更专业?
  • Unity物理破坏效果实现:从预制到程序化的碰撞与性能优化
  • 功率电感DCR检流技术在开关电源中的应用与设计
  • FastAPI项目结构设计与模块化架构实践