FreeRTOS的任务创建和删除

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

任务的创建和删除本质就是调用FreeRTOS的API函数。

和任务创建和删除有关的函数主要有三:

xTaskCreate():动态方式创建任务。

xTaskCreateStatic():静态方式创建任务。

vTaskDelete():删除任务。

那又有思考了

2、动态方式创建任务和静态方式创建任务有什么区别?

动态创建任务:任务的任务控制块以及任务的栈空间所需的内存,均由FreeRTOS从FreeRTOS管理的堆中分配。这样创建任务是方便的,省事儿的。

又遇到了一个新概念-任务控制块:是一个用于存储与任务相关的各种信息的数据结构(结构体),例如任务的状态、优先级、堆栈指针、上下文等。它包含了管理和控制任务所需的所有关键数据。

后边还会有一个新概念,句柄,等遇到了,我们再做解释。

静态创建任务:任务的任务控制块以及任务的栈空间所需的内存,需要用户分配提供。

总结:二者区别在于内存的分配由FreeRTOS分配还是用户自己分配。

3、动态创建任务函数xTaskCreate()

哈~码字码累了,直接上正点原子PPT的截图吧。

右图中我们可以看到,在调用xTaskCreate函数创建任务的时候,我们需要传入的实参有指向任务函数的指针、任务的名字、任务的堆栈大小、传递给任务函数的参数、任务优先级和任务句柄。

有一点需要注意一下,就是对于任务句柄的解释,正点原子的视频说是任务的句柄就是任务的控制块,上百度我们可以搜到,任务句柄是一个指针,指向任务控制块或者任务堆栈地址。所以原子哥说他是任务控制块,是为了让初学者方便学习,其实并不是任务控制块。

任务控制块:

既然说到任务控制块了,放一张任务控制块的图吧。

看吧,没骗你,任务控制块就是一个结构体。任务控制块是任务的身份证。

我们在创建动态任务的时候,指定任务堆栈大小,然后系统就自动为我们分配栈空间了,就会有任务栈栈顶,创建任务的时候设置的任务优先级就直接传递到了任务控制块中,任务句柄就是任务控制块的起始地址。任务控制块中有任务状态列表项,这里边放的就是任务的状态。

动态创建函数流程:

动态创建任务只需要三步:

第一,将宏configSUPPORT_DYNAMIC_ALLOCATION 配置为1。

第二,定义函数入口参数。

第三,编写任务函数。

4、静态创建任务函数xTaskCreateStatic()

二者的区别从任务优先级往下开始不同。返回值也不同,静态创建会返回任务的句柄。

静态创建任务流程:

5、任务删除函数vTaskDelete()

void vTaskDelete(TaskHandle_t xTaskToDelete);

形参为待删除任务的任务句柄;当传入的参数为NULL时,则代表删除任务自身(当前正在运行的任务)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值