#include <FreeRTOS.h>
#include <task.h>
void task(void *param_t){
while(1){
printf("任务 [%s] 优先级: %u 运行核心:%d\n", pcTaskGetName(NULL),uxTaskPriorityGet(NULL),xPortGetCoreID());
delay(1000);
}
}
void task2(void *param_t){
while(1){
delay(100);
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32-S3!");
xTaskCreatePinnedToCore(task, "LED-TASK", 10240, NULL, 1, NULL, 0);
xTaskCreatePinnedToCore(task, "GateWay", 10240, NULL, 2, NULL, 1);
xTaskCreatePinnedToCore(task, "Display", 10240, NULL, 3, NULL, 0);
xTaskCreatePinnedToCore(task, "Keyboard", 10240, NULL, 4, NULL, 1);
xTaskCreatePinnedToCore(task2, "NULLTASK", 1024, NULL, 5, NULL, 1);
}
// 遍历任务列表,代替vTaskList功能
void traverse(){
// 获得空闲任务,第一个任务
String STATUS[] = {"运行中","就绪","已阻塞","已挂起","已删除"};
// TaskHandle_t xHandle = xTaskGetIdleTaskHandle();
TaskHandle_t xHandle =xTaskGetCurrentTaskHandle(); // 这种获取方式不正确,有可能不是第一个任务
printf("-------------------------------------------------\n");
printf("%-16s %-4s %8s %8s %8s\n","名称","优先级","状态","核心", "剩余内存");
while (xHandle != NULL){
uint32_t core_id = 0;
printf("%-16s %-4d %8s %4d %8d\n",
pcTaskGetName(xHandle), // 获取任务名称
uxTaskPriorityGet(xHandle), // 获取任务优先级
STATUS[eTaskGetState(xHandle)], // 获取任务当前状态
xTaskGetAffinity(xHandle), // 获取任务运行在哪个核心
uxTaskGetStackHighWaterMark(xHandle)); // 获取任务堆栈水位线
xHandle = pxTaskGetNext(xHandle);
}
printf("-------------------------------------------------\n");
}
void loop() {
traverse();
delay(1000); // this speeds up the simulation
}