OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5508|回复: 7

FreeRTOS的任务删除API函数。 调用后会把这个任务卡死。

[复制链接]

49

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2020-5-13
在线时间
202 小时
发表于 2020-11-11 14:03:08 | 显示全部楼层 |阅读模式
1金钱
如图上,运行这个xTaskDelete函数后,下面的printf不会打印。 这个led1_task就不会继续运行。
这个是什么原因? @原子哥
企业微信截图_16050744418073.png

最佳答案

查看完整内容[请看2#楼]

那我觉得有一个可能。。你再删任务前,判断下float任务的句柄。。假如为NULL的话,其实就是自杀,。。。。LED1以为在删FLOAT的任务,但是由于FLOAT任务任务句柄实际为NULL,其实是删自己
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2017-10-10
在线时间
130 小时
发表于 2020-11-11 14:03:09 | 显示全部楼层
肖暗博 发表于 2020-11-21 09:21
我明白你的意思。 但是我遇到的现象是: “我想杀掉别的任务,结果我自己的任务死掉了”。
我上面贴出 ...

那我觉得有一个可能。。你再删任务前,判断下float任务的句柄。。假如为NULL的话,其实就是自杀,。。。。LED1以为在删FLOAT的任务,但是由于FLOAT任务任务句柄实际为NULL,其实是删自己
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2020-11-12 01:17:22 | 显示全部楼层
你是不是把任务自己给删了
回复

使用道具 举报

49

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2020-5-13
在线时间
202 小时
 楼主| 发表于 2020-11-12 13:22:35 | 显示全部楼层
正点原子 发表于 2020-11-12 01:17
你是不是把任务自己给删了

这个真没有,我上面的主任务 也有一个vTaskDelete,可以正常运行。
  1. void led0_task(void *p_rg)
  2. {
  3.                 taskENTER_CRITICAL();
  4.                 xTaskCreate(led1_task,"led1_task",LED1_STK_SIZE,NULL,LED1_TASK_PRIO,LED1Task_Handler);
  5.                 xTaskCreate(floate_task,"floate_task",FLOATE_STK_SIZE,NULL,FLOATE_TASK_PRIO,FLOATETask_Handler);
  6.                
  7.                 vTaskDelete(LED0Task_Handler);
  8.                 taskEXIT_CRITICAL();
  9.                
  10. }

  11. void led1_task(void *p_rg)
  12. {
  13.         u8 led1_num=0;
  14.         POINT_COLOR=RED;
  15.         LCD_DrawRectangle(5,110,115,314);
  16.        
  17.         LCD_DrawLine(5,130,115,130);
  18.         POINT_COLOR=BLUE;
  19.         LCD_ShowString(6,111,110,16,16,"led1_task:000");
  20.         while(1)
  21.         {
  22.                 led1_num++;
  23.                 LED0=!LED0;
  24.                 printf("led1_task任务已经执行:%d次!",led1_num);
  25.                 if(led1_num==10)
  26.                 {
  27.                         //vTaskDelete(LED1Task_Handler);
  28.                         vTaskDelete(FLOATETask_Handler);
  29.                         printf("任务led1删除了任务2!");
  30.                 }
  31.                 LCD_Fill(6,131,114,313,lcd_discolor[led1_num%14]);
  32.                 LCD_ShowxNum(86,111,led1_num,3,16,0x80);
  33.                 vTaskDelay(1000);
  34.                
  35.         }
  36.        
  37. }
复制代码
回复

使用道具 举报

0

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2017-10-10
在线时间
130 小时
发表于 2020-11-19 11:10:24 | 显示全部楼层
本帖最后由 YukawaManabu 于 2020-11-19 11:14 编辑
肖暗博 发表于 2020-11-12 13:22
这个真没有,我上面的主任务 也有一个vTaskDelete,可以正常运行。

其实freertos正常一个任务在内部把自己删除了,删除任务以后的代码都不会执行,至于你说的那个删除后还能退出临界区的用法,我也一直没明白,freertos我最早是在ESP32上用的,用的乐鑫的框架,不需要自己移植,当时就发现如果是在任务内部删除自己就会导致这个语句后面的都不执行,后来就用了通知外部任务来删除当前任务的方法解决了这个问题,然后后来看原子的STM32移植教程这一块还挺疑惑的


我那个用法相当于,我想自杀,但是我死了就没法料理后事了,所以我雇佣别人来杀我,顺便把后事料理了。
回复

使用道具 举报

49

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2020-5-13
在线时间
202 小时
 楼主| 发表于 2020-11-20 22:13:36 | 显示全部楼层
YukawaManabu 发表于 2020-11-19 11:10
其实freertos正常一个任务在内部把自己删除了,删除任务以后的代码都不会执行,至于你说的那个删除后还能 ...

我明白你的意思, 但是我遇到的问题是:“我想杀死别人, 结果我自己死掉啦”。 我上面贴的图片中有显示,led1task 是想把flotatask删除的,结果led1task不会进行下一步运行啦。
回复

使用道具 举报

49

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2020-5-13
在线时间
202 小时
 楼主| 发表于 2020-11-21 09:21:47 | 显示全部楼层
YukawaManabu 发表于 2020-11-19 11:10
其实freertos正常一个任务在内部把自己删除了,删除任务以后的代码都不会执行,至于你说的那个删除后还能 ...

我明白你的意思。 但是我遇到的现象是: “我想杀掉别的任务,结果我自己的任务死掉了”。
我上面贴出来的图, Led1Task任务是想把floatTask任务删除。 结果LED1Task自己死掉啦。
回复

使用道具 举报

49

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2020-5-13
在线时间
202 小时
 楼主| 发表于 2020-11-23 10:22:54 | 显示全部楼层
YukawaManabu 发表于 2020-11-23 10:11
那我觉得有一个可能。。你再删任务前,判断下float任务的句柄。。假如为NULL的话,其实就是自杀,。。。 ...

棒棒棒, 我试一试。 我把float放在led1的前面试一试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 21:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表