Freerots----任务通知
一、任务通知概念:
我们使用队列、信号量、事件组等等方法时,并不知道对方是谁。使用任务通知时,可以明确指定:通知哪个任务。
使用队列、信号量、事件组时,我们都要事先创建对应的结构体,双方通过中间的结构体通信。
比如(队列):
需要创建:
然后用g_xQueuePlatform结构体通讯:
队列、信号量、事件组:
任务通知:(直接用任务通讯就可以,任务句柄)
二、任务通知函数
推荐使用:xTaskNotify/xTaskNotifyWait
xTaskNotify() 比 xTaskNotifyGive() 更灵活、强大,使用上也就更复杂。
这几个函数的原型如下:
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );
BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify,
uint32_t ulValue,
eNotifyAction eAction,
BaseType_t *pxHigherPriorityTaskWoken );
BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry,
uint32_t ulBitsToClearOnExit,
uint32_t *pulNotificationValue,
TickType_t xTicksToWait );
三、实例
还是以汽车为例子,创建三个汽车任务,用汽车任务一去通知任务二和任务三。
1.首先创建任务:
2.接着使用汽车任务一去通知任务二和任务三:
写入任务句柄(g_TaskHandleCar2)就可以了,不需要像队列或者事件组一样去创建结构体了。
这里使用了两个不同的通知任务。
3.任务二和任务三等待任务:
这里就只截任务二的,反正都是调用这个函数。