嵌入式开发学习日志49——任务动态创建

实际上,上章所讲述的静态创建在实际应用中用得不多,更通常的是使用动态创建的方式,让系统自动给任务进行堆栈以及控制块的分配,这样就省去了自己分配的烦恼。

不过值得注意的是,静态创建调用的内存空间是从SRAM中分配的,而动态创建所需的空间也是从SRAM中分出来的,并非想当然的DRAM(动态随机存储器)。DRAM的存储单元采用的是电容为基础的电路,由于电容的放电会导致里面存储的变量信息逐渐失去,一般在芯片上没有集成DRAM控制器的情况下,不会建议使用DRAM来存储重要的变量信息。

使用动态内存时,会使用**xTaskCreate()**函数进行任务的创建,具体代码如下:

这里就可以看出和静态创建的区别了。静态创建时,我们预先定义好了任务控制块,因此需要将该控制块的句柄(指针)传递给xTaskCreateStatic()函数,而在动态创建中,由于是系统给我们定义好了堆栈和控制块,xTaskCreate()最后会返回一个指向控制块的句柄,此时的控制块就是动态分配后的一块内存。

而之后的具体流程实际上就跟静态创建时的大差不差了,创建开始任务任务函数,在该函数内部进一步初始化要执行的任务函数,最后交给任务调度器进行调度即可。

相关推荐
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码2 天前
嵌入式学习路线
学习
毛小茛2 天前
计算机系统概论——校验码
学习
babe小鑫2 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms2 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下2 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。2 天前
2026.2.25监控学习
学习
im_AMBER2 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J2 天前
从“Hello World“ 开始 C++
c语言·c++·学习