3. STM32freeRTOS---vTaskDelay 和 vTaskDelayUntill,空闲与钩子函数,任务调度策略

一、vTaskDelay 和 vTaskDelayUntill

vTaskDelay :至少等待指定个数的tick interrupt才能变为就绪态。(所以在等待的时候是阻塞态)

vTaskDelayUntill :等待到指定的绝对时刻,才能变为就绪态(所以在等待的时候是阻塞态)。

 BaseType_t xTaskDelayUntil( TickType_t * const pxPreviousWakeTime,//开始时间
                                const TickType_t xTimeIncrement )// 时间差
void *Task1_func  (void *param)
{
    static tStart = xTaskGetTickCount();
    while(1)
        {
        printf("AS");
    }
#if 0
    vTaskDelay(20); //阻塞20ms
#else
    xTaskDelayUntil(tStart,30);//该任务的运行周期是30ms
#endif
}
void *Task2_func  (void *param)
{
    while(1)
        {
        printf("BJ");
    }
}

二、空闲任务与钩子函数

空闲任务:对自杀任务的资源回收,启动调度器函数vTaskStartScheduler 里面用静态分配或者动态分配 创建一个空闲任务。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
钩子函数要么处于运行态要么处于就绪态。

三、调度策略

之前讲过通过优先级来调度任务执行的先后顺序,但是不止通过优先级来调度。

在这里插入图片描述抢占

#define configUSE_PREEMPTION 1 //1使用抢占式内核,0使用协程[合作调度模式]
合作调度模式:不讲究什么高优先级低优先级,任务之间都是非常平等的地位,当一个任务执行时一直没有放弃对CPU的控制,那就算有比这个任务优先级还高的任务也得不到执行。所以在合作调度模式的情况下,任务们都需要十分谦虚,执行完了就需要放开对CPU的控制,好让其他任务对CPU控制。[调用阻塞性质的API]。

#define configUSE_TIME_SLICING 1 //1使能时间片调度[轮流执行] (默认式使能的)0—>不轮流执行

#define configIDLE_SHOULD_YIELD 1 //为1时空闲任务放弃CPU使用权给其他同优先级的用户任务【空闲任务礼让】

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值