如何在 Rust 中更改 cortex-m4 处理器的异常优先级?
How to change exception priority on cortex-m4 processor in Rust?
我想为处理器内部异常设置中断优先级。 cortex_m
crate 提供了对 NVIC 控制寄存器的轻松访问。具体来说,有一种方法可以让我为每个中断设置优先级。
let mut p = cortex_m::Peripherals::take().unwrap();
p.NVIC.set_priority(...);
set_priority
要求我传递一个参数,指定我打算修改哪个中断的优先级。假设我想更改 PendSV
的优先级。但是,传入 cortex_m::peripheral::scb::Exception::PendSV
将不起作用,因为它没有实现所需的特征绑定。
我在 STM32F407VGT6 板上开发,所以我也查看了 stm32f4
箱子,但我没有找到任何可以帮助的枚举定义。
我应该编写自己的枚举来实现所需的特征,以便它可以指定中断号,还是已经有一些现有的板条箱可以让它工作?
根据 InterruptNumber
, implementing this Trait is responsibility of the PAC (peripheral access crate) provider. Looking at the stm32f4
crate 的文档,其最新版本(截至撰写本文时为 0.12.1
)仍依赖于 cortex-m >=0.5.8, <0.7
,这意味着开发人员可能尚未升级到新 API 了。
旧的 API 使用 bare_metal::Nr
特性,一些 PAC 仍然依赖它。
我在 cortex-m-quickstart 指南中找到了一个使用旧 NVIC API 的示例。
我建议您按照 PAC 的依赖要求降级到 cortex-m >=0.5.8, <0.7
并留意 stm32f4
.
的更新
我想为处理器内部异常设置中断优先级。 cortex_m
crate 提供了对 NVIC 控制寄存器的轻松访问。具体来说,有一种方法可以让我为每个中断设置优先级。
let mut p = cortex_m::Peripherals::take().unwrap();
p.NVIC.set_priority(...);
set_priority
要求我传递一个参数,指定我打算修改哪个中断的优先级。假设我想更改 PendSV
的优先级。但是,传入 cortex_m::peripheral::scb::Exception::PendSV
将不起作用,因为它没有实现所需的特征绑定。
我在 STM32F407VGT6 板上开发,所以我也查看了 stm32f4
箱子,但我没有找到任何可以帮助的枚举定义。
我应该编写自己的枚举来实现所需的特征,以便它可以指定中断号,还是已经有一些现有的板条箱可以让它工作?
根据 InterruptNumber
, implementing this Trait is responsibility of the PAC (peripheral access crate) provider. Looking at the stm32f4
crate 的文档,其最新版本(截至撰写本文时为 0.12.1
)仍依赖于 cortex-m >=0.5.8, <0.7
,这意味着开发人员可能尚未升级到新 API 了。
旧的 API 使用 bare_metal::Nr
特性,一些 PAC 仍然依赖它。
我在 cortex-m-quickstart 指南中找到了一个使用旧 NVIC API 的示例。
我建议您按照 PAC 的依赖要求降级到 cortex-m >=0.5.8, <0.7
并留意 stm32f4
.