FreeRTOS学习笔记------任务调度机制

本文详细阐述了FreeRTOS的默认调度机制,包括优先级处理、任务状态(运行态、就绪态、阻塞态、暂停态)以及任务切换过程,特别强调了Tick和PendSV中断在任务调度中的作用。

调度机制概述

FreeRTOS的默认调度机制具有以下特点:

优先级不同

  • 高优先级的任务优先执行,可以抢占低优先级的任务;
  • 高优先级的任务不停止,低优先级的任务永远无法执行;
  • 同等优先级的任务轮流执行(时间片轮转)

状态

  • 运行态
  • 就绪态
  • 阻塞态
  • 暂停态

通过链表深入理解调度机制

任务创建时,任务被加入就绪态链表尾部,具体流程如下所示:

上述示例中,实际创建了4个任务,xTaskStartScheduler函数会创建优先级为0的空闲任务。pxReadyTaskLists是一个链表数组,大小与优先级的数量相同。创建任务时,会根据任务的优先级把任务添加进相应链表的尾部。上述示例的链表情况如下所示:

执行时,从数组的高地址向低地址查找任务,并从链表的头部逐个取出任务进行执行。

任务的切换与Tick和PendSV中断有关,最终的切换在PendSV中断通过调用vTaskSwitchContext函数完成,与

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值