# CUI_RTOS **Repository Path**: JasonHu_Code/CUI_RTOS ## Basic Information - **Project Name**: CUI_RTOS - **Description**: 一个适用于运动流程控制的任务调度器,代码只有200多行。可以实现多任务管理,流程控制。 - **Primary Language**: C - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2020-07-22 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CUI_RTOS #### 介绍 一个适用于运动流程控制的任务调度器,代码只有200多行。可以实现多任务管理,流程控制。 #### 软件架构 软件架构说明 利用一个定时器做时间基准。 在主程序的 While 循环中运行一个任务循环链表 tasklink ,这个任务链表执行被挂载到下面的任务。被执行的任务执行完,都会运行 CUI_RTOS_Delayms ,这个函数作用是将该任务从 tasklink 中释放出来,同时加入到定时器链表中进行计时。在定时器中的函数 OS_TimerFunc 会对每一个挂载到他下面的任务进行计时,计时时间到,将该任务重新挂载到tasklink 下面。 如果定时时间到,任务重新挂载到 tasklink 下面,当运行该任务时,会取该任务的下一个节点函数运行,如果没有节点函数,则任务从头开始运行,直到满足删除条件 #### 使用说明 1. 创建一个任务链表: TaskLinkStr tasklink = {0}; 1.5 创建一个时间链表: TimerLinkStr timerlink = {0}; 2. 创建一个任务并绑定定时器timerlink: TaskStr* taskYS = OS_CreatTask(&timerlink); 3. 将该任务添加到任务链表下: OS_AddTask(&tasklink,taskYS); 4. 主循环中放入函数: OS_Task_Run(&tasklink); 4.5 定时器中断中放入函数: OS_TimerFunc(&timerlink); 4.6 填写定时器中断间隔: IRQ_PERIOD 单位 ms 5. ① 将一个函数添加到任务中,并指定计时周期: OS_AddFunction(taskYS,FunYS,40); 该任务会以40ms的周期运行。 ② 如果想达到一个条件让该任务中断执行则要使用条件判断函数添加: OS_AddJudegeFunction(taskYS,FunYS,40,Jugefun); 当布尔函数Jugefun返回值为真时,中断函数执行,并删除taskYS链表下,该任务之前的所有挂载在该链表下的函数。 ③ 如果要重复执行任务链表tasklink下的某一段函数,则可以使用函数: OS_AddCycleFunction(TaskStr* task,TYPE_NUMBER num); num是重复执行的次数。任务会重复执行这个函数添加位置之前的所有链表下的函数,直到达到次数,并删除这些函数。 ④ 如果想删除任务链表下所有函数,则 OS_AddFunction(taskYS,FunYS,0); 该函数的时间周期应设置为0, 该函数会运行一次。在这之前,该任务链表下所有函数都会被删除。 #### 移植说明 1. 该软件使用了内存管理和单链表和循环链表。链表最好使用提供的文件。内存管理可以使用其他的进行移植。