Crates.io | irq |
lib.rs | irq |
version | 0.2.3 |
source | src |
created_at | 2020-01-19 18:59:41.552866 |
updated_at | 2020-03-08 13:18:51.618677 |
description | Scoped interrupt handlers and interrupt locks for sharing data |
homepage | |
repository | https://github.com/jonas-schievink/irq.git |
max_upload_size | |
id | 200208 |
size | 38,229 |
This crate provides utilities for handling interrupts on embedded devices.
Please refer to the changelog to see what changed in the last releases.
Add an entry to your Cargo.toml
:
[dependencies]
irq = "0.2.3"
Check the API Documentation for how to use the crate's functionality. A small example showcasing the Scoped Interrupts API is provided below:
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.
});
}
This crate targets stable Rust. No guarantees are made beyond that, so the minimum supported version might be bumped as needed.
The MSRV is also explicitly tested against in .travis.yml.