uCOS-III操作系统简单分析

源码获取

源码下载地址:https://www.micrium.com。

源码需要自己去网站里面找,也可以在网站里面找一个开发板的例子,也就包括了源码的。


任务讲解


1.任务怎样创建来的?

编写一个函数,定义为:OSTaskCreate(),里面需要包含参数:任务结构体,要执行的函数、任务的名称、栈的大小、当前任务的优先级,栈数组等。


2.任务的私有信息需要怎么存放?

定义一个函数,命名为:OSTaskStkInit(),里面包含的就是xPSR、PC、LR、R12、R3、R2、R1、R0,R11, R10, R9, R8, R7, R6, R5 and R4等的初始化。uCOS-III,rtx,rt-thread在这上面的处理都是相同的,所以也没什么好多说的了。

所以,这一路分析下来,基本上套路没差。


3.任务怎么切换?

对于系统运行,要执行第一个任务,可以调用函数:OSStart(),实际是调用OSStartHighRdy();这个函数是使用汇编编写的,在里面找到最高任务,然后跳转过去运行,而运行堆栈信息也切换到psp中。

之后则是多个任务之间进行调度。

在普通任务中,可以调用函数OSTimeDly(),其实就是调用OSCtxSw(),需要设置PENDSV位,这样就能做到PENDSV中断产生,然后切换到应该切换到的任务中。

在中断服务函数中, 可以调用OSIntExit(),跟普通任务不同,它会调用到OSIntCtxSw(),但是它跟OSCtxSw()内容一样,也就能切换任务了。


4.访问同一个资源(变量)如何处理?

对于uCOS-III处理起来也很简单了,直接粗暴的操作PRIMASK。

从这些rtos中的代码来看,应该只有uCOS-III写的最浅显易懂了,怪不得市面上分析它的代码的书籍特别多。

本篇持续更新。。。


分享到:


相關文章: