要使用任务通知,就要将宏configUSE_TASK_NOTIFICATIONS置1 在FreeRTOS.h文件768行
发送任务通知xTaskNotify,此函数发送任务通知的时候带有通知值
BaseTypep_t xTaskNotify(TaskHandle_t xTaskToNotify, //任务句柄,指定任务通知是发送给哪个任务的
uint32_t ulValue, //任务通知值
eNotifyAction eAction) //任务通知更新的方法,这是一个枚举类型
返回值:
pdFAIL:当参数eAction设置为eSetValueWithoutOverwrite的时候,如果任务通知值没有更新成功就返回pdFAIL
pdPASS:eAction设置为其他选项的时候统一返回pdPASS
typedef enum{eNoAction=0,
eSetBits,//更新指定的bit
eIncrement,//通知值加1
eSetValueWithOverwrite,//覆写的方式更新通知值
eSetValueWithoutOverwrite//不覆写通知值
}eNOtifyAction
vTaskNotifyGiveFromISR()发送通知中断版本,发送通知,不带通知值并且不保留接收任务的通知值,此函数会将接收任务的通知值加1.
void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, //任务句柄,指定任务通知是发送给哪个任务的
BaseType_t *pxHigherPriorityTaskWoken ) //退出函数以后是否进行任务切换,此值被函数自动设置
xTaskNotifyGive 发送通知,不带通知值并且不保留任务的通知值,此函数会将接收任务的通知值加1,用于在任务中
BaseType_t TaskNotifyGive(TaskHandle_t xTaskToNotify);//任务句柄,指定任务通知是发送给哪个任务的
返回值:pdPASS:此函数只会返回pdPASS
获取任务通知 ulTaskNotifyTake,当任务通知用作二值信号量或者计数型信号量的时候可以使用此函数来获取信号量
uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit,// 参数为pdFALSER:退出函数的时候任务通知值减1,参数为pdTRUE:退出函数时,任务通知清零.类似二值信号量
TickType_t xTicksToWait )//阻塞时间
返回值:任务通知值减少或者清零之前的值
获取任务通知 xTaskNotifyWait,不管任务通知用作二值信号量,计数型信号量,队列和事件标志组中的哪一种,都可以使用此函数来获取任务通知。但是当任务通知用作位置信号量和计数型信号量的时候推荐使用ulTaskNotifyTake()
BaseType_t xTaskNotifyWait(uint32_t ulBitsToClearOnEntry,//当没有接收到任务通知的时候将任务通知值
//与此参数的取反值进行位与运算,当此参数为0xffffffff //与此参数的取反值进行位与运算,当此参数为0xffffffff
//或者ULONG_MAX的时候就会将任务通知值清零 //或者ULONG_MAX的时候就会将任务通知值清零
uint32_t ulBitsToClearOnExit,//如果接收了任务通知,
//在做完相应的处理退出函数之前将任务通知值与此参数 //在做完相应的处理退出函数之前将任务通知值与此参数
//的取反值进行位与运算,此参数为0xffffffff //的取反值进行位与运算,此参数为0xffffffff
//或者ULONG_MAX的时候就会将任务通知清零 //或者ULONG_MAX的时候就会将任务通知清零
uint32_t pulNotificationValue,//此参数用来保存任务通知值
TickType_t xTicksToWait);//阻塞时间
返回值:
pdTRUE:获取到了任务通知
pdFALSE:任务通知获取失败