4、信号量(semaphore)
2022-11-30 14:43:31 1 举报
AI智能生成
v
作者其他创作
大纲/内容
特性
信号 --> 通知作用 量 --> 表示资源的数量
Counting Semaphores(计数型信号量) give +1, take -1
Binary Semaphores(二进制信号量) 最大为1
函数
创建
动态创建
SemaphoreHandle_t xSemaphoreCreateBinary( void );
SemaphoreHandle_t xSemaphoreCreateCounting(UBaseType_t uxMaxCount, UBaseType_t uxInitialCount);
静态创建
SemaphoreHandle_t xSemaphoreCreateBinaryStatic( StaticSemaphore_t *pxSemaphoreBuffer );
SemaphoreHandle_t xSemaphoreCreateCountingStatic( UBaseType_t uxMaxCount,
UBaseType_t uxInitialCount,
StaticSemaphore_t *pxSemaphoreBuffer );
UBaseType_t uxInitialCount,
StaticSemaphore_t *pxSemaphoreBuffer );
参数 uxMaxCount 最大计数值 uxInitialCount 初始计数值 pxSemaphoreBuffer StaticSemaphore_t结构体指针
删除
void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );
give/take
在任务中使用
BaseType_t xSemaphoreGive( SemaphoreHandle_t xSemaphore );
BaseType_t xSemaphoreTake(
SemaphoreHandle_t xSemaphore,
TickType_t xTicksToWait
);
SemaphoreHandle_t xSemaphore,
TickType_t xTicksToWait
);
ISR中使用
BaseType_t xSemaphoreGiveFromISR(
SemaphoreHandle_t xSemaphore,
BaseType_t *pxHigherPriorityTaskWoken
);
SemaphoreHandle_t xSemaphore,
BaseType_t *pxHigherPriorityTaskWoken
);
BaseType_t xSemaphoreTakeFromISR(
SemaphoreHandle_t xSemaphore,
BaseType_t *pxHigherPriorityTaskWoken
);
SemaphoreHandle_t xSemaphore,
BaseType_t *pxHigherPriorityTaskWoken
);
参数 pxHigherPriorityTaskWoken 如果释放信号量导致更高优先级的任务变为了就绪态,则*pxHigherPriorityTaskWoken = pdTRUE 返回值 pdTRUE --> 成功 如果二进制信号量的计数值已经是1,再次调用此函数则返回失败; 如果计数型信号量的计数值已经是最大值,再次调用此函数则返回失败
0 条评论
下一页