FreeRTOS学习笔记 5 - 调度

目录

1. 基于时间片的抢占式调度

2. 无时间片的抢占式调度

3. 合作式调度


FreeRTOS操作系统支持三种调度方式:抢占式调度,时间片调度和合作式调度。可以通过configUSE_PREEMPTION和configUSE_TIME_SLICING配置调度算法。

1. 基于时间片的抢占式调度

当configUSE_PREEMPTION = 1且configUSE_TIME_SLICING=1时是基于时间片的抢占式调度。

用之前RT Thread的测试代码验证一下。2个任务代码如下:

static void thread1Entry(void *parameter)
{
    uint32_t count = 0;

    while (1)
    {
        Printf("1:%d\n", count++);
        delayms(600);
    }
}

static void thread2Entry(void *parameter)
{
    uint32_t count = 0;

    while (1)
    {
        Printf("2:%d\n", count++);
        delayms(300);
    }
}

创建任务时将任务1的优先级高于任务2。可以看到任务1一直运行。

改为2个任务的优先级相同,则任务1打印1次,而任务2打印2次,循环执行。

测试结果和RT Thread一样。

2. 无时间片的抢占式调度

当configUSE_PREEMPTION = 1且configUSE_TIME_SLICING=0时是无时间片的抢占式调度。

当任务1的优先级高于任务2时,结果和之前的一样,任务1一直运行。

当任务1的优先级等于任务2时,任务1还是一直运行。

3. 合作式调度

当configUSE_PREEMPTION = 0(configUSE_TIME_SLICING无关)时是合作式调度。

这种方式只有任务进入阻塞或者调用rtosThreadYield时才会任务切换,所以不管优先级怎么设置,任务1一直运行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值