两个函数都是创建计数型信号量的函数
1.用cube配置完了就会在MX_FREERTOS_Init()这个函数里创建这个函数,osSemaphoreCreate是CubeMX 提供的信号量操作函数接口,Count既是计数信号量的最大值,也是初始值。osSemaphoreCreate(a,b),a不知是什么东西,b是Count。
2.xSemaphoreCreateCounting是FreeRTOS提供的最原本的创建计数型信号量函数,xSemaphoreCreateCounting(a,b), a是计数信号量的最大计数值,b是初始值。
/*****************************************************************************************************************************************************/
3.按照正点原子的计数型信号量实验的话,xSemaphoreCreateCounting(255,0)。最大计数值是255,计数信号量初始值是0。只有在任务1中按下WK_UP之后才会释放信号量,则信号量加1,任务2中获取信号量才会执行之后的内容,获取当前可用信号量的数目并打印出来。所以程序运行之后,如果不按下WK_UP按键的话什么事情都不会发生,什么现象都没有,因为信号量初始值是0。
4.按照正点原子的计数型信号量实验的话,osSemaphoreCreate(osSemaphore(myCountingSem01), 255,),最大计数值是255,计数信号量初始值是255。按下WK_UP之后会释放信号量,则信号量加1,任务2中获取信号量执行之后的内容,获取当前可用信号量的数目并打印出来。程序运行之后,会一直获取到信号量因为计数信号量初始值是255,一直获取因此信号量一直减1,按下按键释放信号量,信号量会加1,一直不按则信号量一直减到0就和xSemaphoreCreateCounting一样了。
总结:两个函数的不同主要是计数信号量初始值不同引起的,没有信号量会一直死等。