如何知道哪个任务占用了二进制信号量?
How to know which task has taken a binary semaphore?
我有三个任务,它们共享一个二进制信号量myBinarySemaphore
。我想知道哪个任务当前有二进制信号量。我可以使用全局变量来执行此操作,但 freeRTOS 是否为此提供了方法?
这是代码,我正在寻找一种 freeRTOS 方法来检查哪个任务具有 binarySemaphore,例如 taskC
。 xTaskOwner
纯粹是出于示例目的而发明的。谢谢
void taskA(void *pvParameters)
{
for(;;)
{
if(xSemaphoreTake(myBinarySemaphore, (TickType_t) 10) == pdTRUE)
{
xSemaphoreGive(myBinarySemaphore);
}
}
}
void taskB(void *pvParameters)
{
for(;;)
{
if(xSemaphoreTake(myBinarySemaphore, (TickType_t) 10) == pdTRUE)
{
xSemaphoreGive(myBinarySemaphore);
}
}
}
void taskC(void *pvParameters)
{
for(;;)
{
if(xTaskOwner(myBinarySemaphore) == taskA) // <== How to check with freeRTOS which task has the semaphore ?
printf("taskA has the semaphore");
else if (xTaskOwner(myBinarySemaphore) == taskB)
printf("taskB has the semaphore");
}
}
PS & EDIT:假设 taskC 可以 运行 与其他任务同时进行,否则我的示例是错误的。
我会添加一个队列,其中包含一条简单的消息,说明哪个任务当前有信号量。每次获取信号量时,都会覆盖队列。在 taskC 中,您可以执行 xQueuePeek 并查看哪个任务进行了覆盖。
或
您可以使用事件标志来指示哪个任务具有信号量。每个任务在共享事件组上都有自己的标志。
我有三个任务,它们共享一个二进制信号量myBinarySemaphore
。我想知道哪个任务当前有二进制信号量。我可以使用全局变量来执行此操作,但 freeRTOS 是否为此提供了方法?
这是代码,我正在寻找一种 freeRTOS 方法来检查哪个任务具有 binarySemaphore,例如 taskC
。 xTaskOwner
纯粹是出于示例目的而发明的。谢谢
void taskA(void *pvParameters)
{
for(;;)
{
if(xSemaphoreTake(myBinarySemaphore, (TickType_t) 10) == pdTRUE)
{
xSemaphoreGive(myBinarySemaphore);
}
}
}
void taskB(void *pvParameters)
{
for(;;)
{
if(xSemaphoreTake(myBinarySemaphore, (TickType_t) 10) == pdTRUE)
{
xSemaphoreGive(myBinarySemaphore);
}
}
}
void taskC(void *pvParameters)
{
for(;;)
{
if(xTaskOwner(myBinarySemaphore) == taskA) // <== How to check with freeRTOS which task has the semaphore ?
printf("taskA has the semaphore");
else if (xTaskOwner(myBinarySemaphore) == taskB)
printf("taskB has the semaphore");
}
}
PS & EDIT:假设 taskC 可以 运行 与其他任务同时进行,否则我的示例是错误的。
我会添加一个队列,其中包含一条简单的消息,说明哪个任务当前有信号量。每次获取信号量时,都会覆盖队列。在 taskC 中,您可以执行 xQueuePeek 并查看哪个任务进行了覆盖。
或
您可以使用事件标志来指示哪个任务具有信号量。每个任务在共享事件组上都有自己的标志。