一、遇到一个奇怪问题,在没有释放信号量的前提下,却能获取到一次信号量然后进入阻塞状态
二、解决问题
1、异常信号量出现 创建信号量 的函数是 vSemaphoreCreateBinary(); (注意是v),查阅资料这是旧版Free RTOS的信号量创建函数,用它创建信号量时UBaseType_t uxMessagesWaiting的值默认是1,
这就是说创建信号量默认count值是1,所以没有释放信号量也能获取一次信号量并进入阻塞状态。
2、更换信号量创建函数为 xSemaphoreCreateBinary(); UBaseType_t uxMessagesWaiting的值默认是0,这是正确情况。
3、问题来了,我使用的rtos 版本是 V10.3 ,已经是新版了,用stm32cubeide 创建信号量时为啥还是vSemaphoreCreateBinary();
三、建议
STM32CUBEMX 对外设的配置很方便,值得推荐,但是对Free RTOS又加了一层封装,用起来不是太舒服,建议外设可以用软件配置,Free RTOS还是添加原版本的比较好。