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

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

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

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

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

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

相关推荐
请你喝好果汁64112 小时前
生信学习笔记:ArchR 处理小麦单细胞 ATAC-seq 中的细胞数差异与 Embedding 报错调试
学习
jinanwuhuaguo12 小时前
OpenClaw、飞书、Claude Code、Codex:四维AI生态体系的深度解构与颗粒化对比分析
大数据·人工智能·学习·飞书·openclaw
萨文 摩尔杰13 小时前
GPS原理学习
学习·fpga开发
fengci.13 小时前
ctfshow(web入门)295-300
java·开发语言·学习
renhongxia115 小时前
多模态融合驱动下的具身学习机制研究
运维·学习·机器人·自动化·知识图谱
今儿敲了吗15 小时前
46| FBI树
数据结构·c++·笔记·学习·算法
疯狂成瘾者15 小时前
git学习目录
git·学习
jinanwuhuaguo16 小时前
AI工具终极解构:OpenClaw、Coze、Dify、FastGPT、n8n、LangChain、RagFlow、GPTBots.ai 的万言深度剖析
人工智能·学习·重构·新人首发·openclaw
observe10117 小时前
51单片机学习
嵌入式硬件·学习·51单片机
leaves falling18 小时前
数据结构-堆学习
java·数据结构·学习