如何将中断从 stm32f30x 中的 cortex-m-rt 重新导出到 运行
How to get the interrupt reexport from cortex-m-rt in stm32f30x to run
我想使用 Rust 和 cortex-m-rt
和 stm32f30x
板条箱为 STM32F3Discovery 开发板编写程序。更准确地说,我想实现一个我想使用 #[interrupt]
属性的外部中断。但是reexport好像有问题
cortex-m-rt documentation on interrupts 表示不应直接使用 #[interrupt]
属性,而应使用设备包中的重新导出:
extern crate device;
// the attribute comes from the device crate not from cortex-m-rt
use device::interrupt;
#[interrupt]
fn USART1() {
// ..
}
事实上,stm32f3x crate 的文档显示 cortex-m-rt crate 中的这个属性被重新导出。然而,编译:
#![no_main]
#![no_std]
use cortex_m_rt::entry;
extern crate stm32f30x;
use stm32f30x::interrupt;
或
#![no_main]
#![no_std]
use cortex_m_rt::entry;
use stm32f30x::interrupt;
报错
error[E0432]: unresolved import `stm32f30x::interrupt`
--> src\main.rs:9:5
|
9 | use stm32f30x::interrupt;
| ^^^^^^^^^^^---------
| | |
| | help: a similar name exists in the module (notice the capitalization): `Interrupt`
| no `interrupt` in the root
我不知道为什么会这样,因为 example I followed 也是如此。我在 Cargo.toml 中的依赖项如下所示:
[dependencies]
stm32f30x = "0.8.0"
cortex-m-rt = "0.6.3"
cortex-m = "0.6.3"
非常感谢您的帮助:)
您需要启用 stm32f30x
crate 的 rt
功能。
简而言之,像这样更改您的依赖项:
[dependencies]
stm32f30x = { version = "0.8.0", features = ["rt"] }
cortex-m-rt = "0.6.3"
cortex-m = "0.6.3"
功能未出现在 "Features flags" page, is because the release is older than "Feature flags" itself (PR #1144 上的原因),这就是页面提到“此版本不提供功能标志数据”的原因。
如果文档没有提到功能。如果问题是由功能引起的,那么“最简单”的方法就是知道。是检查是否Cargo.toml for stm32f30x
contains any features. Then after that, look for any feature gates. In this case, if you look in lib.rs at the re-export,那么你会看到以下内容:
#[cfg(feature = "rt")]
pub use self::Interrupt as interrupt;
我想使用 Rust 和 cortex-m-rt
和 stm32f30x
板条箱为 STM32F3Discovery 开发板编写程序。更准确地说,我想实现一个我想使用 #[interrupt]
属性的外部中断。但是reexport好像有问题
cortex-m-rt documentation on interrupts 表示不应直接使用 #[interrupt]
属性,而应使用设备包中的重新导出:
extern crate device;
// the attribute comes from the device crate not from cortex-m-rt
use device::interrupt;
#[interrupt]
fn USART1() {
// ..
}
事实上,stm32f3x crate 的文档显示 cortex-m-rt crate 中的这个属性被重新导出。然而,编译:
#![no_main]
#![no_std]
use cortex_m_rt::entry;
extern crate stm32f30x;
use stm32f30x::interrupt;
或
#![no_main]
#![no_std]
use cortex_m_rt::entry;
use stm32f30x::interrupt;
报错
error[E0432]: unresolved import `stm32f30x::interrupt`
--> src\main.rs:9:5
|
9 | use stm32f30x::interrupt;
| ^^^^^^^^^^^---------
| | |
| | help: a similar name exists in the module (notice the capitalization): `Interrupt`
| no `interrupt` in the root
我不知道为什么会这样,因为 example I followed 也是如此。我在 Cargo.toml 中的依赖项如下所示:
[dependencies]
stm32f30x = "0.8.0"
cortex-m-rt = "0.6.3"
cortex-m = "0.6.3"
非常感谢您的帮助:)
您需要启用 stm32f30x
crate 的 rt
功能。
简而言之,像这样更改您的依赖项:
[dependencies]
stm32f30x = { version = "0.8.0", features = ["rt"] }
cortex-m-rt = "0.6.3"
cortex-m = "0.6.3"
功能未出现在 "Features flags" page, is because the release is older than "Feature flags" itself (PR #1144 上的原因),这就是页面提到“此版本不提供功能标志数据”的原因。
如果文档没有提到功能。如果问题是由功能引起的,那么“最简单”的方法就是知道。是检查是否Cargo.toml for stm32f30x
contains any features. Then after that, look for any feature gates. In this case, if you look in lib.rs at the re-export,那么你会看到以下内容:
#[cfg(feature = "rt")]
pub use self::Interrupt as interrupt;