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

ARM基础----STM32处理器操作模式

STM32处理器操作模式

  • Cortex-M处理器操作模式、特权等级和栈指针
    • 操作模式
    • 栈指针
    • CONTROL寄存器
    • 异常压栈时的SP指针
  • Cortex-A 处理器运行模型
    • 寄存器组

Cortex-M处理器操作模式、特权等级和栈指针

操作模式

  • 处理模式:执行中断服务程序等异常处理,处理器具有特权访问等级
  • 线程模式:执行普通的应用程序代码,处理器处于的访问特权等级不一定
    如果想完成线程模式下的访问等级由非特权访问等级,变为特权访问等级需要使用异常机制
    在这里插入图片描述

栈指针

栈指针分为MSP主栈指针和PSP进程栈指针,用到FreeRTOS等操作系统时才会用到PSP。

CONTROL寄存器

栈指针的选择和线程模式的访问等级依靠CONTROL寄存器实现。
功能
CONTROL[0]nPRIV定义线程模式特权等级
0 = 特权级的线程模式(默认)
1 = 用户级的线程模式
CONTROL[1]SPSEL定义栈指针
0 = 选择主堆栈指针MSP(默认)
1 = 选择进程堆栈指针PSP

Handler处理模式永远都是特权级的,Handler处理模式下只允许使用MSP。

异常压栈时的SP指针

线程模式下,使用MSP,压栈时使用MSP.
线程模式下,使用PSP,压栈时使用PSP.
处理模式下,全部使用PSP,因此嵌套中断的压栈都是使用PSP

在这里插入图片描述

Cortex-A 处理器运行模型

运行模型

USR用户模式,用户程序运行在User模式下,非特权模式拥有受限的系统资源访问权限
FIQ快速中断模式,发生FIQ中断时的进入这个模式,拥有更高的响应等级和更低的延迟
IRQ一般中断异模式,发生IRQ中断时进入这个模式
SVC管理员模式,操作系统内核通常运行在该模式下,应用程序发生系统调用svc指令进入这个模式
Abort(ABT)异常终止模式,当发生数据访问异常的时候进入这个模式
System(SYS)系统模式,特权模式,一般用来设置USR模式的寄存器
Undefined(UND)未定义指令模式,执行未定义指令时进入这个模式。
Monitor(MON)监视模式,用于安全扩展模式,比如TF-A
Hyp虚拟化扩展的处理器才有该模式

寄存器组

在这里插入图片描述

  • 除了FIQ模式,其它模式共用R0-R12,FIQ有自己R8-R12,所以比IRQ模式更快。

  • 处理器模式是由状态寄存器CPSR的M域来控制的。对于用户模式而言,是没有权限操作CPSR寄存器的M域的,只能通过svc指令进入到SVC模式。
    在这里插入图片描述

  • 系统模式和用户模式共享寄存器视图,可以在处理器启动时通过设置系统模式的SP寄存器来达到设置用户模式堆栈的目的,要设置用户模式的其他寄存器也可以这样操作

相关文章:

  • 深度学习-Softmax 回归 + 损失函数 + 图片分类数据集
  • (南京观海微电子)——I3C协议介绍
  • 2024 年中国高校大数据挑战赛赛题 C:用户对博物馆评论的情感分析完整思路以及源代码分享
  • 电脑工作电压是多少你要看看光驱电源上面标的输入电压范围
  • 01_Maven
  • CVPR 2022 Oral | Bailando: 基于编舞记忆和Actor-Critic GPT的3D舞蹈生成
  • [论文笔记] Open-sora 2、视频数据集介绍 MSR-VTT
  • Spring AOP基于注解方式实现
  • python中的模块和包
  • 【C++】深度解剖多态
  • 数据结构与算法:链式二叉树
  • c++单例模式和call_once函数
  • 一键部署Tesseract-OCR环境C++版本(Windows)
  • 速盾网络:cdn加速技术和云计算的区别
  • spring三种配置方式总结
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • mongodb--安装和初步使用教程
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Unix命令
  • vue数据传递--我有特殊的实现技巧
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 大快搜索数据爬虫技术实例安装教学篇
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 深度学习中的信息论知识详解
  • 微服务核心架构梳理
  • 追踪解析 FutureTask 源码
  • python最赚钱的4个方向,你最心动的是哪个?
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (30)数组元素和与数字和的绝对差
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (备忘)Java Map 遍历
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (六)软件测试分工
  • (三分钟)速览传统边缘检测算子
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)Oracle 9i 数据库设计指引全集(1)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .cn根服务器被攻击之后
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .Net mvc总结
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .net项目IIS、VS 附加进程调试
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @ModelAttribute注解使用
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [c]统计数字
  • [C++打怪升级]--学习总目录
  • [C语言]——分支和循环(4)