moana_std 0.1.4

moana 用户标准库
Documentation
//! 基本操作 syscall 用户态接口

use moa_uapi::{
    sysnr::{SYSNR_EXIT, SYSNR_SLEEP, SYSNR_TASK_SELF, SYSNR_YIELD},
    task::{ExitFlags, TaskId},
    types::Timeout,
};

/// 让出 CPU 时间片
pub fn yield_now() {
    unsafe { super::arch::syscall0(SYSNR_YIELD) };
}

/// 阻塞当前任务指定时长
pub fn sleep(duration: Timeout) {
    unsafe { super::arch::syscall1(SYSNR_SLEEP, duration.raw() as usize) };
}

/// 退出当前任务
///
/// `flags` 控制退出范围和通知类型。
pub fn exit(code: i32, flags: ExitFlags) -> ! {
    unsafe {
        super::arch::syscall2(SYSNR_EXIT, code as usize, flags.bits() as usize);
    }
    unreachable!()
}

/// 返回当前任务 ID
pub fn task_self() -> TaskId {
    let ret = unsafe { super::arch::syscall0(SYSNR_TASK_SELF) };
    TaskId::from_raw(ret as usize)
}