如何在 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.

的更新