Created
July 14, 2020 10:02
-
-
Save strom-und-spiele/a77686be36dd2dcc2dfac2d10a4f3924 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#![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