UCOSIII操作系统

  • UCOSIII操作系统——任务篇(2)相关API函数
    • 常用的任务函数
    • 创建任务->OSTaskCreate()
    • 删除任务->OSTaskDel()
      • 任务删除函数原型
      • 任务删除函数使用实例
      • 任务删除函数一般使用情况
    • 任务挂起->OS_TaskSuspend()
      • 任务挂起函数原型
    • 任务恢复->OSTaskResume()
      • 任务恢复函数原型

UCOSIII其他内容导航不迷路
UCOSIII操作系统-简介
【UCOSIII操作系统】任务篇(1)创建任务
【UCOSIII操作系统】系统初始化篇(1)系统初始化
【UCOSIII操作系统】系统初始化篇(2)CPU,SysTick,内存初始化
【UCOSIII操作系统】硬件初始化篇(1)硬件初始化以及开始运行系统
【UCOSIII操作系统】消息队列篇(1)消息队列
【UCOSIII操作系统】消息队列篇(2)任务消息队列
【UCOSIII操作系统】信号量与互斥量篇(1)信号量
【UCOSIII操作系统】信号量与互斥量篇(2)互斥量
【UCOSIII操作系统】信号量与互斥量篇(3)任务信号量
【UCOSIII操作系统】事件篇
【UCOSIII操作系统】中断管理篇
【UCOSIII操作系统】临界段篇
【UCOSIII操作系统】软件定时器篇
【UCOSIII操作系统】内存管理篇
已完结

说在前面:
这个内容不适合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的视频,建议可以两个视频结合着看,可以领悟不同的东西

【UCOSIII操作系统】任务篇(2)相关API函数相关推荐

  1. FreeRTOS学习笔记【六】——FreeRTOS 任务相关 API 函数

    上一章我们学习了 FreeRTOS 的任务基础知识,本章就正式学习如何使用 FreeRTOS 中有关任务的 API 函数.本来本章想讲解 FreeRTOS 的任务原理知识的,但是很多初学者还没使用过 ...

  2. 2、FreeRTOS任务相关API函数

    1.任务相关的API函数 函数存在于task.c中,主要的函数有: xTaskCreate():使用动态的方法创建一个任务: xTaskCreatStatic():使用静态的方法创建一个任务(用的非常 ...

  3. 【STM32】FreeRTOS 任务相关 API 函数

    文章目录 1 任务创建和删除 API 函数 2 任务创建和删除实验(动态方法) 3 任务创建和删除实验(静态方法) 4 任务挂起和恢复 API 函数 5 任务挂起和恢复实验 1 任务创建和删除 API ...

  4. FreeRTOS任务相关API函数---查询/改变某个任务的优先级+获取全部/某个任务状态信息

    本文是<ALIENTEK STM32F429 FreeRTOS 开发教程>第十一章学习笔记 第一章笔记–FreeRTOS简介与源码下载 第二章笔记–FreeRTOS在STM32F4上移植 ...

  5. 【UCOSIII操作系统】任务篇(1)创建任务

    UCOSIII操作系统 UCOSIII操作系统--任务篇(1)创建任务 一.UCOSIII--任务 简介 二.创建任务流程 1.定义任务栈 2.定义任务控制块TCB 3.定义任务主体函数 4.创建任务 ...

  6. 【UCOSIII操作系统】系统初始化篇(1)系统初始化

    UCOSIII操作系统 UCOSIII操作系统--系统初始化篇(1)系统内部任务 系统初始化函数 UCOSIII默认有5个系统任务: 空闲任务 时钟节拍任务 统计任务 定时任务 中断服务管理任务 UC ...

  7. 【UCOSIII操作系统】系统初始化篇(2)CPU,SysTick,内存初始化

    UCOSIII操作系统 UCOSIII操作系统--系统初始化篇(2)CPU,SysTick,内存初始化 CPU初始化 SysTick初始化 内存初始化 初始化实例 UCOSIII其他内容导航不迷路 U ...

  8. 【UCOSIII操作系统】简介

    UCOSIII操作系统 现在开始整理UCOSIII实时操作系统的内容 UCOSIII 简介 关于UCOSIII的移植 现在开始整理UCOSIII实时操作系统的内容 UCOSIII其他内容导航不迷路 U ...

  9. 剪贴板所有api函数

    编写剪贴板相关程序是收集的相关API函数. (一)ChangeClipboardChain 将剪贴的连接从一个句柄转到下一个句柄. BOOL ChangeClipboardChain( HWND hW ...

  10. 基于API函数的串口通信(方法讲解)

    用到的串口通信编程方法有:使用通信控件.在高级语言中嵌入汇编以及使用API函数.在这几种方法中,使用API函数编写的串口通信程序最为高效.灵活.串口通信编程将用到三种API函数 --串口通信相关API ...

最新文章

  1. javaweb学习总结——Filter高级开发
  2. vector 指针 的指针
  3. jmeter中控制器其中一个访问不到_Jmeter体系结构和运行原理
  4. Mysql大小写敏感的问题 --转
  5. AppBoxFuture(四). 随需而变-Online Schema Change
  6. 测试linux内核镜像,测试Petalinux BSP镜像参考例子
  7. 逃跑吧少年辅助快乐羊儿吧
  8. C++算法学习(动态规划算法)
  9. CUDA文件缺失解决方法——以cudart64_110.dll not found为例
  10. R、Rstudio、Rtools的下载与安装
  11. 微信小程序云数据库调用模板
  12. 无线局域网和蜂窝移动网络_手机连上WiFi之后,你会关闭移动网络吗?这其中大有讲究...
  13. java pgm_如何读取Java中的PGM图像?
  14. 做个jmeter登陆百度网盘的实例
  15. java图片叠加_[原创]JAVA中图片上叠加文字的方法
  16. 第一章 接口测试基础
  17. android旋转的列表,Android利用layer-list实现ProgressBar顺时针及逆时针旋转
  18. c语言中语句开始的标志是,第一个单片机程序(C语言编写)
  19. 为什么深层神经网络难以训练_深度学习与统计力学(III) :神经网络的误差曲面...
  20. CMA软件产品测试报告在哪申请,软件测试费用又是多少?

热门文章

  1. AE拓展工具丨自定义工具栏 快速嵌入表达式
  2. 抓包教程(安卓抓包)Fiddler,HttpCancy使用~浅谈前几日抓包中遇到的坑
  3. DIAMOND: 超快的蛋白序列比对软件
  4. SQL基础教程(第2版)读书笔记
  5. 数据分析统计工具有哪些?
  6. 【高速PCB电路设计】8.DDR模块设计实战
  7. 艾伦·图灵——如谜的解谜者
  8. qsdk53:QCA9531+QCA9887生产无法校准问题分析及解决方案
  9. 传输线模型及方程推导
  10. 扩展欧几里得算法的实现