void NotificationTaskInit();
void NotificationGive(void *param);
void NotificationWait(void *param);
void NotificationGiveTake_Init();
void NotificationGiveTask(void *param);
void NotificationTakeTask(void *param);
void NotificationEventGroup_Init();
void Notificationinput(void *param);
void Notificationoutput(void *param);
void setup() {
Serial.begin(115200);
Serial.print("通知功能是否开启 :");
Serial.println(configUSE_TASK_NOTIFICATIONS==true ? "YES":"NO");
Serial.print("每个任务最多有几个通知 :");
Serial.println(configTASK_NOTIFICATION_ARRAY_ENTRIES);
NotificationEventGroup_Init();
}
void loop() {
}
TaskHandle_t xTaskWait;
void NotificationTaskInit()
{
xTaskCreatePinnedToCore(NotificationGive,"NotificationGive",1024*2,NULL,1,NULL,1);
xTaskCreatePinnedToCore(NotificationWait,"NotificationWait",1024*2,NULL,1,&xTaskWait,1);
}
void NotificationGive(void *param)
{
//uint32_t ulNotificationValue;
pinMode(25,INPUT);
BaseType_t xResult;
while(1)
{
if(digitalRead(25)==LOW)
{
//xResult=xTaskNotify(xTaskWait,0,eIncrement);
//xResult=xTaskNotify(xTaskWait,0,eNoAction);
xResult=xTaskNotify(xTaskWait,(1UL<<4UL),eSetBits);
//xResult=xTaskNotify(xTaskWait,0b1111,eSetValueWithOverwrite);
xResult=xTaskNotify(xTaskWait,(1UL<<4UL),eSetValueWithoutOverwrite);
Serial.println(xResult==pdPASS ? "成功\n":"失败\n");
vTaskDelay(200);
}
}
}
void NotificationWait(void *param)
{
uint32_t ulNotificationValue;
BaseType_t xResult;
while(1)
{
xResult=xTaskNotifyWait(0x00,0x00,&ulNotificationValue,portMAX_DELAY);
Serial.println(ulNotificationValue,BIN);
}
}
void NotificationGiveTake_Init()
{
xTaskCreatePinnedToCore(NotificationGiveTask,"NotificationGiveTask",1024*2,NULL,1,NULL,1);
xTaskCreatePinnedToCore(NotificationTakeTask,"NotificationTakeTask",1024*2,NULL,1,&xTaskWait,1);
}
void NotificationGiveTask(void *param)
{
pinMode(25,INPUT);
while(1)
{
if(digitalRead(25)==LOW)
{
xTaskNotifyGive(xTaskWait);
vTaskDelay(200);
}
}
}
void NotificationTakeTask(void *param)
{
uint32_t ulNotificationValue;
pinMode(2,OUTPUT);
while(1)
{
ulNotificationValue=ulTaskNotifyTake(pdTRUE,portMAX_DELAY);
if(ulNotificationValue==1) digitalWrite(2,!digitalRead(2));
}
}
void NotificationEventGroup_Init()
{
xTaskCreatePinnedToCore(Notificationinput,"Notificationinput",1024*2,NULL,1,NULL,1);
xTaskCreatePinnedToCore(Notificationoutput,"NotificationTakeTask",1024*2,NULL,1,&xTaskWait,1);
}
void Notificationinput(void *param)
{
uint32_t input_p[9]=
{
0b1,
0b10,
0b100,
0b1000,
0b10000,
0b100000,
0b1000000,
0b10000000,
0b100000000,
};
pinMode(25,INPUT);
while(1)
{
if(digitalRead(25)==LOW)
{
xTaskNotify(xTaskWait,input_p[random(0,9)],eSetBits);
vTaskDelay(200);
}
}
}
void Notificationoutput(void *param)
{
uint32_t temp;
BaseType_t state;
while(1)
{
state=xTaskNotifyWait(0x00,ULONG_MAX,&temp,portMAX_DELAY);
if(state==pdTRUE) Serial.println(temp,BIN);
}
}