当前位置 : 主页 > 编程语言 > java >

[大家的项目] RUST多任务调度系统

来源:互联网 收集:自由互联 发布时间:2022-06-23
xtask github:https://github.com/gqf2008/xtask 可移植多任务调度中间件,用于嵌入式环境,与应用程序一起编译打包,参考FreeRTOS实现。 说明 软件还在开发中,API也相当原始且不稳定 关于工作

xtask

github:https://github.com/gqf2008/xtask

可移植多任务调度中间件,用于嵌入式环境,与应用程序一起编译打包,参考FreeRTOS实现。

说明

  • 软件还在开发中,API也相当原始且不稳定
  • 关于工作原理,代码(包括汇编)中有详细的说明,请先阅读下
  • 如果您有任何建议、想法可以通过提交issues或者通过邮箱(gao.qingfeng#gmail.com)联系到我
  • 如果您有兴趣参与这个项目请提交您的PR
  • 主要功能

    • 单物理线程任务优先级+时间片调度机制
    • 堆内存分配器
    • 二值信号量
    • 计数信号量
    • 信号广播
    • mpmc队列
    • 临界区
    • 互斥锁
    • 软件定时器

    移植的芯片

    • GD32VF103xx
    • STM32F40x
    • STM32F10x
    • CH32V3
    • CH32V2
    • CH32V1

    快速开始

    如果您有一块longan-nano最小系统板,那么example中的例子直接可以跑起来

    [大家的项目] RUST多任务调度系统_串口

     

  • 打开一个终端
    • cd debug/gd32vf103
    • ./openocd.sh
    • 串口调试
    • 把调试器插到usb口
    • window平台需要你找一款串口助手连接串口即可
    • linux或者mac平台执行 screen /dev/$串口设备 57600
    • 打开另外一个终端
    • ./run.sh
    • 如果您能在终端看到任务工作时的日志输出,恭喜您已经成功了

    目录结构

    .
    |____src 源码目录
    |
    |____lib.rs
    |
    |____chip 芯片移植目录
    |
    | |____gd32vf103 gd32vf103vf103移植代码
    | | | |____mod.rs
    | | | |____port.S 汇编代码,中断上下文保存
    | | | |____port.rs 中断处理函数
    | | | |____restore_ctx.S 首次启动恢复任务汇编代码
    | | | |____stdout.rs 串口输出
    | | | |____memory.x 内存布局链接脚本
    | | |____env.rs 移植环境参数
    |
    | |____mod.rs
    | |____port.rs port接口定义
    | |____task.rs 任务定义
    | |____allocator.rs 内存分配器
    | |____timer.rs
    | |____arch 指令集架构,官方嵌入式工程组项目重新导出
    | | |____x86_64
    |
    | | |____mod.rs
    |
    | |____mod.rs
    | | |____riscv
    |
    | | |____mod.rs
    |
    | |____cortex_m
    | | | |____mod.rs
    | |____task
    | | |____executor.rs 单物理线程执行器实现
    |
    | |____scheduler 调度器实现
    | | | |____xtask.rs
    | | | |____idle.rs
    | | | |____xworker.rs
    | | | |____misc.rs
    | | |____scheduler.rs
    |
    |____sync 信号量、通知、队列、临界段等
    |
    | |____semaphore.rs
    | | |____queue.rs
    |
    | |____mod.rs
    | | |____mutex.rs
    |
    | |____notifier.rs
    | | |____broadcast.rs
    |
    |____bsp 板级支持包
    |
    | |____mod.rs
    | | |____longan_nano longan_nano最小系统板
    |
    | | |____mod.rs
    |
    | | |____led.rs
    |
    | | |____lcd.rs
    |
    | | |____hcsr04.rs
    |
    | | |____epd27b.rs
    |
    | | |____kalman.rs
    |
    |____io.rs io读写之类
    |
    |____prelude.rs
    |
    |____time.rs 时间相关函数
    |
    ____.vscode
    | |____settings.json
    |____Cargo.lock
    |
    ____Cargo.toml
    |____hal 依赖的hal库

    移植层接口

    /// 移植层接口定义
    pub trait Portable {
    /// 完全内存屏障
    /// 保证在屏障之前的任何存储操作先于屏障之后的代码执行。
    fn barrier();
    /// 临界区保护函数
    fn free<F, R>(f: F) -> R
    where
    F: FnOnce(&CriticalSection) -> R;
    /// 开全局中断
    fn enable_interrupt();
    /// 关全局中断
    fn disable_interrupt();
    /// 启动调度器
    fn start_scheduler() -> !;
    /// 软中断
    fn irq();
    /// 关闭软中断
    fn disable_irq();
    /// 重置下一次中断时间
    fn reset_systick();
    /// 获取systick
    fn systick() -> u64;
    /// 硬件延时,单位us
    fn delay_us(us: u64);
    /// 保存任务环境到任务栈
    fn save_context(task: &mut Task);
    /// 打印文本函数
    fn printf(str: &str);
    }


    【文章转自韩国多IP服务器 http://www.558idc.com/krzq.html 复制请保留原URL】
    上一篇:【Rust日报】2022-05-14 Rust 中的 Streams 指引
    下一篇:没有了
    网友评论