https://gitee.com/gitee_caowent/sloop-lite

项目概述

sloopLite是一个轻量级嵌入式裸机单线程协作式任务调度管理框架。它提供了简单易用的任务管理API,适合资源受限的嵌入式应用场景。

技术架构

核心设计理念

  • 协作式调度:任务主动让出CPU,而非抢占式
  • 单线程模型:基于主循环实现,资源消耗低
  • 时间驱动:使用系统心跳(tick)驱动任务执行
  • 模块化设计:清晰的分层结构,便于扩展和维护

系统组成

  1. 内核层 (project/user/sloop/kernel/)

    • 任务调度器核心逻辑
    • 时间管理
    • CPU负载计算
    • 系统心跳监测
  2. 应用层 (project/user/app/)

    • 任务定义和实现
    • 业务逻辑
    • 配置文件
  3. 驱动层 (project/Drivers/)

    • STM32 HAL库
    • CMSIS标准库
  4. 开发环境 (project/MDK-ARM/)

    • Keil MDK-ARM项目文件
    • 编译配置
    • 链接脚本

核心功能

任务管理

  • 超时任务:延迟指定时间后执行一次
  • 周期任务:按照固定时间间隔重复执行
  • 多次任务:执行指定次数的周期任务
  • 并行任务:在主循环中并行执行
  • 单次任务:只执行一次,适合中断中复杂逻辑下放
  • 互斥任务:通过函数指针实现任务切换

系统服务

  • RTT日志输出:基于SEGGER RTT的高效日志系统
  • CPU负载监测:实时计算和显示系统负载
  • 系统心跳:定期输出系统状态
  • 非阻塞等待:支持任务间的延时和同步

代码质量评估

优点

  1. 简洁易用的API:如sl_cycle_start()sl_goto()等函数直观易懂
  2. 良好的代码结构:分层设计清晰,模块职责明确
  3. 丰富的注释:关键函数和流程都有详细说明
  4. 可配置性:通过sl_config.h可调整任务数量上限
  5. 资源效率:代码大小约18KB,RAM使用约3.75KB

局限性

  1. 单线程限制:不支持真正的并行执行,任务需要主动让出CPU
  2. 实时性受限:协作式调度可能导致任务响应延迟
  3. 硬件依赖性:目前仅支持STM32G0系列
  4. 任务数量限制:每种任务类型都有预定义的数量上限

应用场景

sloopLite适合以下应用场景:

  • 资源受限的嵌入式设备
  • 对实时性要求不高的应用
  • 需要简单任务管理的项目
  • 学习嵌入式任务调度的教育项目
  • 低功耗应用开发

代码示例

// 周期任务示例
void task_demo(void)
{
    _INIT; /* 任务初始化 */
    
    // 每秒执行一次test函数
    sl_cycle_start(1000, test);
    
    // 3秒后停止测试
    sl_timeout_start(3000, stop_test);
    
    _FREE; /* 任务释放 */
    
    // 清理资源
    sl_cycle_stop(test);
    
    _RUN; /* 任务运行逻辑 */
    
    // 等待测试结束
    if (sl_wait_bare())
        return;
    
    // 切换到空闲任务
    sl_goto(task_idle);
}

总结

sloopLite是一个设计精良的轻量级嵌入式任务调度框架,它以简洁的API和高效的资源利用为特点,适合资源受限的嵌入式应用开发。虽然在实时性和并行处理方面有一定局限性,但对于大多数简单嵌入式应用来说,它提供了足够的功能和灵活性。

该框架的设计理念和实现方式也为学习嵌入式系统开发和任务调度提供了很好的参考。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐