typedef struct {
byte pinNum;
int keepTime;
} LED;
LED led_1{2, 500};
//每个任务都是一个子程序,也有setup{预先设置}和loop{循环}部分区分
void Task1(void *pvParam) {
LED * LEDptr = (LED*)pvParam;
pinMode(LEDptr->pinNum, OUTPUT);
Serial.println("Only Run Once");
while (1) {
Serial.println(LEDptr->pinNum);
digitalWrite(LEDptr->pinNum, !digitalRead(LEDptr->pinNum));
vTaskDelay(LEDptr->keepTime);
Serial.println("recycleing");
Serial.println(ESP.getHeapSize());
}
}
void Task2(void *pvParam) {
Serial.println("deleted Task1");
TaskHandle_t taskHandle = (TaskHandle_t) pvParam;
vTaskDelete(taskHandle);//如果task2不断运行,第二次删除的是空指针
vTaskDelay(1000);
vTaskDelete(NULL);
Serial.println("deleted Task2");
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32-C3!");
TaskHandle_t taskHandle_1, taskHandle_2;
xTaskCreatePinnedToCore(Task1, "Task1", 512 + 114 * 3, &led_1, 1, &taskHandle_1, 1);
vTaskDelay(2000);
int waterMark = uxTaskGetStackHighWaterMark(taskHandle_1);
Serial.println("Task1 Free memory is ");
Serial.println(waterMark);
xTaskCreatePinnedToCore(Task2, "Task2", 512, (void*)taskHandle_1, 1, &taskHandle_2, 1);
waterMark = uxTaskGetStackHighWaterMark(taskHandle_2);
Serial.println("Task2 Free memory is ");
Serial.println(waterMark);
}
void loop() {
}