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

今日Cortex-M3/M4研究总结

1.LR(R14)寄存器在函数调用的时候保存的是返回地址(BL指令会自动将返回地址保存在LR寄存器中),当中断发生的时候用于保存特殊信息:EXC_RETURN,它的具体定义为:

Bits [31:4] = 0xFFFFFFF   // 标识为EXC_RETURN值
Bit 3       = SP选择       // 0=返回后使用MSP, 1=使用PSP  
Bit 2       = 模式选择     // 0=返回Handler模式, 1=返回Thread模式
Bit 1       = 保留         // 必须为1(Thumb状态)
Bit 0       = 保留         // 必须为1

简而言之就是此时LR寄存器用于指示中断执行完后该使用MSP还是PSP,该返回Handler模式还是Thread模式

2.当中断发生时为了保护现场(为了中断执行完后能跳回来),内核会自动将以下寄存器信息压栈:R0-R3,R12,LR,PC,PSR,其中PSR是最先入栈的(R0最后),保存R0-R3是因为程序里面会经常使用R0-R3来保存临时数据或作为中转;保存R12是因为:R12 寄存器(又称 IP,Intra-Procedure Call Register,过程调用内部寄存器),也算是半个特殊寄存器,经常作为函数调用中的临时中转寄存器以及被用于栈帧(Stack Frame)的临时计算;

3.系统复位后在Reset_Handler里面的详细执行流程:

void analyze_startup_sequence(void)
{/* * 复位后的时间线:* * t0: 上电复位 → Handler模式 (执行Reset_Handler)*     - 异常号 = 1 (Reset)*     - 使用MSP*     - 特权级* * t1: C库初始化(__main) → 仍在Handler模式*     - 初始化.data, .bss段*     - 设置堆栈等* * t2: 调用main()前 → 切换到Thread模式*     - C库执行 "BX LR" 或 "MSR CONTROL, ..."*     - 切换到Thread模式 + MSP* * t3: 执行main() → Thread模式*     - 现在运行在Thread模式*     - 使用MSP (默认)*     - 特权级 (默认)*/
}Reset_Handler:/* 初始化系统时钟、内存等 */bl  SystemInit/* C库初始化 */bl  __main/* __main函数会完成模式切换 *//* 这里不会执行到 */; __main在C库中完成的工作:
; 1. 复制.data段到RAM
; 2. 清零.bss段  
; 3. 调用__rt_entry
; 4. __rt_entry最终调用main()前切换到Thread模式

其中有明确说明__main函数的作用:复制.data段到RAM、清零.bss段  、调用__rt_entry并最终调用main且切换到Thread模式

http://www.dtcms.com/a/540032.html

相关文章:

  • 2014吉林省赛题解 | CCUT应用OJ题解——Sign in
  • 涿州网站建设推广浙江建筑信息网站
  • 前端性能优化实战指南:从首屏加载到用户体验的全面提升
  • 【OPENGL ES 3.0 学习笔记】第十一天:glDrawArrays和glDrawElements
  • Linux入门1(2/2)
  • ubuntu24安装mysql遇到的坑----解决Mysql报错缺少libaio.so.1
  • 【星光不负 码向未来 | 万字解析:基于ArkUI声明式UI与分布式数据服务构建生产级跨设备音乐播放器】
  • UniApp 在手机端(Android)打开选择文件和文件写入
  • HarmonyOS分布式媒体播放器——跨设备音视频无缝流转
  • 【金融行业案例】基于Vaadin全栈Java框架重构内部系统,全面提升开发效率与用户体验
  • 小型网站开发要多少钱苏州专业做网站的公司哪家好
  • RocketMQ 生产环境性能调优实战:从 0 到 1 打造高可用消息队列系统
  • 脉冲按摩贴方案开发, 脉冲按摩贴MCU控制方案设计
  • 特别酷炫网站做网站有费用吗
  • DrissionPage 基于 Python 的网页自动化工具
  • Next.js vs Vue.js:2025年全栈战场,谁主沉浮?
  • DAY01笔记
  • 10-js基础(ESMAScript)
  • 一次深入排查:Spring Cloud Gateway TCP 连接复用导致 K8s 负载均衡失效
  • 基于 Vue3 及TypeScript 项目后的总结
  • Android下解决滑动冲突的常见思路是什么?
  • 建筑外观设计网站如何做一个门户网站
  • SQL多表查询完全指南-从JOIN到复杂关联的数据整合利器
  • Redis主从复制与哨兵集群
  • 电科金仓“异构多活架构”:破解浙江省人民医院集团化信创难题的密钥
  • 从零搭建群晖私有影音库:NasTool自动化追剧全流程拆解与远程访问协议优化实践
  • Maven项目管理:高效构建与依赖管理!
  • 【win11】funasr 1:配置conda环境
  • 2025年--Lc219-590. N 叉树的后序遍历(递归版,带测试用例)-Java版
  • YOLO11追踪简单应用