游戏网站策划书,一键优化大师,自己做博客网站,北京网站建设认知信号量 信号#xff1a;起通知作用。 量#xff1a;表示资源的数量。 当量没有限制时#xff0c;就是计数型信号量。 当量只有0、1时#xff0c;就是二进制信号量。 支持的动作#xff1a;give给出资源#xff0c;计数值1#xff1b;take获得资源#xff0c;计数值-1。…
信号量 信号起通知作用。 量表示资源的数量。 当量没有限制时就是计数型信号量。 当量只有0、1时就是二进制信号量。 支持的动作give给出资源计数值1take获得资源计数值-1。 队列信号量 可以容纳多个数据 创建队列时有2部分内存队列结构体、存储数据的空间 只有计数值无法容纳其他数据。 创建信号量时只需要分配信号量结构体 生产者没有空间存入数据时可以阻塞生产者用于不阻塞计数值已经达到最大时返回失败消费者没有数据时可以阻塞消费者没有数据时可以阻塞
二进制信号量计数型信号量被创建时初始值为0被初始化时初始值可以设定其他操作是一样的其他操作是一样的 创建信号量
二进制信号量计数型信号量动态创建xSemaphoreCreateBinary计数值初始值为0xSemaphoreCreateCountingvSemaphoreCreateBinary计数值初始值为1过时了静态创建xSemaphoreCreateBinaryStaticxSemaphoreCreateCountingStatic
/* 创建一个二进制信号量返回它的句柄。* 此函数内部会分配信号量结构体* 返回值: 返回句柄非NULL表示成功
*/
SemaphoreHandle_t xSemaphoreCreateBinary( void );/* 创建一个二进制信号量返回它的句柄。* 此函数无需动态分配内存所以需要先有一个StaticSemaphore_t结构体并传入它的指针* 返回值: 返回句柄非NULL表示成功
*/
SemaphoreHandle_t xSemaphoreCreateBinaryStatic( StaticSemaphore_t *pxSemaphoreBuffer );/* 创建一个计数型信号量返回它的句柄。* 此函数内部会分配信号量结构体* uxMaxCount: 最大计数值* uxInitialCount: 初始计数值* 返回值: 返回句柄非NULL表示成功
*/
SemaphoreHandle_t xSemaphoreCreateCounting(UBaseType_t uxMaxCount, UBaseType_t uxInitialCount);/* 创建一个计数型信号量返回它的句柄。* 此函数无需动态分配内存所以需要先有一个StaticSemaphore_t结构体并传入它的指针* uxMaxCount: 最大计数值* uxInitialCount: 初始计数值* pxSemaphoreBuffer: StaticSemaphore_t结构体指针* 返回值: 返回句柄非NULL表示成功
*/
SemaphoreHandle_t xSemaphoreCreateCountingStatic( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount, StaticSemaphore_t *pxSemaphoreBuffer ); 删除信号量 对于动态创建的信号量不再需要它们时可以删除它们以回收内存。 vSemaphoreDelete可以用来删除二进制信号量、计数型信号量。 /* xSemaphore: 信号量句柄你要删除哪个信号量 */
void vSemaphoreDelete( SemaphoreHandle_t xSemaphore ); give/take 二进制信号量、计数型信号量的give、take操作函数是一样的。也分两个版本给任务使用、给ISR使用。 在任务中使用在ISR中使用givexSemaphoreGivexSemaphoreGiveFromISRtakexSemaphoreTakexSemaphoreTakeFromISR