- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在阅读 ARM 信息中心的各个部分,试图找到答案,但是文档让我感到困惑,所以我希望这里有人可以提供帮助。
据我所知,Cortex-M 处理器中有两个堆栈:
我试图弄清楚 ARM 内核如何使用每一个。
ARM 信息中心的文档在讨论 Cortex-M3 时指出了以下内容:
The main stack is used at reset, and is always used in Handler mode (when entering an exception handler). The process stack pointer is only available as the current stack pointer when in Thread mode.
好的,这告诉我 MSP 在复位时使用。但是,文档还说明了以下内容:
Used to execute application software. The processor enters Thread mode when it comes out of reset.
Used to handle exceptions. The processor returns to Thread mode when it has finished all exception processing.
好吧,这就是让我困惑的地方。如果复位时使用MSP并且总是在Handler模式下使用,而PSP在Thread模式下使用,那么如果复位时处理器处于Thread模式,那么如何在复位时使用MSP?
最佳答案
简单的回答:你的最后一段是不正确的。 线程模式默认使用 MSP。
您没有说明您正在使用什么处理器,所以我们假设是 Cortex-M3。查看 this page 底部的 CONTROL
寄存器的说明:SPSEL
位控制使用哪个堆栈,线程和处理程序模式默认为 MSP,并且仅在线程模式下可写。
此外,尽管这不是您问题的一部分,但默认情况下线程模式也是有特权的。在同一寄存器中设置 nPRIV
位会使线程模式成为非特权模式。
总结:处理程序模式始终具有特权并且始终使用 MSP。默认情况下,线程模式也是如此,但 CONTROL
寄存器允许更改此设置。
更多背景信息...
例如,如果您正在编写一个小型操作系统,那么通常希望线程模式代码没有特权。如果线程模式代码使用 PSP,它还会使任务切换变得更加容易,因为这样您的任务切换代码将不可避免地在处理程序模式下运行(通常在 Cortex-M 上的 PendSV 处理程序中),可以使用自己的堆栈,而无需影响它尝试切换的任务堆栈。
为此,操作系统的初始化代码通常必须(按此顺序):
MSR
指令使PSP指向该区域的顶部(这需要特权,但也必须在线程模式下完成,因为SPSEL
忽略处理程序模式下的写入)MSR
指令设置CONTROL
寄存器中的SPSEL
位,将运行代码切换为使用PSP和新的-准备好的堆栈空间ISB
指令以确保所有后续指令均按要求使用 PSPMSR
设置CONTROL
寄存器中的nPRIV
位,立即从线程模式中删除特权正在运行的线程模式代码将成为空闲任务。
关于arm - ARM Cortex-M、MSP 或 PSP 中复位后使用哪个堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52013343/
附上一张照片来解释这个概念,但本质上,我想要一个背景视频或图像,上面有多个 png 像这样分层。 我将如何实现这一目标?我觉得 jit.alphablend 是这个的一个组成部分...... 我也在
我一直在阅读 hyperledger 织物的文档,但我被困在了一些东西上。这一段实际上是什么意思: “ channel 和本地 MSPs 之间的拆分反射(reflect)了组织管理其本地资源(例如对等
我用 Advanced Installer 创建了一个补丁通过使用旧的(目标镜像)msi 和新的(升级镜像)。检查 MSP 文件我发现它包含修改过的和全新的文件。问题是在安装过程中它只安装“添加”的文
我已经在Apple的论坛上阅读了许多帖子,在Cycling '74的论坛上也阅读了很多帖子(我自己的问题都散布在两个论坛上),而且似乎没有人可以帮助我。 我用Max / MSP编写了一个“样本”来采样
对于背景:我有一个非常好的 TeamCity 设置;包含一个 ci 构建和一个使用 WiX 构建我的安装程序并修补所有版本号的发布构建。当我进行新版本构建时,我想针对以前的一组安装程序自动创建 MSP
我正在尝试构建 Microsoft 安装程序更新 (MSP),我希望更新安装程序从原始安装中删除文件。 我已经成功创建了一个新的 msi,在 Orca.exe 中查看时,我可以看到 RemoveFil
我们的团队最近一直在考虑向用户推出一个小的注册表修复程序,以修改一个特定的有问题的 key 。非常简单的东西,只需要更新注册表中的 1 个键/值。 所以目前,我们正在使用 Wix 为产品构建 .msi
我正试图帮助一个 friend 弄清楚是否可以在 Max/MSP javascript 中实现 DSP 算法。他在类里面被告知,他向我寻求帮助,但我找不到任何方法来处理实际 sample 。 长话短说
我正在开发压力测量装置。我使用过 MSP430F133 芯片并使用 IAR 嵌入式工作台。它以 3 个不同的单位显示压力。 我取了 32 个样本并取平均值。 P5上的单位选择,根据选择的单位计算输出值
friend 们,我必须使用计时器输入(项目要求)在 61 微秒插槽中每 14 微秒采样一次输入。 我必须做 8 次才能生成一个字节。更像 UART ,但我将它用于我的硕士项目的单线总线通信。 我编写
Fabric CA 是 MSP 的实现吗? MSP 本身就没有用吗? MSP 和 Fabric CA 的作用是什么?这些功能的区别? 最佳答案 MSP是成员(member)服务提供者 - 支持各种凭证
Steven S. Skiena 在他的算法设计手册一书中提出了以下问题: Now consider the following scheduling problem. Imagine you are
目前我正在开发一个使用 MSI 包部署的项目。要修补该程序,我们只需部署另一个 MSI 安装程序包而不是 MSP。这是解决此问题的有效/高效方法,还是我们应该部署 MSP 补丁包?我有过 MSI 但没
我正在构建一个 Excel 仪表板,我希望它从我的部门 MSP 总体规划中获取数据。 到目前为止,我设法获得了我想要的所有数据,除了子项目的状态日期。 Sub ImportMSPData() Dim
我正在使用带有 MSP-GCC 编译器的最新 CCS。代码如下 #pragma vector=USCI_A1_VECTOR __interrupt void USCI_A1_ISR(void) {..
我应该把 .js 文件放在 Max 的什么地方? 我目前正在使用 Cycling 论坛上此线程的帮助将飞利浦 Hue 照明与 Max 7 链接起来。 https://cycling74.com/for
我一直在阅读 ARM 信息中心的各个部分,试图找到答案,但是文档让我感到困惑,所以我希望这里有人可以提供帮助。 据我所知,Cortex-M 处理器中有两个堆栈: MSP(主堆栈指针) PSP(进程堆栈
我正在 OS X 上尝试 first-network 演示,但出现以下错误。我试过寻找答案。我确实在这里找到了一个,但它似乎适用于 Ubuntu。所有命令都不适用于 OS X。 任何人都可以在 OS
在阅读有关 Hyperledger Fabric 的文档时,我无法理解 MSP 是什么。我真的不清楚 MSP 到底是什么以及它与 CA 有何不同? 我的理解是 CA 颁发证书,MSP 说其中哪些是有效
我使用 TI UniFlash 云工具成功上传了 MSP430G2553 的 Mecrisp Forth 十六进制文件。 (我也使用相同的工具为 MSP430F5529 和 TI Tiva Launc
我是一名优秀的程序员,十分优秀!