UCOSIII操作系统——任务篇(2)相关API函数

UCOSIII其他内容导航不迷路
UCOSIII操作系统-简介
UCOSIII操作系统——任务篇(1)创建任务
UCOSIII操作系统——任务篇(2)相关API函数
UCOSIII操作系统——系统初始化篇(1)系统初始化
UCOSIII操作系统——系统初始化篇(2)CPU,SysTick,内存初始化
UCOSIII操作系统——硬件初始化篇(1)硬件初始化以及开始运行系统
正在更新整理…

说在前面:
这个内容不适合0基础的人,因为这里只讲了应用层面的东西,并没有深入内核讲解,所以要从零开始学UCOSIII的朋友,可以先去学完入门内容,再来观看这个笔记加深印象。
这篇文章是个人学习整理,如有错误请指正

UCOSIII操作系统——任务篇(2)相关API函数

常用的任务函数

函数 描述
OSTaskCreate() 创建任务
OSTaskDel() 删除任务
OS_TaskSuspend() 任务挂起
OSTaskResume() 任务恢复

创建任务->OSTaskCreate()

该函数在任务篇(1)创建任务已经讲解,这里就不再赘述。

删除任务->OSTaskDel()

任务删除函数原型

void  OSTaskDel (OS_TCB  *p_tcb,		// 要删除的任务控制块指针
                 OS_ERR  *p_err)		// 返回错误类型
  • OSTaskDel()用于删除-一个任务。 当一个任务删除另外-一个任务时,形参为要删除任务创建时返回的任务句柄(控制块TCB),如果是删除自身,则形参为NULL。要想使用该函数必须在os_ cfg.h 中把OS_ CFG_ TASK_ DEL_ EN宏定义配置为1,删除的任务将从所有就绪,阻塞,挂起和事件列表中删除。
  • 删除任务是说任务将返回并处以删除(休眠)状态,任务的代码不再被uCOS调用,删除任务不是删除代码,删除任务和挂起任务有些相似,其实有着本质的区别,根本来说,最大的不同就是删除任务队任务控制块的操作,我们知道在任务创建的时候,需要给每个任务分配一个任务控制块,这个任务控制块存储有关这个任务重要的信息,对任务间有至关重要的作用,挂起任务根本不会动任务控制块,但删除任务就会把任务控制块进行初始化,这样子关于任务的任何信息都被抹去。注意了,删除任务并不会释放任务的堆栈空间。
  • 虽然UCOSI允许用户在系统运行的时候来删除任务,但是应该尽量的避免这样的操作,如果多个任务使用同一个共享资源,这个时候任务A正在使用这个共享资源,如果删除了任务A,这个资源并没有得到释放,那么其他任务就得不到这个共享资源的使用权,会出现各种奇怪的结果。

任务删除函数使用实例

  • 删除自身
OSTaskDel((OS_TCB*)0,&err);	//删除start_task任务自身,第一个参数为0或者NULL
  • 删除任务
OSTaskDel( & AppTaskLed1TCB, & err ); /* 删除LED 任务! */

任务删除函数一般使用情况

一般用在启动任务,即StartTask,因为启动任务一般就是初始化CPU,内存,创建其他任务函数,创建信号量,消息队列等东西的任务,所以只要一开始运行一次就可以删除了。

任务挂起->OS_TaskSuspend()

任务挂起函数原型

void   OSTaskSuspend (OS_TCB  *p_tcb,	// 要挂起的任务控制块指针
                      OS_ERR  *p_err)	// 返回错误类型
  • 挂起指定任务。被挂起的任务绝不会得到CPU的使用权,不管该任务具有什么优先级。任务可以通过调用OS_TaskSuspend)函数都可以将处于任何状态的任务挂起,被挂起的任务得不到CPU的使用权,也不会参与调度,它相对于调度器而言是不可见的,除非它从挂起态中解除。任务挂起是我们经常使用的一个函数,想要使用的就必须将宏定义OS_ CFG_ TASK_ SUSPEND_ EN使能,这样在编译的时候才会包含OS _TaskSuspend()这个函数。
  • 我们可以多次调用OSTaskSuspend()函数来挂起一个任务,因此我们需要调用同样次数
    OSTaskResume()函数才可以恢复被挂起的任务,这一点非常重要

任务恢复->OSTaskResume()

任务恢复函数原型

void  OSTaskResume (OS_TCB  *p_tcb,		// 要恢复的任务控制块指针
                    OS_ERR  *p_err)		// 返回错误类型
  • 既然有任务的挂起,那么当然一样有恢复,不然任务怎么恢复呢,OSTaskResume()函数用来恢复被OSTaskSuspend()函数挂起的任务,任务恢复就是让挂起的任务重新进入就绪状态,恢复的任务会保留挂起前的状态信息,在恢复的时候根据挂起时的状态继续运行。如果被恢复任务在所有就绪态任务中,处于最高优先级列表的第一位,那么系统将进行任务上下文的切换。
  • OSTaskResume()函 数是唯一能恢复被挂起任务的函数。如果被挂起的任务还在等待别的内核对象,比如事件标志组、信号量、互斥信号量、消息队列等,即使使用OSTaskResume(函数恢复了被挂起的任务,该任务也不一定能立即运行,该任务还是要等相应的内核对象,只有等到内核对象后才可以继续运行。

以上就是任务操作的基本内容啦,有这些大概也就够用了。
多看一些示范历程,从里面学到实际的应用操作
比如STM32系列的,可以参考正点原子,和野火的例程,相关代码都在他们各自的论坛都可以下载到哦,B站还有他们的UCOSIII的视频,建议可以两个视频结合着看,可以领悟不同的东西
在这里插入图片描述

发布了10 篇原创文章 · 获赞 1 · 访问量 125

猜你喜欢

转载自blog.csdn.net/iiinoname/article/details/105179853