硬汉嵌入式论坛

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

[FreeRTOS] vTaskDelete后Semaphore没有重置

[复制链接]

22

主题

29

回帖

95

积分

初级会员

seansun77

积分
95
发表于 2017-4-11 08:27:57 | 显示全部楼层 |阅读模式
现在实验有三个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:58 | 显示全部楼层
现在是采用的这种互斥信号量吗
    xMutex = xSemaphoreCreateMutex();
不采用二值信号量,试试,是不是同样的问题。(估计是同样的问题,因为这些信号量本章都是消息队列)

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

使用道具 举报

22

主题

29

回帖

95

积分

初级会员

seansun77

积分
95
 楼主| 发表于 2017-4-11 21:39:35 | 显示全部楼层
已采用互斥信号量
要确保资源已被释放, 要vTaskDelete前先调用xSemaphoreTake,也就是说要确保资源被释放了才能删除任务,
从结果来看,FreeRTOS应该不管的Semaphore的状态,需要使用者自己管理
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 15:57 , Processed in 0.211727 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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