如何从重导出的Crates中使用interrupt!()宏?是否需新增依赖?
解答:无需额外添加依赖,直接复用重导出即可
好问题!你完全不需要在Cargo.toml里额外添加stm32f103xx的依赖,直接通过stm32f103xx-hal的重导出就能使用那个interrupt!()宏——这正是 crate 重导出设计的意义之一。
具体怎么用?
因为stm32f103xx-hal已经通过pub extern crate stm32f103xx;把依赖 crate 完整重导出了,你只需要在代码里通过hal的路径引用这个宏就行:
方式1:通过完整路径调用宏
use stm32f103xx_hal::stm32f103xx; // 直接用重导出的crate路径调用宏 stm32f103xx::interrupt!(TIM2, tim2_interrupt_handler); fn tim2_interrupt_handler() { // 你的中断处理逻辑 }
方式2:将宏导入当前作用域(更简洁)
// 把宏直接导入到当前作用域 use stm32f103xx_hal::stm32f103xx::interrupt; interrupt!(TIM2, tim2_interrupt_handler); fn tim2_interrupt_handler() { // 你的中断处理逻辑 }
为什么能这么做?
Cargo会自动处理依赖传递:stm32f103xx-hal已经在它的Cargo.toml里声明了对stm32f103xx的依赖,你的项目会间接引入这个依赖 crate。而pub extern crate的作用就是把依赖 crate 的所有公共项(包括标记为#[macro_export]的宏)暴露给hal的使用者,所以你不需要重复添加依赖。
如果遇到宏找不到的极端情况,大概率是stm32f103xx里的interrupt!()宏没被正确导出,但根据嵌入式HAL crate的常规设计,这类核心中断宏肯定是对外导出的,所以不用太担心。
内容的提问来源于stack exchange,提问作者Michael Böckling
相关产品推荐
相关产品推荐

