liguoye105 发表于 2022-4-28 11:55:38

信号量异常问题

遇到一个奇怪问题,在没有释放信号量的前提下,却能获取到一次信号量然后进入阻塞状态,大家帮忙看看

liguoye105 发表于 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();

liguoye105 发表于 2022-4-28 14:13:43

focus012 发表于 2022-5-5 22:41:20

我遇到过用cubemx生成的程序,二值信号量创建后即有效。跟踪创建函数后发现,创建完信号量之后他又执行了一句:          if (xSemaphoreGive (hSemaphore) != pdPASS),相当于释放了一次信号量。这是个坑
页: [1]
查看完整版本: 信号量异常问题