如图1所示,信号量目的
- 解决共享资源的访问问题。
- 处理实现任务-中断/任务-任务间的同步。问题(一个任务可继续执行的触发时机)
2,信号量分类
- 二值信号量:适合任务间的同步
- 数值信号量
- 互斥信号量:具有优先级继承机制,适合任务间对资源的互斥访问。
- 递归互斥信号量
3,特征
- 因为信号量阻塞的任务,信号量获取时,高优先级任务优先接触阻塞。
- 二值信号量是使用仅有1个队列项的队列实现的(是否是满)。
- 分为中断级别接口和应用级别接口。
4,相关API
//定义信号量的句柄类型(等同于队列句柄类型)
//队列句柄类型(typedef void * QueueHandle_t;)
typedef QueueHandle_t SemaphoreHandle_t;
#define semBINARY_SEMAPHORE_QUEUE_LENGTH ( ( uint8_t ) 1U )
#define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( uint8_t ) 0U )
#define semGIVE_BLOCK_TIME ( ( TickType_t ) 0U )
/*
这个旧的vSemaphoreCreateBinary()宏现在被弃用,代之以xSemaphoreCreateBinary()函数。注意,
使用vSemaphoreCreateBinary()宏创建的二进制信号量是在这样一种状态下创建的,即对“take”