我试验了下,osEvent osSignalWait (int32_t signals, uint32_t millisec)函数的参数解释有误,@param signals wait until all specified signal flags set or 0 for any single signal flag.翻译:等待所有指定的信号标志设置完毕或者参数为0,等待任何一个信号标志设置。而实测发现signals设置为0,或者其它任何值,只要
调用osSignalSet (osThreadId thread_id, int32_t signal)设置了signal的任何一个bit,osSignalWait()都会继续执行。如果调用osEvent osSignalWait (int32_t signals, uint32_t millisec)时将signals参数写0,确实不会清除已经设置的标志,signals参数对应函数BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait )的ulBitsToClearOnExit参数,意思是退出时要清除的标志。你的问题可以不用改代码,直接写osSignalWait (0x00000007, 1000)即可。
osEvent osSignalWait (int32_t signals, uint32_t millisec)封装的函数
xTaskNotifyWait( 0,(uint32_t) signals, (uint32_t *)&ret.value.signals, ticks)
如果你进去的时候清零了,有效位被清除了,那么你接下来怎么判断标志位?
osSignalWait ()函数虽然进入的时候没有清理,但是出来的时候完成了清零,所有封装是没有问题的!
CMSIS OS 不单单封装了freeRTOS 还封装了 RTX UCOS 等,都统一用CMSIS OS API吧,这样大家移植都方便,不要在关心什么平台了 ARM收购KEIL后的大功劳
CMSIS-RTOS 就是一种标准呗 一样的api接口
我也遇到这个问题了
我试验了下,osEvent osSignalWait (int32_t signals, uint32_t millisec)函数的参数解释有误,@param signals wait until all specified signal flags set or 0 for any single signal flag.翻译:等待所有指定的信号标志设置完毕或者参数为0,等待任何一个信号标志设置。而实测发现signals设置为0,或者其它任何值,只要
调用osSignalSet (osThreadId thread_id, int32_t signal)设置了signal的任何一个bit,osSignalWait()都会继续执行。如果调用osEvent osSignalWait (int32_t signals, uint32_t millisec)时将signals参数写0,确实不会清除已经设置的标志,signals参数对应函数BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait )的ulBitsToClearOnExit参数,意思是退出时要清除的标志。你的问题可以不用改代码,直接写osSignalWait (0x00000007, 1000)即可。