//示例说明每个任务要有阻塞时间vTaskDelay(),否则会一直占用cpu时间,
//只有任务优先级高的函数阻塞时,再有机会让任务优先级较低的函数运行。
//甚至超过5秒会触发看门狗,导致cpu重启
//MyTask1的任务优先级为1,高于MyTask2的任务优先级0
void MyTask_1 (void * pvParam) {
while (1) {
Serial.println("In task1");
vTaskDelay(1000);
}
}
//MyTask2的任务优先级为0,低于MyTask1的任务优先级1
void MyTask_2 (void *pvParam) {
while (1) {
Serial.println("In Task2");
//MyTask2可以不用阻塞,因为任务优先级低于MyTask1,MyTask1阻塞到时后会自动抢占CPU
//vTaskDelay(500);
}
}
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
TaskHandle_t TaskHandle_1;
TaskHandle_t TaskHandle_2;
//两个任务的优先级不同,只有高优先级任务阻塞时,低优先级任务才有机会运行
xTaskCreate(MyTask_1, "MyTask1", 1024, NULL, 1, &TaskHandle_1 );
xTaskCreate(MyTask_2, "MyTask2", 1024, NULL, 0, &TaskHandle_2);
}
void loop() {
}