本文基于ESP32-S开发 之 PlatformIO
本文的主线 简介 => 创建/阻塞 => 挂起/恢复 => 问题
简介
Each task executes within its own context with no coincidental dependency on other tasks within the system or the RTOS scheduler itself. Only one task within the application can be executing at any point in time and the real time RTOS scheduler is responsible for deciding which task this should be
创建/阻塞
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <Arduino.h> void vTask1 (void *pvParameters) ;void vTask2 (void *pvParameters) ;void setup () { xTaskCreate (&vTask1, "Task 1" , 1024 , NULL , 1 , NULL ); xTaskCreate (&vTask2, "Task 2" , 1024 , NULL , 1 , NULL ); } void loop () { } void vTask1 (void *pvParameters) { for (;;) { printf ("Task 1\r\n" ); vTaskDelay (pdMS_TO_TICKS (1000 )); } } void vTask2 (void *pvParameters) { for (;;) { printf ("Task 2\r\n" ); vTaskDelay (pdMS_TO_TICKS (1000 )); } }
挂起/恢复
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #include <Arduino.h> xTaskHandle xTask1Handle; xTaskHandle xTask2Handle; void vTask1 (void *pvParameters) ;void vTask2 (void *pvParameters) ;void setup () { xTaskCreate (&vTask1, "Task 1" , 2048 , NULL , 1 , &xTask1Handle); xTaskCreate (&vTask2, "Task 2" , 2048 , NULL , 1 , &xTask2Handle); } void loop () { } void vTask1 (void *pvParameters) { portBASE_TYPE i = 0 ; for (;;) { printf ("Task 1 i=%d\r\n" , ++i); if (i >= 2 ) { vTaskSuspend (xTask1Handle); } vTaskDelay (pdMS_TO_TICKS (1000 )); } } void vTask2 (void *pvParameters) { portBASE_TYPE i = 0 ; for (;;) { printf ("Task 2 i=%d\r\n" , ++i); if (i >= 4 ) { vTaskResume (xTask1Handle); } vTaskDelay (pdMS_TO_TICKS (1000 )); } }
问题
Suspend Task vs Block Task
参考