作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<分区>
我正在将玩具应用程序移植到 RTFM框架,并且很难弄清楚如何通过 GPIO 触发中断。
fn init(p: init::Peripherals, _r: init::Resources) -> init::LateResources {
let dp: stm32f103xx::Peripherals = p.device;
let mut rcc = dp.RCC.constrain();
let mut gpioa = dp.GPIOA.split(&mut rcc.apb2);
let int = gpioa.pa0.into_floating_input(&mut gpioa.crl);
dp.EXTI.imr.write(|w| w.mr0().set_bit()); // unmask the interrupt (EXTI)
dp.EXTI.ftsr.write(|w| w.tr0().set_bit()); // trigger interrupt on falling edge
init::LateResources {
EXTI: dp.EXTI,
INT: int
}
}
fn idle(t: &mut Threshold, mut r: idle::Resources) -> ! {
loop { rtfm::wfi(); }
}
fn exti0(_t: &mut Threshold, mut r: EXTI0::Resources) {
// never called
}
此设置使我能够触发中断,但在应该调用处理程序时有一个 SEGV。我转储了二进制文件,在 INTERRUPTS 部分中,ext0 中断 8000058 指向地址 080024e7。我在二进制文件中找不到与 addr2line 对应的函数,所以它可能是链接器错误?
我的印象是 RTFM 将中断映射到任务名称,我确实有一个名为“EXTI0”的任务。
我是一名优秀的程序员,十分优秀!