门户网站建设收费,wordpress用什么linux,网站建设工作室 怎么样,湖南网站设计方案一.任务通知的相关API
1. vTaskNotifyGive(): 用于给指定任务发送通知。
void vTaskNotifyGive( TaskHandle_t xTaskToNotify );参数说明#xff1a;
xTaskToNotify: 被通知的任务的句柄。返回值#xff1a;
无。2. ulTaskNotifyTake(): 用于等待并接收任务通知。
uint32_…一.任务通知的相关API
1. vTaskNotifyGive(): 用于给指定任务发送通知。
void vTaskNotifyGive( TaskHandle_t xTaskToNotify );参数说明
xTaskToNotify: 被通知的任务的句柄。返回值
无。2. ulTaskNotifyTake(): 用于等待并接收任务通知。
uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait );参数说明
xClearCountOnExit: 在接收到通知后是否清除计数器。
xTicksToWait: 等待通知的超时时间若设置为0则表示无限等待。返回值
接收到的通知值。3. xTaskNotifyStateClear(): 用于清除任务的通知值。
void xTaskNotifyStateClear( TaskHandle_t xTask );参数说明
xTask: 需要清除通知值的任务句柄。返回值
无。4. xTaskNotifyWait(): 用于等待并接收任务通知。
ulBitsToClearOnEntry 参数表示进入等待状态前要清除的任务通知位。它是一个按位掩码参数可以指定多个任务通知位。当任务调用 xTaskNotifyWait() 进入等待状态时如果任务通知中的任何一位被设置为 1那么它们将在进入等待前被清除。这样做可以确保任务在等待状态下不会立即返回而是等待新的任务通知事件的发生。
ulBitsToClearOnExit 参数表示退出等待状态时要清除的任务通知位。它是一个按位掩码参数可以指定多个任务通知位。当任务从等待状态返回时如果任务通知中的任何一位被设置为 1那么它们将在返回前被清除。这样做可以确保任务在返回后不再保留之前的任务通知状态从而为下一次的等待状态做好准备。
通过使用 ulBitsToClearOnEntry 和 ulBitsToClearOnExit 参数可以灵活地管理任务通知的状态。例如可以在进入等待状态前清除某些特定的任务通知位以确保任务在等待期间不被之前的通知事件干扰。同时在任务返回后清除任务通知位可以为下一次等待状态做好准备。
BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );参数说明
ulBitsToClearOnEntry: 在等待通知前需要清除的位。
ulBitsToClearOnExit: 在接收到通知后需要清除的位。
pulNotificationValue: 用于存储接收到的通知值的指针。
xTicksToWait: 等待通知的超时时间若设置为0则表示无限等待。返回值
若在指定时间内接收到通知则返回pdPASS1否则返回pdFALSE0。5. xTaskNotify()用于向指定任务发送通知。
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );参数说明
xTaskToNotify: 被通知的任务的句柄。
ulValue: 传递给任务的通知值。
eAction: 指定任务在接收到通知时要采取的操作。返回值
若成功发送通知则返回pdPASS1否则返回errQUEUE_FULL。6. xTaskNotifyWaitIndexed(): 用于等待多个任务的通知。
BaseType_t xTaskNotifyWaitIndexed( uint32_t uxIndexToWaitFor, uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );参数说明
uxIndexToWaitFor: 等待的任务的索引从0开始。
ulBitsToClearOnEntry: 在等待通知前需要清除的位。
ulBitsToClearOnExit: 在接收到通知后需要清除的位。
pulNotificationValue: 用于存储接收到的通知值的指针。
xTicksToWait: 等待通知的超时时间若设置为0则表示无限等待。返回值
若在指定时间内接收到通知则返回pdPASS1否则返回pdFALSE0。7. xTaskNotifyGiveFromISR(): 用于在中断服务程序中给指定任务发送通知。
BaseType_t xTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken );参数说明
xTaskToNotify: 被通知的任务的句柄。
pxHigherPriorityTaskWoken: 在执行该函数时是否唤醒了更高优先级的任务的标志位。返回值
若成功发送通知则返回pdPASS1否则返回pdFAIL0。8. xTaskGenericNotify(): 用于向指定任务发送通知并返回任务接收到的通知值。
BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue );参数说明
xTaskToNotify: 被通知的任务的句柄。
ulValue: 传递给任务的通知值。
eAction: 指定任务在接收到通知时要采取的操作。
pulPreviousNotificationValue: 用于存储任务之前的通知值的指针。返回值
若成功发送通知则返回pdPASS1否则返回errQUEUE_FULL。二、使用FreeRTOS任务通知
1. 定义通知宏RECEIVE
#define RECEIVE 12. 创建任务TaskA接收任务通知
TaskHandle_t xHandleTaskA NULL;
void TaskA(void *pvParameters)
{const TickType_t xMaxBlockTime pdMS_TO_TICKS(503);BaseType_t xResult pdFALSE;u32 ulNotifiedValue 0U;while (1){xResult xTaskNotifyWait(pdFALSE, BLE_EVENT_ALL, ulNotifiedValue, xMaxBlockTime);if (xResult pdPASS){if ((ulNotifiedValue RECEIVE) ! 0){//RECEIVE 通知接收成功}}}
}xTaskCreate(TaskA, TaskA, 128, NULL, 5, xHandleTaskA);3. 发送任务通知
void SendNotify(void)
{u32 ulNotifiedValue 0U;xTaskGenericNotify(xHandleTaskA , RECEIVE, eSetBits, ulNotifiedValue);
}
三、常用的FreeRTOS任务通知API对比
1. ulTaskNotifyTake和xTaskNotifyWait
ulTaskNotifyTake和xTaskNotifyWait都是FreeRTOS中用于等待任务通知的API它们之间的区别如下
参数和返回值
ulTaskNotifyTake使用较少的参数只需指定清除通知计数的选项并将通知计数作为返回值。如果未收到通知则会一直等待。
xTaskNotifyWait具有更多的参数包括期望的通知值、清除通知计数的选项以及最大等待时间。它不仅可以等待传递给目标任务的通知值还可以等待其它事件、信号量或队列等。兼容性
ulTaskNotifyTake是FreeRTOS早期版本中提供的API之一已被xTaskNotifyWait取代。
xTaskNotifyWait引入自FreeRTOS v10.3.0版本取代了旧版本的vTaskNotifyWait()函数以提供更好的可用性和兼容性。功能和灵活性
ulTaskNotifyTake主要用于在任务之间发送简单通知只能接收二进制信号量并不能直接接收任意的32位通知值。
xTaskNotifyWait通用的任务等待函数可以用于等待任务通知、信号量、队列等。除了等待通知值外还可以等待其他类型的事件从而提高了灵活性和适用性。2 ulTaskNotifyTake和xTaskNotifyWait
xTaskNotify和xTaskGenericNotify是FreeRTOS中用于任务通知的两个API它们之间的区别如下
功能和灵活性
xTaskNotify是一个专门设计用于在任务之间发送简单通知的API。它基于二进制信号量实现只能传递一个固定值0或非0给目标任务。在接收通知时目标任务可以选择清除通知计数。
xTaskGenericNotify是一个通用的任务通知函数提供了更强大和灵活的功能。它基于32位通知值可以传输任意值给目标任务并且可以根据需要执行多种操作如清除通知计数、设置计数器为特定值等。参数和返回值
xTaskNotify使用较少的参数只需指定目标任务句柄、通知值和是否清除通知计数。
xTaskGenericNotify具有更多的参数包括目标任务句柄、通知值、操作选项和保存之前通知值的指针。返回值方面xTaskNotify返回通知是否成功发送而xTaskGenericNotify可以返回通知是否成功发送以及之前的通知值。兼容性
xTaskNotify引入自FreeRTOS v10.3.0版本并取代了旧版本的vTaskNotifyGive()和ulTaskNotifyTake()函数以提供更好的可用性和兼容性。
xTaskGenericNotify引入自FreeRTOS v10.4.0版本为任务通知机制提供了更大的灵活性和功能性。