打印
[PIC®/AVR®/dsPIC®产品]

SVCall与PendSV

[复制链接]
1634|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heisexingqisi|  楼主 | 2024-4-16 22:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SVCall 异常由 Supervisor 调用触发 () 指令。它的处理程序是 ,其 IRQ 编号为 ,它始终处于启用状态并具有可配置性 优先权。SVCSVCall_HandlerSVCall_IRQn
PendSV 是一种内部中断,通常用于强制上下文切换 在软件中。它的处理程序具有 IRQ 编号。它始终处于启用状态并具有可配置的优先级, 通常配置为最低优先级。PendSV_HandlerPendSV_IRQn
您可以使用以下代码触发 PendSV 中断。
SCB->ICSR = SCB_ICSR_PENDSVSET_Msk;

使用特权

评论回复
沙发
heisexingqisi|  楼主 | 2024-4-16 22:31 | 只看该作者
SysTick 是一个内部中断,用于处理由 系统计时器。它的处理程序是 IRQ 编号 ,它始终处于启用状态并具有可配置的优先级。这 还可以使用以下代码通过软件触发处理程序。SysTick_HandlerSysTick_IRQn

SCB->ICSR = SCB_ICSR_PENDSTSET_Msk;

使用特权

评论回复
板凳
heisexingqisi|  楼主 | 2024-4-16 22:31 | 只看该作者
使用 Cortex-M 设备时,硬件会保存并恢复参数 寄存器(r0 到 r3)、IP 寄存器 (r12)、链路寄存器 (r14)、返回地址、 当中断发生并返回时,程序状态会注册。其他寄存器 与任何其他函数一样,中断处理程序函数必须保留。这 编译器将自动对 C 函数执行此操作。如果你编写自己的处理程序 组装时,请务必遵循过程调用标准。

在上下文切换期间可能会发生其他异常。为此所做的工作 在硬件中处理。有关详细信息,请参阅相应的体系结构 参考手册,但实质上,上下文切换不会发生两次。相反 在另一个中断设置为挂起的情况下运行优先级较高的中断。

当面向 Cortex-A 设备时,编译器必须生成应用程序代码以保存和 还原设备上下文;但是,浮点单元 (FPU) 寄存器***不会 由中断处理程序保存。这些设备上需要从以下位置使用 FPU 的应用程序 中断上下文需要定制的中断处理程序。考虑写入中断 处理程序,让他们推送所有需要保存的寄存器,调用 处理程序的函数,恢复寄存器,然后返回。此组件 包装器函数需要应用于每个中断处理程序(或至少那些 使用 FPU 寄存器)。在这种情况下,C 函数不应设置该属性。寄存器 r0-r12、r14、d0-d7、d16-d32 和 如果状态寄存器已在处理程序中使用,则必须保存它们。这是 可能需要保存大量寄存器,这将需要 大量的堆栈空间来保存它们,以及大量的 执行该保留代码的时间。interrupt

使用特权

评论回复
地板
heisexingqisi|  楼主 | 2024-4-16 22:34 | 只看该作者
从生成中断到执行 ISR 的第一条指令之间的时间称为中断延迟。有两个因素会影响它。

中断的处理器服务 - 这是处理器识别中断并分支到关联 ISR 所需的时间。
保存 ISR 代码上下文 - 在进入 ISR 之前在堆栈上保存寄存器所需的时间。
在大多数情况下,这些完全由 Cortex-M 设备上的硬件决定。特别是,硬件将上下文保存在堆栈上,无需编译器生成此类代码。因此,如果 ISR 的编写方式使其不需要保存硬件保存的寄存器之外的任何寄存器,则 ISR 的中断延迟完全取决于硬件。

在 Cortex-A 设备上,保存上下文所需的时间取决于输入时保存的寄存器数量,该寄存器数量由构成函数的代码决定。如果需要,必须根据具体情况确定此时间。

使用特权

评论回复
5
forgot| | 2024-4-17 17:26 | 只看该作者
PendSV 是一种内部中断,通常用于强制上下文切换 在软件中。它的处理程序具有 IRQ 编号

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

131

主题

2604

帖子

2

粉丝