基于尚硅谷FreeRTOS视频笔记——16—FreeRTOS的任务创建和删除

news/2025/6/19 16:33:43

动态创建任务函数

简介

BaseType_t xTaskCreate:x表示定义出来的类型。Task表示在Task.c文件中。

1.TaskFunction_t   pxTaskCode:任务的地址。

2.const char * const pcName:任务的别名,就是外号。但要注意,最大长度受configMAX_TASK_NAME_LEN 来控制。

3.const configSTACK_DEPTH_TYPE usStackDepth, :任务堆栈大小,默认单位4字节 

所以最小为128*4字节

32位平台:4字节

16位平台:2字节

4. void * const pvParameters传递给任务函数的参数

5. UBaseType_t uxPriority任务优先级,范围:0 ~ configMAX_PRIORITIES - 1

 6.TaskHandle_t * const pxCreatedTask  :任务句柄,就是任务的任务控制块 。这是指向任务控制块的指针。

什么是任务控制块,如同身份证,包含自己的各种信息。

同样,任务控制块包含这个任务的优先级,大小等,就是任务身份证。

步骤

查找

内部实现

TCB简介

静态任务创建

简介

不同点:

  StackType_t * const puxStackBuffer, /* 任务堆栈,一般为数组,由用户分配 */

    StaticTask_t * const pxTaskBuffer   /* 任务控制块指针,由用户分配 */
因为静态创建需要我们自己分配空间,所以不同TCB

步骤

任务删除函数

需要注意的是,空闲任务会负责释放被删除任务中由系统分配的内存,但是由用户在任务删除前申请的内存,则需要由用户在任务被删除前提前释放,否则将导致内存泄露。

如同你去别人家干活(创建任务),然后借了一个工具(申请内存),当活干完后(删除任务),需要将工具还回(删除申请的内存)


https://dhexx.cn/news/show-5501456.html

相关文章

RV1126网络环境TFTPNFS搭建(二)

二、RV1126 开发板TFTP环境搭建 2.1、Ubuntu下安装和配置 xinetd 执行以下指令,安装 xinetd sudo apt-get install xinetd 执行以下指令创建一个 xinetd.conf 文件 sudo vi /etc/xinetd.conf 修改 xinetd.conf 文件内容如下: # Simple configurat…

C语言状态字与库函数详解:概念辨析与应用实践

C语言状态字与库函数详解:概念辨析与应用实践 一、状态字与库函数的核心概念区分 在C语言系统编程中,"状态字"和"库函数"是两个经常被混淆但本质完全不同的概念,理解它们的区别是掌握系统编程的基础。 1. 状态字&…

字节头条golang二面

docker和云服务的区别 首先明确Docker的核心功能是容器化,它通过容器技术将应用程序及其依赖项打包在一起,确保应用在不同环境中能够一致地运行。而云服务则是由第三方提供商通过互联网提供的计算资源,例如计算能力、存储、数据库等。云服务…

深入剖析 Java Web 项目序列化:方案选型与最佳实践

在 Java Web 开发中,“序列化”是一个你无法绕过的概念。无论是缓存数据、共享 Session,还是进行远程过程调用(RPC)或消息传递,序列化都扮演着底层数据搬运工的角色。它负责将内存中的 Java 对象转换成可传输或可存储的…

【数据结构入门训练DAY-18】信息学奥赛一本通T1331-后缀表达式的值

文章目录 前言一、题目二、解题思路总结 前言 本次训练内容: 栈的复习。栈模拟四则运算计算问题的练习。训练解题思维。 一、题目 从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加()、减…

Linux文件时间戳详解:Access、Modify、Change时间的区别与作用

在 Linux 系统中,文件的这三个时间戳(Access、Modify、Change)分别表示不同的文件状态变更时间,具体含义如下: 1. Access Time (Access) 含义:文件最后一次被访问的时间(读取内容或执行&#xf…

Kotlin实现Android应用保活方案

Kotlin实现Android应用保活优化方案 以下的Android应用保活实现方案,更加符合现代Android开发规范,同时平衡系统限制和用户体验。 1. 前台服务方案 class OptimizedForegroundService : Service() {private val notificationId 1private val channel…

OJ - 设计循环队列

622. 设计循环队列 - 力扣(LeetCode) 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则,并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可…

C++面试题集合(附答案)

C全家桶 C基础 1. C和C有什么区别? 2. C语言的结构体和C的有什么区别? 3. C 语言的关键字 static 和 C 的关键字 static 有什么区别? 4. C 和 Java有什么核心区别? 5. C中,a和&a有什么区别? 6. …

B树的异常恢复

B-Tree & Crash Recovery B树作为平衡的n叉树 高度平衡树 许多实用的二叉树(如AVL树或红黑树)被称为高度平衡树,这意味着树的高度(从根节点到叶子节点)被限制为Ο(log 𝑁),因此查找操作的…