CUI_RTOS的结构如上图所示。本质是一条环形的任务链表下函数的循环链表。
主函数main中执行 os_runTask(),每次执行则会看环形任务链表下有没有任务链条,如果有则执行该链条的下一个节点函数。
如果任务链条是空的,则会从环形任务链表删除,被摘掉。
任务链条每次执行一个节点函数,如果该函数的时间延时结束,则执行下一个节点函数。如果下一个节点是空,则返回第一个节点执行。
函数 os_runTask() 被执行时,会有下面情形发送:
遍历环形任务链下所有的链条。
如果节点函数的延时时间到,则执行一次下一个节点函数。
目前有三种函数可以被挂载到任务链条下:
① 普通任务函数 ,使用 OS_AddFunction 添加
② 条件函数:使用 OS_AddJudegeFunction 添加
③ 循环次数函数:使用 OS_AddCycleFunction 添加
依次说明如下:
添加任务函数 : u32 OS_AddFunction(TaskStr* task,osfun fun,u32 time,void* param)
参数: task 任务指针,代表是哪根任务链条。
fun 添加的执行函数。
time time毫秒之后,该节点结束。再次执行到该链条时,会执行下一个节点函数。
time如果等于0,则会删除前面所有节点函数。
param 传递给fun的参数
返回值:新添加的节点函数地址
添加条件函数:OS_AddJudegeFunction(TaskStr* task,osfun fun,u32 time,jugefun funJuge,void* param)
参数: task 任务指针,代表是哪根任务链条。
fun 添加的执行函数。
time time毫秒之后,该节点结束。再次执行到该链条时,会执行下一个节点函数。
funJuge 当该函数返回值为真时,不论延时time有没有结束,都跳出,删除前面所有节点函数后,执行下一个节点函数
param 传递给jugefun 的参数
返回值:新添加的节点函数地址
添加循环次数函数:u32 OS_AddCycleFunction(TaskStr* task,TYPE_NUMBER num)
参数: task 任务指针,代表是哪根任务链条。
num 指该节点之前的节点函数反复执行的次数。执行完成之后,前面所有的节点会被删除,然后接着执行下一个节点函数。
返回值:不需要关心。
添加循环次数函数,并没有添加有意义的函数,功能只是将前面的节点循环几次执行。