互斥信号量与二值信号量类似
但是互斥信号量可以解决二值信号量出现的优先级翻转问题,解决办法就是优先级继承
普通互斥信号量创建及运行,参阅安富莱电子demo
/* 互斥信号量句柄 */
static SemaphoreHandle_t xMutex = NULL;
static void vTaskTaskUserIF(void *pvParameters)
{
while(1)
{
/* 参数说明:信号量句柄,等待信号量可用的最大等待时间 */
/* 互斥信号量,xSemaphoreTake和xSemaphoreGive一定要成对的调用 */
xSemaphoreTake(xMutex, portMAX_DELAY);
printf("vTaskTaskUserIF\r\n");
/* 参数说明:信号量句柄 */
xSemaphoreGive(xMutex);
vTaskDelay(20);
}
}
static void vTaskLED(void *pvParameters)
{
TickType_t xLastWakeTime;
const TickType_t xFrequency = 200;
/* 获取当前的系统时间 */
xLastWakeTime = xTaskGetTickCount();
while(1)

本文详细介绍了如何在STM32开发中使用互斥信号量(xSemaphore),并讨论了它如何避免二值信号量的优先级翻转问题,通过优先级继承技术来确保任务执行顺序的正确性。实例代码展示了创建和在vTask中使用互斥信号量的步骤。
最低0.47元/天 解锁文章
904

被折叠的 条评论
为什么被折叠?



