硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4599|回复: 8
收起左侧

[FreeRTOS] vTaskDelete问题

[复制链接]

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2017-1-10 14:34:47 | 显示全部楼层 |阅读模式
创建一个任务 A ,任务A的 句柄为 xHandleTaskA.
xTaskCreate(AppTaskA,"TaskA",AppTaskAStk,NULL,APP_CFG_TASK_A_PRIO,&xHandleTaskA);


然后 用vTaskDelete(xHandleTaskA), 吧 xHandleTaskA 删除,删除后 xHandleTaskA 的值不为NULL吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2017-1-10 14:43:53 | 显示全部楼层
句柄 xHandleTaskA.是不是NULL都没有关系,被删除后,这个任务已经不在任务列表里面了。
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
 楼主| 发表于 2017-1-10 14:46:19 | 显示全部楼层
删除任务后,某个时候我需要重新创建,这个时候要判断任务是否已经创建,来避免重复创建
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2017-1-10 14:49:58 | 显示全部楼层

回 zerone 的帖子

zerone:删除任务后,某个时候我需要重新创建,这个时候要判断任务是否已经创建,来避免重复创建 (2017-01-10 14:46) 
删除后,可以手动置NULL,
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
 楼主| 发表于 2017-1-10 14:54:29 | 显示全部楼层
现在就是这么干的。刚开始以为删除后能自动为NULL[s:140]
回复

使用道具 举报

22

主题

29

回帖

95

积分

初级会员

seansun77

积分
95
发表于 2017-3-30 00:36:08 | 显示全部楼层
vTaskDelete(xHandleTaskA),但是TaskA有使用SemaphoreTake,却没有xSemaphoreGive就delete task, 这样会不会造成资源卡住呢?或者由什么办法可以在delete的时候知道要做xSemaphoreGive
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2017-3-30 00:50:54 | 显示全部楼层

回 seansun77 的帖子

seansun77:vTaskDelete(xHandleTaskA),但是TaskA有使用SemaphoreTake,却没有xSemaphoreGive就delete task, 这样会不会造成资源卡住呢?或者由什么办法可以在delete的时候知道要做xSemaphoreGive (2017-03-30 00:36) 
不会,如果这个有问题就是FreeRTOS的bug了,或者说FreeRTOS设计的不完善。

你可以删除前调用此函数获取一次,将延迟时间设置为0就是立即获取。
回复

使用道具 举报

22

主题

29

回帖

95

积分

初级会员

seansun77

积分
95
发表于 2017-4-10 12:38:04 | 显示全部楼层
现在实验有三个taskA, taskB, taskC, 可能同时控制一个串口周边模组, 用Semaphore作互斥保护..
删除两个taskvTaskDelete(xHandleTaskA) vTaskDelete(xHandleTaskB) ,
在taskC调用xSemaphoreTake有时会卡住, 改为先强制调用xSemaphoreGive也是有时会卡住...
所以我怀疑是原本的Semaphore没有重置
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2017-4-11 10:08:33 | 显示全部楼层

回 seansun77 的帖子

seansun77:现在实验有三个taskA, taskB, taskC, 可能同时控制一个串口周边模组, 用Semaphore作互斥保护..
删除两个taskvTaskDelete(xHandleTaskA) 和 vTaskDelete(xHandleTaskB) ,
在taskC调用xSemaphoreTake有时会卡住, 改为先强制调用xSemaphoreGive也是有时会卡住...
所以我怀疑是原本的 .. (2017-04-10 12:38) 
现在是采用的这种互斥信号量吗
    xMutex = xSemaphoreCreateMutex();
不采用二值信号量,试试,是不是同样的问题。(估计是同样的问题,因为这些信号量本章都是消息队列)

另外,还是不行的话,那就等你这个要随意删除的任务也获得信号量了再对其它任务做删除。保证资源被释放了。这些资源的占用,估计FreeRTOS都不管,而uCOS一般都是做了处理的。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 21:45 , Processed in 0.173631 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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