硬汉嵌入式论坛

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

[FreeRTOS] 信号量异常问题

[复制链接]

7

主题

9

回帖

30

积分

新手上路

积分
30
发表于 2022-4-28 11:55:38 | 显示全部楼层 |阅读模式
遇到一个奇怪问题,在没有释放信号量的前提下,却能获取到一次信号量然后进入阻塞状态,大家帮忙看看
1651117713(1).png 接收.png
回复

使用道具 举报

7

主题

9

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2022-4-28 13:44:10 | 显示全部楼层
本帖最后由 liguoye105 于 2022-4-28 14:10 编辑

找到问题了

1、异常信号量出现  创建信号量  的函数是  vSemaphoreCreateBinary();  (注意是v),查阅资料这是旧版Free RTOS的信号量创建函数,用它创建信号量时UBaseType_t uxMessagesWaiting的值默认是1,
这就是说创建信号量默认count值是1,所以没有释放信号量也能获取一次信号量并进入阻塞状态。

2、更换信号量创建函数为  xSemaphoreCreateBinary();     UBaseType_t uxMessagesWaiting的值默认是0,这是正确情况。

3、问题来了,我使用的rtos  版本是  V10.3  ,已经是新版了,用stm32cubeide  创建信号量时为啥还是vSemaphoreCreateBinary();
回复

使用道具 举报

7

主题

9

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2022-4-28 14:13:43 | 显示全部楼层
屏幕截图 2022-04-28 141126.png
回复

使用道具 举报

2

主题

26

回帖

32

积分

新手上路

积分
32
发表于 2022-5-5 22:41:20 来自手机 | 显示全部楼层
我遇到过用cubemx生成的程序,二值信号量创建后即有效。跟踪创建函数后发现,创建完信号量之后他又执行了一句:          if (xSemaphoreGive (hSemaphore) != pdPASS),相当于释放了一次信号量。这是个坑
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 18:04 , Processed in 0.290209 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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