信号量异常问题
遇到一个奇怪问题,在没有释放信号量的前提下,却能获取到一次信号量然后进入阻塞状态,大家帮忙看看本帖最后由 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(); 我遇到过用cubemx生成的程序,二值信号量创建后即有效。跟踪创建函数后发现,创建完信号量之后他又执行了一句: if (xSemaphoreGive (hSemaphore) != pdPASS),相当于释放了一次信号量。这是个坑
页:
[1]