Skip to content

Instantly share code, notes, and snippets.

@strom-und-spiele
Created July 14, 2020 10:02
Show Gist options
  • Save strom-und-spiele/a77686be36dd2dcc2dfac2d10a4f3924 to your computer and use it in GitHub Desktop.
Save strom-und-spiele/a77686be36dd2dcc2dfac2d10a4f3924 to your computer and use it in GitHub Desktop.
#![no_std]
#![no_main]
use core::{cell::RefCell, ops::DerefMut};
use cortex_m::{
interrupt::{free, Mutex},
peripheral::syst::SystClkSource,
};
use cortex_m_rt::{entry, exception};
// own crates
use simple_scheduler::{self, Scheduler};
use log_to_open::{LogData, Logger};
type MexO<T> = Mutex<RefCell<Option<T>>>;
static SCHEDULER: MexO<Scheduler> = Mutex::new(RefCell::new(None));
// would have to do create a static for all ressources I want to access in Tasks
static LOGGER: MexO<Logger> = Mutex::new(RefCell::new(None));
#[entry]
fn main() -> ! {
//peripheral setup like ADC, DMA, Pins,…
let mut logger = Logger::new(…);
free(|cs| LOGGER.borrow(cs).replace(Some(logger)));
let trigger_logger = simple_scheduler::Task {
callback: &mut || {
free(|cs| {
if let Some(ref mut logger) = LOGGER.borrow(cs).borrow_mut().deref_mut() {
logger.trigger().unwrap_or(());
}
});
},
interval: simple_scheduler::Repeat::Everytime,
};
// all the other tasks...
let mut scheduler = Scheduler::new();
scheduler.add_task(trigger_logger);
free(|cs| SCHEDULER.borrow(cs).replace(Some(scheduler)));
// enable exception
loop {};
}
#[exception]
fn SysTick() {
free(|cs| {
if let Some(ref mut scheduler) = SCHEDULER.borrow(cs).borrow_mut().deref_mut() {
scheduler.trigger();
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment