当前位置:网站首页>FreeRTOS experiment -- delete task
FreeRTOS experiment -- delete task
2022-08-02 12:31:00 【Mountain,】
Tasks can now be created,Then of course it can also be deleted,For certain tasks that are not needed once or a few times,can be done after execution,Delete this task,It can be deleted by another task,You can also task yourself to delete yourself.
任务删除函数:void vTaskDelete( TaskHandle_t xTaskToDelete );
Its parameter is the handle of the task,It is the fifth parameter of the create task function.
之前说过,A task handle is actually just oneTCB结构体,Store some information about the task,When doing something with a task,Just pass the task handle to the corresponding function.
So to delete a task, just pass the handle of the task to be deleted to the delete task function.
代码:
首先创建三个任务,在任务2中,任务2执行100次之后,调用vTaskDelete(NULL);
函数,Delete yourself;在任务3中,任务3执行200次之后,任务3调用vTaskDelete(xHandleTask1);
function put task1删除.注意vTaskDelete()
中,参数写入NULLIt means to delete the task itself.
static volatile int Task1RunningFlag = 0;
static volatile int Task2RunningFlag = 0;
static volatile int Task3RunningFlag = 0;
TaskHandle_t xHandleTask1;
void Task1(void * param)
{
while(1)
{
Task1RunningFlag = 1;
Task2RunningFlag = 0;
Task3RunningFlag = 0;
printf("A");
}
}
TaskHandle_t xHandleTask2;
void Task2(void * param)
{
int i = 0;
while(1)
{
Task1RunningFlag = 0;
Task2RunningFlag = 1;
Task3RunningFlag = 0;
printf("a");
if(i++ == 100)
{
vTaskDelete(NULL);
}
}
}
StackType_t xTask3Stack[100];
StaticTask_t xTask3Tcb;
void Task3(void * param)
{
int i = 0;
while(1)
{
Task1RunningFlag = 0;
Task2RunningFlag = 0;
Task3RunningFlag = 1;
printf("1");
if(i++ == 200)
{
vTaskDelete(xHandleTask1);
}
}
}
StackType_t xIdleTaskStack[100];
StaticTask_t xIdleTaskTcb;
void vApplicationGetIdleTaskMemory(StaticTask_t * * ppxIdleTaskTCBBuffer, StackType_t * * ppxIdleTaskStackBuffer, uint32_t * pulIdleTaskStackSize)
{
*ppxIdleTaskTCBBuffer = &xIdleTaskTcb;
*ppxIdleTaskStackBuffer = xIdleTaskStack;
*pulIdleTaskStackSize = 100;
}
主函数:
int main( void )
{
prvSetupHardware();
printf("Hello World!\r\n");
xTaskCreate(Task1,"Task1",100,NULL,1,&xHandleTask1);
xTaskCreate(Task2,"Task2",100,NULL,1,&xHandleTask2);
xTaskCreateStatic(Task3,"Task3",100,NULL,1,xTask3Stack,&xTask3Tcb);
vTaskStartScheduler();
return 0;
}
输出结果:
可以看到,任务2执行一段时间(100次)后被删除,任务1After this, execute it for a while(共200次)之后被删除,After that, only the task remains3执行了.vTaskDelete();
Functions can both delete dynamically created task functionsxTaskCreate
创建的任务,It is also possible to delete statically created task functionsxTaskCreateStatic
创建的任务.
对于xTaskCreate()
We have already set the task handle of the task when we created it,You can directly pass it in when you delete it.
对于xTaskCreateStatic
,我们可以从下图看到,The return value of this function is a task handle,So use a create structure to get the handle of the task in advance.
TaskHandle_t TaskStaticHandle = xTaskCreateStatic(Task3,"Task3",100,NULL,1,xTask3Stack,&xTask3Tcb);
边栏推荐
猜你喜欢
Distributed current limiting, hand & redisson implementation
QAbstractScrollArea、QScrollArea
MD5详解(校验文件完整性)
手撸架构,Mysql 面试126问
ssm access database data error
干测试这些年,去过阿里也去过小公司,给年轻测试员们一个忠告...
力扣209-长度最小的字符串——滑动窗口法
#Summer Challenge#[FFH] OpenHarmony Device Development Foundation (3) Compilation Dependencies
np.nan, np.isnan, None, pd.isnull, pd.isna 整理与小结
数据湖(三):Hudi概念术语
随机推荐
Data Lake (2): What is Hudi
numpy&pands 中的unique
ASP.NET Core 6框架揭秘实例演示[31]:路由“高阶”用法
手撸架构,MongDB 面试50问
Thymeleaf
力扣35-搜索插入位置——二分查找
技术分享| 融合调度系统中的电子围栏功能说明
WPF——自定义日历
一款强大的js弹出alert插件
WebUI自动化测试框架搭建从0到1(完整源码)更新完毕
Seneor Exposure Basics
js半圆环加载进度动画js特效
pytorch模型转tensorflow模型
php——三篇夯实根基第一篇
SQL Server 数据库之导入导出数据
如何搭建威纶通触摸屏与S7-200smart之间无线PPI通信?
用位运算为你的程序加速
Solve the problem of Chinese garbled characters in exporting excel file names
Process finished with exit code 1
unique in numpy & pandas