uCOS学习笔记----任务管理

2023-05-16

一.任务管理

一.任务的概念

从前文得知,uCOS可以将裸机中庞大的while(1)循环拆解为执行不同功能的小程序,并依据一定的规则调度任务的运行。这些小程序就被称为任务。

一般而言,任务由三个部分构成:

  1. 任务堆栈:可以理解为任务的运行空间

  1. 任务控制块:任务控制块是一种结构体,里面包含了任务的各种属性

  1. 任务函数:由用户编写的任务代码,是实实在在干活的

所以,创建任务需要先定义这三个部分

任务函数模板

任务函数一般是一个无限循环的函数,当然也可以是一个只执行一次的函数。任务函数的参数为空指针,这样做是为了方便传入不同类型的数据甚至函数。

可以看出,任务函数其实就是一个普通的C语言函数,其与普通函数的唯一区别在于该函数不能由用户调用,只能由uCOS决定其运行。

二.初始化函数

启动操作系统时,需要调用操作系统初始化函数,用于初始化内核与各种全局变量。

创建完任务时,让系统开始进行任务调度,需要启动操作系统

三.任务状态

在uCOS中,任务一共有五种状态,任务状态变化的过程称为内核调度点,uCOS总是执行处于就绪态且优先级最高的任务

休眠态:任务已经在内部FLASH中,但不受uCOS管理

就绪态:系统为任务分配了任务控制块,并且已经在就绪表中等级,这时该任务就具有了运行的条件,此时任务的状态就是就绪态

运行态:任务获得了CPU的使用权,正在运行

等待态:正在运行的任务需要等待一段时间,或者等待某个事件,这个任务就进入了等待太,此时CPU会把使用权转交给别的任务

中断服务态:当中断发生时,当前正在运行的任务会被挂起,CPU转而去执行其他的任务,此时任务的状态被称为中断服务态

任务状态转换图:

四,任务的创建

任务创建函数模板

函数参数:

p_tcb 任务控制块地址

p_name 任务名字,自定义

p_task 任务函数

p_arg 向任务函数中传递的参数

prio 任务的优先级

p_stk_base 任务栈的基地址,需要提供数组首地址

stk_limit 腾出10%的栈空间给堆栈检测函数用,反过来说,当前任务只能使用90%的栈空间

stk_size 任务栈的大小,单位为32bit,需要和定义的堆栈数组匹配

q_size 任务内消息队列的大小,不使用时写0

time_quanta 当与同优先级函数处于就绪态时,内核允许一个任务运行一段事件(又称为时间片)

然后轮到下一个任务,既所谓的相互礼让执行,时间片由内核执行时,默认为1

p_ext 提供额外的存储空间用于存储浮点运算的单元寄存器,不提供时写NULL

opt,创建任务时,提供额外操作,如果不使用,写OS_OPT_TASK_NONE

p_err 返回错误码,没有错误码返回OS_ERR_NONE

返回值:无

#创建任务时需要考虑为任务分配的数组的大小是否充足,不充足会导致程序无法运行,有几种情况

可能导致任务栈空间不足:

任务中申请大的全局变量,例如数组,结构体...将会占用大量的栈空间

任务中包含了很多复杂的函数,将会占用大量的栈空间。

解决方法:

  1. 将该变量作为全局变量或者静态变量,这样系统将为其分配全局区空间,不会占用栈空间

  1. 创建任务时,定义更大的栈空间

#设定任务优先级时,只能从优先级4开始,其余优先级均已被系统占用

#轮转调度算法,轮转调度算法面向于多个同级任务,每个任务被分配一段时间,称作它的时间片,在实际开发中一般较少采用该种算法

五.任务挂起,恢复与删除:

p_err 错误码

p_tcb 需要挂起任务的控制块

可以强制将某一任务处于等待态,直到该任务接收到任务释放函数后才开始运行

p_err 错误码

p_tcb 需要挂起任务的控制块

用途:

1)如果当前任务不是经常执行的,可以将其挂起,类似于手机APP的管理机制,如果app进入其后台就冻结其运行,也就是挂起app,有利于提高系统响应,降低资源占用。

2)共享资源保护,举一个例子,如果任务1与任务2同级且都只进行串口打印,那就可以再任务1执行串口打印前将任务2挂起,打印完再释放,再任务2进行串口打印时将任务1挂起,执行完再释放,从而起到保护共享资源的目的

任务删除:

用途:

专门用于初始化硬件,一般来说,硬件只用做一次初始化,完成后可以将该任务删除,注意硬件初始化并不会释放资源,只是将任务从任务列表中删除

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uCOS学习笔记----任务管理 的相关文章

  • putty连接不上该怎么办

    虚拟机Oracle VM VirtualBox 操作系统是CentOS7 1 首先有配置好的虚拟机网络 2 要登陆虚拟机 3 用管理员身份打开cmd 4 连接putty 创建好虚拟机 xff0c 启动虚拟机 xff0c 进行登录 输入ip
  • LT87121 适用于EDPx/VBO转DP/EDP应用方案,支持中心扩频+5000ppm@30kHz,温度范围: -40°C~+85°C

    1 说明 LT87121 是一款高性能 eDPx 至 eDP DP 转换器 xff0c 专为将 eDPx 源连接至一个 eDP DP 灌电流而设计 该器件能够自动操作 xff0c 由集成微处理器启用 xff0c 该微处理器使用嵌入式SPI闪
  • OpenHarmony适配移植:X86、ARM、RISC-V、MIPS、LoongArch芯片架构简析

    前言 基于OpenHarmony的开发相关工作 xff0c 特别适配移植 设备开发这块 xff0c 芯片的基础构架知识 xff0c 是最初的学习起点 本文我们整理了几种常见的芯片构架的基础知识 一 整体分析 序号 架构 特点 运营机构 1
  • 个人笔记Openstack中的常用命令

    一 块存储 xff08 Cinder xff09 1 列出所有卷 xff08 ID 名称 状态 大小和挂载目录 xff09 openstack volume list 2 新建卷 xff08 size的单位为GB xff09 opensta
  • 380无人机机架组装笔记

    无人机机架买的380碳纤维 飞控买的pixhawk6c 遇到的问题 xff1a 1 买回来组装发现支撑板少了 xff0c 只有一个碳纤维的中心板和PCB板 组装无人机大概需要三到四块板子 xff0c 分别用于安放电池 xff0c 安装分电板
  • JS逆向-sm2、sm4加密某医保局

    前言 该文章为学习使用 xff0c 严禁用于商业用途和非法用途 xff0c 否则由此产生的一切后果均与作者无关 xff01 如有侵权 xff0c 请私信联系作者删除 需求 目标网址 xff1a aHR0cHM6Ly9mdXd1Lm5oc2E
  • Ubuntu16.04 出现E: Sub-process /usr/bin/dpkg returned an error code (100)

    原因为系统中dpkg文件损坏了 xff08 原因不详 xff09 xff0c 使用apt get f update也不能修复 需要单独下载dpkg的安装包进行修复 修复操作如下 1 在官网下载dpkg安装包 http security ub
  • SecureCRT抓取串口log

    一 通用自动配置 通用自动配置是指配置之后 xff0c 每次创建新的session都会导入该配置 xff0c 无需重复配置 xff0c 非常方便 首先在option里面找到Global Options xff1b 在Global Optio
  • vscode处理代码合并冲突

  • mysql---修改数据库root密码的方法

    为了数据库管理员root用户密码的安全 xff0c 可以定期修改密码 注意 xff1a 修改密码 必须要知道旧密码 才能设置新密码 并且要符合密码策略的要求 方法一 登录后修改 xff0c 数据库管理员连接服务后 修改自己的登陆密码 spa
  • 关于debian网卡驱动

    1 查看驱动信息的命令 xff1a 查看基本信息 xff1a lspci 22 00 0 有线网卡 25 00 0 无线网卡 26 00 0 Nvidia独立显卡 查看详细信息 xff1a lspci vvv 有线网卡使用的驱动为 xff1
  • Python实战,爬取金融期货数据

    大家好 xff0c 我是毕加锁 今天给大家带来的是 Python实战 xff0c 爬取金融期货数据 文末送书 xff01 文末送书 xff01 文末送书 xff01 任务简介 首先 xff0c 客户原需求是获取https hq smm cn
  • 在Ubuntu系统下利用Kazam软件录屏以及视频解码问题

    最近利用在本想在Ubuntu系统下录制一段仿真效果视频 xff0c 利用Ubuntu系统自带的录屏方式 xff0c 发现有些鸡肋 xff0c 因为只能录30秒 于是乎找了一款软件 xff0c 在此安利给大家 Kazam 1 Ubuntu系统
  • PMP1——3章经典题目

    第1题 以下哪个是项目的特点 xff1f A xff0e 必须为组织实现利润 B xff0e 通常会产出相同的产品 C xff0e 推动组织从当前状态转变到将来状态 D xff0e 项目是需要持续开展的重复性工作 第2题 旨在创造最终结果的
  • 认识世界和改造世界 [马原]

    认识世界与改造世界 认识世界 定义 认识世界 xff0c 就是主体能动地反映客体 xff0c 获得关于事物的本质和发展规律的科学知识 xff0c 探索和掌握真理 认识世界的活动是客观见之于主观 xff0c 是要认识事物发展的规律性 如何认识
  • C#工控上位机开发-->1、C#快速编程入门

    学习目标 xff1a 一 控制台的输入输出二 C 中的变量使用三 字符串的拼接与格式化的三种方式四 数据类型转换的三种方式 学习内容 xff1a 1 控制台的输入输出 xff08 1 xff09 输入方法 xff1a Console Rea
  • C#工控上位机开发---2.面向对象编程

    学习目标 xff1a 1 对象与类的概念 2 类的组成 3 字段 属性 方法 4 属性扩展 学习内容 xff1a 1 1 对象与类的概念 xff1a 类就是以对象共有的属性 xff0c 方法来定义的一个整体 xff0c 也就是一类 xff0
  • ubuntu16.04配置JDK环境变量(JDK8u2)

    一 流程 1 官网下载JDK 2 解压缩 放到指定目录 3 配置环境变量 4 设置系统默认JDK 5 测试jdk 二 步骤 1 官网下载JDK xff08 下载jdk8为例 xff09 https www oracle com techne
  • STM32的一键下载CH340 DTR RTS与复位电路NRST的学习笔记

    这两天在学习stm32最小系统板的时候 对这一部分特别的不理解 于是就去找了很多东西去看 先说一键下载电路吧 先引用一张正点原子的原理图 xff1a 在芯片手册上查找ch340的手册 xff0c 上面对于 RTS与DTR的定义是这样的 xf
  • Linux学习笔记——逻辑卷及vdo的建立

    目录 前言 一 逻辑卷 1 如何建立lvm设备 xff1a xff08 1 xff09 lvm的拉伸 xff08 2 xff09 lvm缩减 xff08 3 xff09 lvm快照 xff08 4 xff09 lvm删除 二 vdo Vir

随机推荐

  • BGP路由器协议排错教程:BGP 对等体翻动问题

    完整版下载 2022年最新BGP路由协议排错教程指南 网络安全文档类资源 CSDN下载 BGP 对等体失效问题讨论的是当 BGP 邻居关系总是在 Idle xff08 空闲 xff09 状态和 Active xff08 活跃 xff09 状
  • VUE 事件总线

    VUE 事件总线 事件总线通俗理解为在平级的兄弟组件上的传参 1 将事件总线挂载到原型上 span class token keyword new span span class token class name Vue span span
  • 一看就懂的java虚拟机内存区域划分

    一 虚拟机 同样的java代码在不同平台生成的机器码肯定是不一样的 xff0c 因为不同的操作系统底层的硬件指令集是不同的 同一个java代码在windows上生成的机器码可能是0101 xff0c 在linux上生成的可能是1100 xf
  • 硬核,20道经典Java基础面试题

    最近整理了20道Java基础面试题 xff0c 大家一起加油哈 1 ArrayList和LinkedList有什么区别 xff1f 可以从它们的底层数据结构 效率 开销进行阐述哈 ArrayList是数组的数据结构 xff0c Linked
  • 面向无人机的视觉目标跟踪算法:综述与展望

    摘要 近年来 无人机因其小巧灵活 智能自主等特点被广泛应用于民用和军事等领域中 特别是搜索侦察过程中首要的目标跟踪任务 无人机视觉目标跟踪场景的复杂性和运动目标的多变性 使得目标特征提取及模型建立困难 对目标跟踪性能带来巨大的挑战 本文首先
  • 网络空间对抗防御中的智能监测技术研究

    摘 nbsp nbsp 要 nbsp 网络空间数据流观测与威胁行为分析是国家网络空间安全防御中的重要方向 为 nbsp nbsp nbsp 应对国家网络空间大规模数据流观测和不断涌现的网络威胁对抗防御重大需求 针对传统 nbsp nbsp
  • Promethues (普罗米修斯)详细介绍

    目录 引言 一 Prometheus 概述 1 什么是Prometheus 2 Zabbix和Prometheus区别 3 Prometheus的特点 二 运维监控平台设计思路 三 Prometheus监控体系 1 系统层监控 xff08
  • 使用vue对表格数据进行查询

    大家好 xff0c 今天小明给大家带来一个带有查询框 的表格 xff0c 下面给大家瞅瞅效果图片 xff1a 带查询框的表格 xff0c 查询前的效果图 带查询框的表格 xff0c 查询后的效果图 从效果图上可以看出 xff0c 在查询框内
  • Linux操作系统面试总结

    1 系统启动流程 uboot gt kernel gt 根文件系统 uboot第一阶段属于汇编阶段 xff1a 定义入口 xff08 start S xff09 xff1a uboot中因为有汇编阶段参与 xff0c 因此不能直接找main
  • 详谈静态库和动态库的区别

    一 什么是库 xff1a 库是写好的 xff0c 现有的 xff0c 成熟的 xff0c 可以复用的代码 现实中每个程序都要依赖很多基础的底层库 xff0c 不可能每个人的代码都从零开始 xff0c 因此库的存在意义非同寻常 本质上来说 x
  • HDFS读取流程

    在HDFS的读写流程中 xff0c 主要是分为HDFS的读流程和写流程 其中先由HDFS写数据 xff0c 之后HDFS才可以读流程 HDFS写流程 Client向NameNode发送消息 xff0c 通过RPC与NameNode建立通信
  • 删除图片名与xml(json)文件名称不对应的

    1 文件夹下无目录文件夹 xff08 纯文件 xff09 import os def scanfile path 获取图片路径 xff08 列表格式 xff09 filelist 61 os listdir path for filepat
  • FreeRTOS内存不够

    STM32F103 xff0c RAM大小为20K xff0c 看起来还是很多的 xff0c 但一运行FreeRTOSG有点功能的程序马上就内存不够了 xff1b unable to allocate space for sections
  • FreeRTOS 任务之间运行时序

    操作系统 xff0c 我们肯定会创建许多任务 xff0c 而且任务的优先级不一样 xff0c 但我们一般情况是采用抢占模式 xff0c 也就是一直运行当前最高优先级任务 xff0c 那么其他低优先级任务就无法运行 xff0c 这时候需要通过
  • c语言-查找指定字符

    题目源自pta xff0c 侵删 本题要求编写程序 xff0c 从给定字符串中查找某指定的字符 输入格式 xff1a 输入的第一行是一个待查找的字符 第二行是一个以回车结束的非空字符串 xff08 不超过80个字符 xff09 输出格式 x
  • linux查看日志文件内容命令sed、cat、tac、more、less、head、tail、echo 1、按时间查询

    查询日志 xff1a linux查看日志文件内容命令sed cat tac more less head tail echo 1 按时间查询 sed n 39 2017 09 20 14 00 2017 09 20 15 00 p 39 c
  • 计算机保研面试经验分享—重庆大学

  • uCOS学习笔记——实时操作系统概述

    一 概述 RTOS real time operation system 既实时操作系统 通俗来说 xff0c 实时操作系统正如一个大管家一般 xff0c 可以根据任务的要求 xff0c 进行资源管理 xff0c 消息管理 xff0c 任务
  • windows HLK server部署操作步骤

    Windows Hardware Lab Kit HLK 微软官方提供的测试工具组 xff0c 也是微软的一种认证工具 xff0c 只有经过HLK测试过的windows系统 xff0c 官方才认可 The Windows Hardware
  • uCOS学习笔记----任务管理

    一 任务管理 一 任务的概念 从前文得知 xff0c uCOS可以将裸机中庞大的while 1 循环拆解为执行不同功能的小程序 xff0c 并依据一定的规则调度任务的运行 这些小程序就被称为任务 一般而言 xff0c 任务由三个部分构成 x