Ucos操作系统的学习
实时操作系统:
任务切换,调度
分式操作系统
不可剥夺型内核
Ucosii嵌入式实时操作系统的源代码分为三部分:与硬件无关的内核代码,与处理器有关的移植代码和用户配置文件。
Ucos最多支持64个任务,优先级分别对应0~63,其中0为最高优先级,系统保留4个最高优先级的任务,和4个最低的优先级任务,所有用户可以使用的任务56个
1.建立任务
a) OSTaskCReat()/OStaskCreat(
i. OStaskCreat(void(*task),void pdata ,OS_STK * post,INTU prio)
1. Task:是指任务代码的指针
2. Pdata:任务开始执行是,传递给任务的参数的指针
3. Post:分配给任务的堆栈的栈顶指针
4. Prior:分配任务的优先级
2, 任务堆栈
a) OS_STK()
i. 每个任务都有自己的堆栈,堆栈必须声明为OS_STK类型,并且连续的内存空间组成。
ii. 可以静态分配和动态分配
3, 堆栈检验
a) OSTaskStkChk()
i. 有时确定任务是要知道堆栈空间的大小,这个函数可以避免分配过多的空间
4. 删除任务OSTask()
a. 指的是任务进入休眠状态,而不是指代码被删除,只是不再被ucos调用。注意:删除任务之前要保证任务并非空闲任务
5. 请求删除任务 OSTaskDelreq()
a.有时任务会占用一些内存或者信号量一类的资源。这时,假如另一个任务试图删除任务,这些被占用的资源就会应为没有被释放而丢失。在这种情况下,需要任务在使用完后释放,然后自己删除。
6. 改变任务的优先级 OSTaskChangePrio()
a.当创建一个任务时,需要利用OSTaskCreate()函数指定任务的优先级,在绝大部分的情况下不需要改变系统运行时的惹任务优先级,但是要是改变的话,OSTaskChangePrio()可以做到.
b.void OSTaskChangePrio(OS_TCB *p_tcp,OS_PRIO prio_new,OS_ERR *err);
i.p_tcp :需要改变优先级任务。如果传入NULL指当前任务的优先级
ii:p_new:新的优先级,该值不能大于或者等于OS_CFG_PRIO_MAX-1de数值,也不能为0.
iii: 存放该函数的错误返回码。
7. OS_FlagDel()
a.用于删除时间标志组。使用时注意,可能同时删除多个任务都依赖于时间标志组
b.OS_OBJ_QTY OSFlagDel(OS_FLAG_GPR *p_grp,OS_OPT opt,OE_ERR *p_err),任务使能开光OS_CFG_FLAG_EN和
OS_CFG_FLAG_EDL_EN
i.p_grp 指向要删除事件的标志组的指针
ii.opt 指定删除事件组的标志
iii.err 错误返回