#![no_std]
#![no_main]
#![feature(error_in_core)]
#![feature(slice_internals)]
mod apps;
mod asm;
mod capabilities;
mod console;
mod hardfault;
mod mpu;
mod panic;
mod peripherals;
mod stdlib;
mod svc;
mod task;
mod timer;
use bsp::entry;
use doa_hallonbrod as bsp;
use capabilities::{init_capabilities, CapType};
use console::init_console;
use task::{init_tasks, with_task_manager};
use peripherals::init_peripherals;
#[entry]
fn main() -> ! {
init_peripherals();
init_console();
init_tasks();
init_capabilities();
let ticks = timer::ticks();
kprintf!("Kernel started: {} ticks\r\n", ticks);
with_task_manager(|tm| {
tm.add_task("shell", apps::shell::shell, &[CapType::ConsoleRead, CapType::ConsoleWrite], 1).expect("shell task");
tm.add_task("keyboard", apps::keyboard::main, &[CapType::Keyboard], 0).expect("keyboard task");
});
unsafe {
task::launch_scheduler()
}
}