官方文章在这里:https://www.freertos.org/taskandcr.html
Task 可以理解为 线程 ,线程当然就是优先级(priority)的概念,如果两个线程,有不同的优先级,当然就是优先级高的优先执行(占用CPU资源)。 那问题来了, 是怎么 占用 呢?
如果一个线程A在运行过程中,另一个优先级更高的线程B启动了(进入 Ready 状态),则B会立即执行(进入 Running 状态),A则立马会停止(进入 Ready 状态)
现在做一个测试程序来验证一下,
测试环境:ESP32-WROOM-32E/IDF v4.3
代码如下:2个线程,task2 高(priority=2) task1 低(priority = 1)
void my_delay(int val)
{
for (int k = 0; k < 10; ++k)
{
int i = 0;
for (; i < 100; ++i)
for (int j = 0; j < 10000; ++j)
;
printf("in dealy... %d\n", val);
}
}
void task(void * pvParameters)
{
int flag = *(int*)pvParameters;
while (true)
{
int tick = XTHAL_GET_CCOUNT();
printf("%d:task%d running...\n", tick,flag);
my_delay(flag);
printf("%d:task%d running...DONE.%d\n", tick, flag,XTHAL_GET_CCOUNT());
vTaskDelay(2000 / portTICK_PERIOD_MS);//SLEEP 2秒钟
}
}
void app_main(void)
{
/* Print chip information */
esp_chip_info_t chip_info;
esp_chip_info(&chip_info);
printf("This is %s chip with %d CPU core(s), WiFi%s%s, ",
CONFIG_IDF_TARGET,
chip_info.cores,
(chip_info.features &