UCOS的任务创建和删除

一、任务创建和删除的API函数

1、任务创建和删除本质就是调用uC/OS的函数

API函数

描述

OSTaskCreate()

创建任务

OSTaskDel()

删除任务

注意:

1,使用OSTaskCreate() 创建任务,任务的任务控制块以及任务栈空间所需的内存,需要由用户手动分配并提供。当任务被创建好后,就会立马处于就绪态 。

2,使用OSTaskDel() 删除任务。当不再需要某一任务时,可以使用此函数来删除任务。删除任务并不会删除任务的代码或释放任务栈,仅代表该任务的代码和任务栈都不再由µC/OS-III 内核管理 。

2、任务创建函数

void  OSTaskCreate

(

  OS_TCB*  p_tcb,                                                        /* 指向任务控制块的指针 */ 
  CPU_CHAR*   p_name,                                              /* 指向任务的名字 */ 
  OS_TASK_PTR   p_task,                                            /* 指向任务函数的指针 */ 
  void*   p_arg,                                                               /* 传递给任务函数的参数 */ 
  OS_PRIO   prio,                                                           /* 任务的任务优先级,数字越小,优先级越高 */ 
  CPU_STK*   p_stk_base,                                             /* 指向任务栈的起始地址的指针 */ 
  CPU_STK_SIZE   stk_limit,                                          /* 任务栈的使用警戒线 */ 
  CPU_STK_SIZE   stk_size,                                          /* 任务栈大小 */ 
  OS_MSG_QTY   q_size,                                              /* 任务内嵌消息队列的大小 */ 
  OS_TICK   time_quanta,                                              /* 任务的时间片 */ 
  void*   p_ext,                                                                /* 指向用户扩展内存的指针 */ 
  OS_OPT   opt,                                                             /* 任务选项共有5 */ 
  OS_ERR*   p_err                                                         /* 指向接收错误代码变量指针 */ 

);

3、任务控制块结构体成员介绍 

注意:每个任务都有属于自己的任务控制块,类似于身份证

任务栈栈顶,在任务切换时与任务的上下文保存、任务恢复息息相关

 二、任务创建函数的参数介绍

1、opt

OS_OPT                         opt,                                    /* 任务选项共有5 */ 

Opt(任务选项)

描述

OS_OPT_TASK_NONE

没有选项

OS_OPT_TASK_STK_CHK

是否允许对任务进行堆栈检查

OS_OPT_TASK_STK_CLR

是否需要清除任务堆栈

OS_OPT_TASK_SAVE_FP

是否保存浮点寄存器

OS_OPT_TASK_NO_TLS

不需要对正在创建的任务提供 TLS(线程本地存储)支持

 2、p_err

 OS_ERR*                       p_err                            /* 指向接收错误代码变量指针 */

p_err(错误代码)

描述

OS_ERR_NONE

任务创建成功

OS_ERR_ILLEGAL_CREATE_RUN_TIME

定义了 OS_SAFETY_CRITICAL_IEC61508,且
OSStart( )之后非法地创建内核对象

OS_ERR_PRIO_INVALID

非法的任务优先级数值

OS_ERR_STAT_STK_SIZE_INVALID

任务栈在初始化期间溢出

OS_ERR_STK_INVALID

指向任务栈起始地址的指针为空

OS_ERR_STK_SIZE_INVALID

任务栈小于配置项 OS_CFG_STK_SIZE_MIN

OS_ERR_STK_LIMIT_INVALID

任务栈警戒线大小,大于或等于任务栈大小

OS_ERR_TASK_CREATE_ISR

在中断中非法地创建任务

OS_ERR_TASK_INVALID

指向任务函数的指针为空

OS_ERR_TCB_INVALID

指向任务控制块的指针为空

 注意如果p_ tcb代入的参数为NULL,则代表删除任务自身(当前正在运行的任务)

三、UCOS的任务创建流程

1、创建任务的流程如下

创建成功的任务会立刻进入就绪态,由任务调度器调度运行。

注意:

(1)、 在调用任何关于UCOSIII函数之前必须先初始化UCOSIII,仅初始化一次即可。调用函数:OSInit( )

(2)、任务在创建之后是不会直接运行的,需开启任务调度器,任务才能得以运行。调用函数: OSStart( )

四、任务创建和删除

1、寄存器xPSR被初始为0x01000000,其中bit24被置1,表示使用Thumb指令

 2、寄存器PC被初始化为任务函数指针vTask_A,这样当某次任务切换后,任务A获得CPU控制权,任务函数vTask_A被出栈到PC寄存器,之后会执行任务A的代码

 3LR寄存器初始化为函数指针OS_TaskReturn ,这是由移植层提供的一个出错处理函数。

 4、子函数的调用通过寄存器R0~R3传递参数,创建任务时,我们传入的参数被保存到R0中,用来向任务函数传递参数

 

 堆栈大小的设置:

必须考虑任务调用的所有函数的嵌套、任务调用的所有函数要分配的局部变量以及所有嵌套中断服务例程的堆栈要求。此外,如果处理器具有 FPU,堆栈必须能够存储所有 CPU 寄存器,包括浮点单元 (FPU) 寄存器

CPU_Init( )的作用:

(a) 初始化CPU时间戳

(b) 初始化CPU中断禁用的时间测量

(c) 初始化CPU主机名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/147605.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【云备份项目】:环境搭建(g++、json库、bundle库、httplib库)

文章目录 1. g 升级到 7.3 版本2. 安装 jsoncpp 库3. 下载 bundle 数据压缩库4. 下载 httplib 库从 Win 传输文件到 Linux解压缩 1. g 升级到 7.3 版本 🔗链接跳转 2. 安装 jsoncpp 库 🔗链接跳转 3. 下载 bundle 数据压缩库 安装 git 工具 sudo yum…

Linux性能优化--性能工具-系统CPU

2.0.概述 本章概述了系统级的Linux性能工具。这些工具是你追踪性能问题时的第一道防线。它们能展示整个系统的性能情况和哪些部分表现不好。 1.理解系统级性能的基本指标,包括CPU的使用情况。 2.明白哪些工具可以检索这些系统级性能指标。 2.1CPU性能统计信息 为…

北京开发APP需要多少钱

北京开发一个移动应用(APP)的费用因多种因素而异,包括项目的规模、复杂性、所需功能、设计要求、技术选择、开发团队的经验和地理位置等。一般来说,北京的APP开发费用通常较高,因为这是中国的主要技术和创新中心之一&a…

C++语言GDAL批量裁剪多波段栅格图像:基于像元个数裁剪

本文介绍基于C 语言的GDAL模块,按照给定的像元行数与列数,批量裁剪大量多波段栅格遥感影像文件,并将所得到的裁剪后新的多波段遥感影像文件保存在指定路径中的方法。 在之前的文章中,我们多次介绍了在不同平台,或基于不…

力扣 -- 322. 零钱兑换(完全背包问题)

参考代码&#xff1a; 未优化代码&#xff1a; class Solution { public:int coinChange(vector<int>& coins, int amount) {int n coins.size();const int INF 0x3f3f3f3f;//多开一行&#xff0c;多开一列vector<vector<int>> dp(n 1, vector<i…

ADB的概念、使用场景、工作原理

文章目录 一、adb概念&#xff1a;Android Debug Bridge&#xff0c;一个可以控制安卓设备的通用命令行工具二、adb的使用场景&#xff1a;操作手机设备、app 自动化测试1.传输文件2.兼容性测试&#xff08;手机墙&#xff09;3.云测平台4.测试框架底层封装&#xff1a;APP自动…

【生命周期】

生命周期 1 引出生命周期2 分析生命周期3 总结生命周期 1 引出生命周期 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta …

【Java 进阶篇】JDBC PreparedStatement 详解

在Java中&#xff0c;与关系型数据库进行交互是非常常见的任务之一。JDBC&#xff08;Java Database Connectivity&#xff09;是Java平台的一个标准API&#xff0c;用于连接和操作各种关系型数据库。其中&#xff0c;PreparedStatement 是 JDBC 中一个重要的接口&#xff0c;用…

跟着顶级科研报告IPCC学绘图:温度折线/柱图/条带/双y轴

复现IPCC气候变化过程图 引言 升温条带Warming stripes&#xff08;有时称为气候条带&#xff0c;目前尚无合适且统一的中文释义&#xff09;是数据可视化图形&#xff0c;使用一系列按时间顺序排列的彩色条纹来视觉化描绘长期温度趋势。 在IPCC报告中经常使用这一方案 IPCC是…

认识柔性数组

在C99中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员 限制条件是&#xff1a; 结构体中最后一个成员未知大小的数组 1.柔性数组的形式 那么我们怎样写一个柔性数组呢 typedef struct st_type {int i;int a[0];//柔性数组成员 }ty…

SpringBoot 可以同时处理多少请求

一、前言 首先&#xff0c;在Spring Boot应用中&#xff0c;我们可以使用 Tomcat、Jetty、Undertow 等嵌入式 Web 服务器作为应用程序的运行容器。这些服务器都支持并发请求处理的能力。另外&#xff0c;Spring Boot 还提供了一些配置参数&#xff0c;可以对 Web 服务器进行调…

互联网Java工程师面试题·MyBatis 篇·第二弹

目录 16、Xml 映射文件中&#xff0c;除了常见的 select|insert|updae|delete标签之外&#xff0c;还有哪些标签&#xff1f; 17、Mybatis 的 Xml 映射文件中&#xff0c;不同的 Xml 映射文件&#xff0c;id 是否可以重复&#xff1f; 18、为什么说 Mybatis 是半自动 ORM 映射…

Vue项目搭建图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 预备工作 请在本地创建文件夹用于存放Vue项目&#xff0c;例如&#xff1a;创建HelloWorld文件夹存放即将创建的Vue新项目。 创建Vue项目 首先&#xff0c;请在DOS中将目录…

踩坑 | vue动态绑定img标签src属性的一系列报错

文章目录 踩坑 | vue项目运行后使用require()图片也不显示问题描述vue中动态设置img的src不生效问题的原因require is not defined 解决办法1&#xff1a;src属性直接传入地址解决办法2 踩坑 | vue项目运行后使用require()图片也不显示 问题描述 在网上查阅之后&#xff0c;发…

深度学习笔记之线性代数

深度学习笔记之线性代数 一、向量 在数学表示法中&#xff0c;向量通常记为粗体小写的符号&#xff08;例如&#xff0c;x&#xff0c;y&#xff0c;z&#xff09;当向量表示数据集中的样本时&#xff0c;它们的值具有一定的现实意义。例如研究医院患者可能面临的心脏病发作风…

<C++> STL_bitset使用和模拟实现

bitset的介绍 位图的引入 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中&#xff1f; 要判断一个数是否在某一堆数中&#xff0c;我们可能会想到如下方法&#xff1a; 将这一堆数进行排序&#xff0…

Linux-正则三剑客

目录 一、正则简介 1.正则表达式分两类&#xff1a; 2.正则表达式的意义 二、Linux三剑客简介 1.文本处理工具&#xff0c;均支持正则表达式引擎 2.正则表达式分类 3.基本正则表达式BRE集合 4.扩展正则表达式ere集合 三、grep 1.简介 2.实践 3.贪婪匹配 四、sed …

STM32Cubemx新建F429基础工程

配置STM32CubeMX 配置KEY 配置USART1 配置RCC Project Manager Toolchain 选择 MDK-ARM Code Generator 配置如下 GENERATE CODE 即可 配置Keil5 魔术棒配置 – Target – 勾选 Use MicroLIB – Debug – Flash Download – 勾选Reset and Run 基础代码 /* Private incl…

GD32F103x IIC通信

1. IIC通信 1.IIC的介绍 IIC总线有两条串行线&#xff0c;其一是时钟线SCK&#xff08;同步&#xff09;&#xff0c;其二是数据线SDA。只有一条数据线属于半双工。应用中&#xff0c;单片机常常作为主机&#xff0c;外围器件可以挂载多个。&#xff08;当然主机也可以有多个。…

AJAX--Express速成

一、基本概念 1、AJAX(Asynchronous JavaScript And XML)&#xff0c;即为异步的JavaScript 和 XML。 2、异步的JavaScript 它可以异步地向服务器发送请求&#xff0c;在等待响应的过程中&#xff0c;不会阻塞当前页面。浏览器可以做自己的事情。直到成功获取响应后&#xf…