Cortex-M3的双堆栈MSP和PSP(学习)

news2024/11/24 23:00:40

M3的栈,先进后出。
是局部变量内存的开销,函数的调用都离不开栈。

Cortex-M3内核使用了双堆栈,即MSP和PSP。
MSP:Main_Stack_Pointer,即主栈。
PSP:Process_Stack_Pointer,即任务栈。
SP:SP是堆栈指针,指向最后一个被压入元素的地址。

M3的压栈和弹栈过程。

  • 压栈:SP先自减4,然后将待压入的数据存放到SP所指的地址。
  • 弹栈:从SP指针所指的地址读出数据,然后SP指针自增4。

M3内核堆栈生长方向是向下生长,且是32位的。

M3内核何时使用MSP何时使用PSP?

M3双堆栈的意思是两个堆栈,但任何时候只能使用其中一个。
SP寄存器中的值在某一时刻到底是MSP还是PSP?
这是根据CONTROL寄存器的bit1来决定的,当CONTROL的bit1为0使用MSP(默认方式),为1时使用PSP。

控制寄存器有两个用途,其一用于定义特权级别,其二用于选择当前使用哪个堆栈指针。
在这里插入图片描述

设立双指针是为了保护OS的安全性和稳健性。
操作系统和异常事件用MSP。
用户程序(线程)用PSP。
MSP和PSP指针之间的切换会在处理异常事件时自动完成。

区别于用户程序使用PSP,操作系统和异常事件单独使用一个MSP指针的目的,为了保证栈数据不会被用户程序意外访问或栈空间被用户程序占用。
比如,当应用程序发生栈溢出问题时,必须要确保应用程序的故障不会影响到操作系统的运行和异常事件的处理——也就是需要保证始终有栈空间来执行异常事件。

裸机的时候,使用MSP指针。其实OS在上电复位到切换线程之前用的都是MSP指针,也就是线程切换之前都是一个裸机程序的状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/856019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在win7的右键菜单栏上添加“在此处打开Powershell”

打开regedit.exe 找到计算机\HKEY_CLASSES_ROOT\Directory\Background\shell。 在项下建立新项Powershell,并且在Powershell项下建立新项command,如图所示: 在Powershell的默认的项中填写名称在此处打开Powershell窗口。 新建字符串值Ex…

如何快捷发布学生志愿录取情况?

随着新学期的临近,作为一名招生老师,你是否已经做好了新学年的招生准备工作呢?在招生名单确认后,录取查询就成为了当前急需完成的工作。那么,如何让新生能够自主查询自己的录取情况呢? 作为招生老师&#…

flutter开发实战-实现左右来回移动的按钮引导动画效果

flutter开发实战-实现左右来回移动的按钮引导动画效果 最近开发过程中需要实现左右来回移动的按钮引导动画效果 一、动画 AnimationController用来控制一个或者多个动画的正向、反向、停止等相关动画操作。在默认情况下AnimationController是按照线性进行动画播放的。Animati…

CelebA-HQ数据集下载【详细明了版】分辨率包括【64,128,256,512,1024】

CelebA-HQ数据集下载,分辨率包括【64,128,256,512,1024】 前言下载&处理1.下载合并解压img_celeba.7z2.下载list_landmarks_celeba.txt3.获取h5tool.py4.mkdir5. 下载.dat数据 配置环境生成数据集 前言 CelebA-HQ …

谷歌推出Flax:JAX的神经网络库

在优化理论中,损失或成本函数测量拟合或预测值与实际值之间的距离。对于大多数机器学习模型,提高性能意味着最小化损失函数。 但对于深度神经网络,执行梯度下降以最小化每个参数的损失函数可能会消耗大量资源。传统方法包括手动推导和编码&a…

MySQL — InnoDB事务

文章目录 事务定义事务特性事务隔离级别READ UNCOMMITTEDREPEATABLE READREAD COMMITTEDSERIALIZABLE 事务存在的问题脏读(Dirty Read)不可重复读(Non-repeatable Read)幻读(Phantom Read) 事务定义 数据库…

【vue3】elementPlus主题色定制

以scss语言为例 1、element-plus自动按需导入配置,可参考官网按需导入模块 安装element-plus及辅助插件 npm i element-plus --save安装辅助插件 npm install -D unplugin-vue-components unplugin-auto-import安装sass npm i sass -D2、vite.config.js 中配置…

FPGA应用学习笔记--时钟域的控制 亚稳态的解决

时钟域就是同一个时钟的区域,体现在laways语句边缘触发语句中,设计规模增大就会导致时钟不同步,有时差,就要设计多时钟域。 会经过与门的延时产生的新时钟域,这种其实不推荐使用,但在ascl里面很常见 在处理…

《2023年中国企业数字化转型发展白皮书》发布

导读 本报告主要采用市场调查、行业深度访谈、桌面研究等方法,并使用艾媒咨询旗下各大数据计算系统和相关计算模型。 对部分相关的公开信息进行筛选,通过对行业专家、相关企业与网民进行深度访谈,了解相关行业主要情况,获得相应…

k8s dns 解析service异常

查看kube-dns日志 for p in $(kubectl get pods --namespacekube-system -l k8s-appkube-dns -o name); \ do kubectl logs --namespacekube-system $p; done k8s教程(service篇)-总结_阿甘兄的技术博客_51CTO博客

常用的mysql子查询

你好!下面是一些常用的 MySQL 子查询: 标量子查询(Scalar Subquery):返回单个值作为查询结果。SELECT column_name FROM table_name WHERE column_name (SELECT column_name FROM table_name WHERE condition); 列表…

ML类CFAR检测器在不同环境中检测性能的分析

摘要:该文是楼主翻阅书籍以及一些论文总结出来的关于ML(均值)类CFAR检测器在不同环境中的性能对比,以及优缺点的总结,可以帮助大家面对不同情形如何选择CFAR问题。由于楼主见识短浅,文中难免出现不足之处,望各位指出。…

Docker之jenkins部署harbor在harbor中完成部署

Docker之jenkins部署harbor在harbor中完成部署 1、harbor作用 Harbor允许用户用命令行工具对容器镜像及其他Artifact进行推送和拉取,并提供了图形管理界面帮助用户查阅和删除这些Artifact。在Harbor 2.0版本中,除容器镜像外,Harbor对符合OCI…

自定义线程池 01 - 阻塞队列

完整代码已上传gitee ,地址 :朱元杰的开源仓库 – ThreadPool核心源码仿写 完整文章栏目地址在:Fearless____的博客 - ThreadPool仿写 接下来将手动仿写一个线程池,第一步先仿写 阻塞队列 ​​​​​​​​​​​​​​​​​ 为…

docker删除容器时报错:Error response from daemon: reference does not exist

前言 之前使用的docker版本太低了,升级高版本docker之后的错误。 低版本docker(1.30.1)中的镜像有:golang、mysql,将docker升级为24.0.5并新拉取mysql最新版本之后,执行docker images命令,发现…

【Kaggle】Identify Contrails to Reduce Global Warming 比赛数据集的可视化(含源代码)

一、数据简单解读 卫星图像最初来自&#xff1a; https://www.goes-r.gov/spacesegment/abi.html高级基线成像仪是GOES-R系列中用于对地球天气、海洋和环境进行成像的主要仪器。ABI用16个不同的光谱波段观察地球&#xff08;上一代GOES只有<>个&#xff09;&#xff0c…

MySQL数据库基础语法 - 上

一&#xff0c;数据库操作 数据库中不区分大小写&#xff01;&#xff01;&#xff01; 1.1 显示数据库 show databases ; 如图&#xff1a; 1.2 创建数据库 create database [ if not exists ]数据库名 ; 如图&#xff1a; 1.3 使用数据库 use 数据库名 &#xff1b; 如图&a…

PHP codeigniter4 搭配Nginx

> 主要是为了用Nginx运行PHP环境 1. Nginx 官方文档的配置 default.conf This configuration enables URLs without “index.php” in them and using CodeIgniter’s “404 - File Not Found” for URLs ending with “.php”. server {listen 80;listen [::]:80;se…

Discovery studio构建药效团(Pharmacophore)的方式

药效团(Pharmacophore)是特征化的三维结构要素的组合&#xff0c;可以分为两种类型。一类是具有相同药理作用的类似物&#xff0c;它们具有某种基本结构&#xff0c;即相同的化学结构部分如磺胺类药物、局麻药、受体阻断剂、拟肾上腺素药物等;另一类是一组化学结构完全不同的分…

快速上手Vue开发:新一代Vue官方脚手架(create-vue)

文章目录 一、简介二、创建一个 Vue 应用1、前提条件2、安装命令3、可选插件 一、简介 create-vue 是 Vue3 的专用脚手架&#xff0c;使用 vite 创建 Vue3 的项目&#xff0c;也可以选择安装需要的各种插件&#xff0c;使用更简单。 二、创建一个 Vue 应用 官网地址&#xff…