FreeRTOS 中的 task 优先级 及 实际测试验证

官方文章在这里: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 & 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值