# cotOs **Repository Path**: samsparks/cot_os ## Basic Information - **Project Name**: cotOs - **Description**: 嵌入式设备中利用setjmp/longjmp实现一个简单的查询式协作多任务调度系统 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 16 - **Created**: 2024-01-24 - **Last Updated**: 2024-01-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 查询协作式多任务系统 #### 介绍 该任务系统使用了标准库头文件 ``中的 `setjmp` 和 `longjmp`两个函数,用其构建了一个简单的查询式协作多任务系统,无需使用定时器进行任务切换。 其特点有: - 无任务优先级和抢占式的功能。 - 任务切换的时机完全取决于正在运行的任务,体现**协作**。 - 每个任务都可以设置自己的栈空间大小。 - 查询式的调度方式,当前任务切换时,查询下个任务是否需要执行。 - 移植性强,只需要修改设置栈和获取栈的宏即可。 相对于**时间片论法**的任务调度来说,查询式协作多任务系统有以下特点: - 无需使用定时器做为任务调度。 - 每个任务可以阻塞等待。 - 设置任务的栈空间大小。 - 当前任务可以在适当的时机(条件不满足时)切换到下一个任务,带条件满足继续执行后续代码,无需等待下一个任务周期才能执行,充分利用资源 - 相对来说可以不用为了任务执行时间考虑太多的设计优化 相对于**OS操作系统**来说,查询式协作多任务系统有以下特点: - 没有任务优先级抢占式的功能,因此临界资源(中断除外)和优先级反转的问题也不存在 - 允许用户或应用程序根据需要自由地切换到下一个就绪任务 - 通过自主调度和管理任务,查询式协作多任务系统可以提高工作效率 - 没有操作系统的复杂 #### 软件架构 #### 使用说明 demo代码链接:[stm32 菜单效果demo](https://gitee.com/cot_package/demo_stm32) 1. 使用前初始化函数 cotOs_Init > 提供获取系统毫秒级回调函数 > 2. 通过函数 cotOs_Creat 创建任务,并设置预留的栈大小 3. 最后一切准备就绪调用cotOs_Start启动多任务系统 > 该函数不会退出,因此最后调用 > 4. 通过 cotOs_WaitFor 或者 cotOs_WaitFor_Cond 切换到下一个就绪任务进行执行 #### 关于作者 1. CSDN 博客 [大橙子疯](https://blog.csdn.net/qq_24130227?spm=1010.2135.3001.5343) 2. 联系邮箱 `const_zpc@163.com` 3. 了解更多可关注微信公众号 ![大橙子疯嵌入式](微信公众号.jpg)