cosmetics

This commit is contained in:
Ulrich Mohr 2023-12-08 00:48:32 +01:00
parent 29f1383697
commit efc752637e
4 changed files with 38 additions and 29 deletions

View File

@ -1,12 +1,12 @@
use super::tasks::ExecutableObjectIF;
use super::*;
pub type ObjectId = usize;
pub trait ObjectManager<'a> {
fn get_object(&self, id: ObjectId) -> Option<&'a dyn SystemObject>;
fn get_object(&self, id: ObjectId) -> Result<&'a dyn SystemObjectIF, ()>;
}
pub trait SystemObject: ExecutableObjectIF {
pub trait SystemObjectIF: tasks::ExecutableObjectIF {
fn get_id(&self) -> ObjectId;
fn initialize(&mut self, object_manager: &dyn ObjectManager) -> Result<(),()>;
fn get_command_queue(&self) -> crate::fsrc::queues::MessageQueueSender;
}
fn initialize(&mut self, object_manager: &dyn ObjectManager) -> Result<(), ()>;
fn get_command_queue(&self) -> queues::MessageQueueSender;
}

View File

@ -9,7 +9,7 @@ extern "C" {
stack_size: cty::size_t,
) -> *const cty::c_void;
pub fn get_task_name() -> *const core::ffi::c_uchar;
pub fn get_task_name() -> *const core::ffi::c_char;
pub fn stop_it();

View File

@ -21,7 +21,7 @@ pub trait TaskIF<'a> {
fn get_stack_size(&self) -> cty::size_t;
fn set_handle(&mut self, task_handle: *const cty::c_void);
fn get_handle(&self) -> *const cty::c_void;
fn get_objects(&'a self) -> &'a [&'a mut dyn crate::objectmanager::SystemObject];
fn get_objects(&'a self) -> &'a [&'a mut dyn crate::objectmanager::SystemObjectIF];
fn initialize(&mut self, object_manager: &dyn ObjectManager) -> Result<(), ()>;
}
@ -29,12 +29,12 @@ pub struct PeriodicTask<'a> {
pub stack_size: cty::size_t, //TODO generic type and safety
pub task_handle: *const cty::c_void,
pub period: usize,
pub task_objects: &'a mut [&'a mut dyn crate::objectmanager::SystemObject],
pub task_objects: &'a mut [&'a mut dyn crate::objectmanager::SystemObjectIF],
}
impl<'a> PeriodicTask<'a> {
pub fn new(
objects: &'a mut [&'a mut dyn crate::objectmanager::SystemObject],
objects: &'a mut [&'a mut dyn crate::objectmanager::SystemObjectIF],
stack_size: usize,
period: usize,
) -> PeriodicTask<'a> {
@ -69,7 +69,7 @@ impl<'a> TaskIF<'a> for PeriodicTask<'a> {
fn get_handle(&self) -> *const cty::c_void {
self.task_handle
}
fn get_objects(&'a self) -> &'a [&'a mut dyn crate::objectmanager::SystemObject] {
fn get_objects(&'a self) -> &'a [&'a mut dyn crate::objectmanager::SystemObjectIF] {
self.task_objects
}
fn initialize(&mut self, object_manager: &dyn ObjectManager) -> Result<(), ()> {
@ -89,12 +89,12 @@ pub struct TaskExecutor<'a> {
}
impl<'a> TaskExecutor<'a> {
pub fn run_tasks(&mut self) {
pub fn init_and_run(&mut self) {
let object_manager = TaskObjectManager {
tasks: unsafe { slice::from_raw_parts(self.tasks.as_ptr(), self.tasks.len()) },
};
for task in self.tasks.iter_mut() {
let _ = task.initialize(&object_manager);
let _ = task.initialize(&object_manager).unwrap();
}
drop(object_manager);
for task in self.tasks.iter_mut() {
@ -126,15 +126,15 @@ impl<'a> crate::objectmanager::ObjectManager<'a> for TaskObjectManager<'a> {
fn get_object(
&self,
id: crate::objectmanager::ObjectId,
) -> Option<&'a dyn crate::objectmanager::SystemObject> {
) -> Result<&'a dyn crate::objectmanager::SystemObjectIF, ()> {
for task in self.tasks.iter() {
for object in task.get_objects().iter() {
if object.get_id() == id {
return Some(*object);
return Ok(*object);
}
}
}
None
Err(())
}
}

View File

@ -9,9 +9,13 @@ mod fsrc;
use core::fmt::Write;
use core::panic::PanicInfo;
use fsrc::objectmanager::SystemObject;
use fsrc::objectmanager::SystemObjectIF;
use fsrc::*;
extern "C" {
fn done();
}
#[panic_handler]
fn panic(panic: &PanicInfo<'_>) -> ! {
unsafe {
@ -20,16 +24,21 @@ fn panic(panic: &PanicInfo<'_>) -> ! {
// TODO: Make this unicode-safe
sif!("In Task \"");
unsafe {
let task_name = osal::get_task_name();
let mut offset = 0;
while *task_name.offset(offset) != 0 {
sif!("{}", *task_name.offset(offset) as char);
offset = offset + 1;
let task_name = core::ffi::CStr::from_ptr(osal::get_task_name());
let task_name_utf8 = core::str::from_utf8(task_name.to_bytes());
match task_name_utf8 {
Ok(string) => {
sif!("{}", string);
}
Err(_) => {
sif!("Schei<EFBFBD> Encoding");
}
}
}
sifln!("\":");
sifln!("{}", panic);
//TODO: stop RTOS, exit if hosted
unsafe { done() };
loop {}
}
@ -102,7 +111,7 @@ impl tasks::ExecutableObjectIF for HandlerSender {
}
}
impl SystemObject for Handler {
impl SystemObjectIF for Handler {
fn get_command_queue(&self) -> crate::fsrc::queues::MessageQueueSender {
self.command_queue.get_sender()
}
@ -114,7 +123,7 @@ impl SystemObject for Handler {
}
}
impl SystemObject for HandlerSender {
impl SystemObjectIF for HandlerSender {
fn get_command_queue(&self) -> crate::fsrc::queues::MessageQueueSender {
queues::MessageQueueSender::new()
}
@ -124,8 +133,8 @@ impl SystemObject for HandlerSender {
fn initialize(&mut self, object_manager: &dyn objectmanager::ObjectManager) -> Result<(), ()> {
let other_handler = object_manager.get_object(self.other_handler);
match other_handler {
Some(other) => self.other_handler_queue = other.get_command_queue(),
None => return Err(()),
Ok(other) => self.other_handler_queue = other.get_command_queue(),
Err(_) => return Err(()),
}
Ok(())
}
@ -140,12 +149,12 @@ fn mission() {
};
let mut h2 = HandlerSender {
id: 2,
other_handler: 1,
other_handler: 3,
cycle: 0,
other_handler_queue: queues::MessageQueueSender::new(),
};
let array: &mut [&mut dyn objectmanager::SystemObject] = &mut [&mut h1];
let array: &mut [&mut dyn objectmanager::SystemObjectIF] = &mut [&mut h1];
let mut t1 = tasks::PeriodicTask::new(array, 512, 200);
@ -160,7 +169,7 @@ fn mission() {
tasks: &mut [&mut t1, &mut t2],
};
task_executor.run_tasks();
task_executor.init_and_run();
sifln!("Mission delay");
unsafe {