forked from ROMEO/obsw
tasks usage is a bit more sane now; added sif macro
This commit is contained in:
@ -1,11 +1,30 @@
|
||||
#![no_std]
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! sifln {
|
||||
($(,)?) => (
|
||||
let mut stdout = Outbytes {};
|
||||
writeln!(stdout);
|
||||
);
|
||||
($($arg:tt)*) => (
|
||||
let mut stdout = Outbytes {};
|
||||
let _alwaysok = writeln!(stdout, $($arg)*);
|
||||
);
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! sif {
|
||||
($($arg:tt)*) => (
|
||||
let mut stdout = Outbytes {};
|
||||
let _alwaysok = write!(stdout, $($arg)*);
|
||||
);
|
||||
}
|
||||
|
||||
use core::panic::PanicInfo;
|
||||
|
||||
#[panic_handler]
|
||||
fn panic(panic: &PanicInfo<'_>) -> ! {
|
||||
let mut stdout = Outbytes {};
|
||||
let _ok = writeln!(&mut stdout, "{}", panic);
|
||||
sifln!("{}", panic);
|
||||
//TODO: stop RTOS, exit if hosted
|
||||
loop {}
|
||||
}
|
||||
@ -15,8 +34,6 @@ type TaskFunction = unsafe extern "C" fn(*mut cty::c_void);
|
||||
extern "C" {
|
||||
fn outbyte(c: cty::c_char);
|
||||
|
||||
//void * createTask(void (* taskFunction)( void * ), void * parameter, void *buffer, size_t buffersize){
|
||||
|
||||
fn createTask(
|
||||
taskFunction: TaskFunction,
|
||||
parameter: *mut cty::c_void,
|
||||
@ -31,12 +48,10 @@ extern "C" {
|
||||
|
||||
#[no_mangle]
|
||||
extern "C" fn rust_main() {
|
||||
let mut stdout = Outbytes {};
|
||||
|
||||
let _ok = writeln!(&mut stdout, "Rust startup");
|
||||
sifln!("Rust startup");
|
||||
mission();
|
||||
|
||||
let _ok = writeln!(&mut stdout, "Mission done");
|
||||
sifln!("Mission done");
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
@ -50,7 +65,7 @@ extern "C" fn task_entry(task_object: *mut cty::c_void) {
|
||||
}
|
||||
|
||||
trait ExecutableObjectIF {
|
||||
fn perform(&self);
|
||||
fn perform(&mut self);
|
||||
}
|
||||
|
||||
struct PeriodicTaskRunner<'a> {
|
||||
@ -104,9 +119,8 @@ struct Handler {
|
||||
}
|
||||
|
||||
impl ExecutableObjectIF for Handler {
|
||||
fn perform(&self) {
|
||||
let mut stdout = Outbytes {};
|
||||
let _ok = writeln!(&mut stdout, "Handler {} performs", self.id);
|
||||
fn perform(&mut self) {
|
||||
sifln!("Handler {} performs", self.id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -129,16 +143,22 @@ fn panics(a: &mut [i32]) {
|
||||
a[4] = 3;
|
||||
}
|
||||
|
||||
fn mission() {
|
||||
let mut stdout = Outbytes {};
|
||||
|
||||
let _ok = writeln!(&mut stdout, "Mission enter");
|
||||
|
||||
|
||||
|
||||
fn mission() {
|
||||
sifln!("Mission enter");
|
||||
|
||||
let mut h1 = Handler {id: 1};
|
||||
let mut h2 = Handler {id: 2};
|
||||
|
||||
let _t1: PeriodicTask<'_, 512> = PeriodicTask::new(&mut h1);
|
||||
|
||||
let _ok = writeln!(&mut stdout, "Mission done delay");
|
||||
let _t2: PeriodicTask<'_, 512> = PeriodicTask::new(&mut h2);
|
||||
|
||||
sifln!("Mission done delay");
|
||||
unsafe {task_delay(3000);}
|
||||
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user