3 个版本
0.2.3 | 2020年3月8日 |
---|---|
0.2.2 | 2020年2月16日 |
0.2.1 | 2020年1月26日 |
0.2.0 |
|
0.1.0 |
|
#12 in #handling
32KB
396 行
IRQ – 用于编写中断处理程序的实用工具
此软件包提供了用于处理嵌入式设备中断的实用工具。
请参阅变更日志以了解最新版本中的更改。
特性
- 动态和原子注册、零分配的中断处理程序。
- 允许将数据移动到中断处理程序中,并在处理程序之间共享数据。
- 完全平台无关,不需要原子交换操作(例如在 thumbv6 目标上工作)。
用法
在您的 Cargo.toml
中添加条目
[dependencies]
irq = "0.2.3"
有关如何使用软件包功能的信息,请参阅API 文档。以下提供了一个展示作用域中断 API 的小示例。
use irq::{scoped_interrupts, handler, scope};
use mock_pac::interrupt;
// Hook `INT0` and `INT1` using the `#[interrupt]` attribute imported above.
scoped_interrupts! {
enum Interrupt {
INT0,
INT1,
}
use #[interrupt];
}
fn main() {
// Define data to be used (via move or borrow) by the interrupt handlers.
let mut i = 0;
let shared = [0, 1, 2];
// Define handlers using the `handler!` macro.
handler!(int0 = || i += shared[1]);
handler!(int1 = || println!("{}", shared[2]));
// Create a scope and register the handlers.
scope(|scope| {
scope.register(Interrupt::INT0, int0);
scope.register(Interrupt::INT1, int1);
// The interrupts stay registered for the duration of this closure.
// This is a good place for the application's idle loop.
});
}
Rust 版本支持
此软件包针对稳定 Rust。对此之外不做保证,因此可能需要根据需要提高最低支持版本。
在.travis.yml 中明确测试了 MSRV。