我试图用 FreeRTOS 学习 ESP-IDF,当我使用数据表中的代码时,更改非常小(参考代码:文档页面:53 和 54。董事会正在重新启动。
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
void vTask1(void* pvParameters){
const char* pcTaskName = "Task 1 is running \n";
for(;;){
printf(pcTaskName);
vTaskDelay(1000/ portTICK_PERIOD_MS);
}
}
void vTask2(void* pvParameters){
const char* pcTaskName = "Task 2 is running \n\n";
for(;;){
printf(pcTaskName);
vTaskDelay(1000/ portTICK_PERIOD_MS);
}
}
void app_main(void){
xTaskCreate( vTask1,
"TASK 1",
1000,
NULL,
1,
NULL );
xTaskCreate( vTask2, "TASK 2", 1000, NULL, 1, NULL);
vTaskStartScheduler();
while(true);
}
现在,当我删除了vTaskStartScheduler()
和无穷大的 while 循环时。程序没有重新启动,但输出不如预期。
使用的代码
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
void vTask1(void* pvParameters){
const char* pcTaskName = "Task 1 is running \n";
for(;;){
printf(pcTaskName);
vTaskDelay(1000/ portTICK_PERIOD_MS);
}
}
void vTask2(void* pvParameters){
const char* pcTaskName = "Task 2 is running \n\n";
for(;;){
printf(pcTaskName);
vTaskDelay(1000/ portTICK_PERIOD_MS);
}
}
void app_main(void){
xTaskCreate( vTask1,
"TASK 1",
1000,
NULL,
1,
NULL );
xTaskCreate( vTask2, "TASK 2", 1000, NULL, 1, NULL);
}
得到的输出是
- 我想了解为什么数据表中显示的第一个代码不起作用。
- 为什么第二个代码的行为不像 Task1->Task2 - Task1->Task2 ...