FreeRTOS原理剖析:任务的基础知识

1. 任务的基础知识

1.1 前后台和多任务系统
  • 在裸机程序中,一般方式是在main()函数的while(1)中循环执行所有的程序,有时,使用中断去执行一些紧急的功能,中断中执行的程序称为前台,main()函数中执行的程序称为后台。
  • 对于前后台框架的程序,必须当前函数执行完,才会去执行下一个函数,其实时性比较差,但它耗用的资源少。
  • 在实际项目中,main()中会有一个周期(如1ms)轮询去执行main()函数中所有函数,同时专门使用一个定时器以一定周期(如500us)执行比较重要的函数,对于实时性要求不是很精确的项目,这种框架还是可以满足。
  • FreeRTOS是一个可剥夺性内核的多任务系统。在多任务系统中,高优先级可以打断低优先级,能让更高优先级的任务得到CPU资源,完成这种功能的是任务调度器,其任务调度器也是可剥夺性任务调度器。
1.2 协程(Co-routine)的特性

协程是为那些资源很少的MCU而做的,FreeRTOS 存在协程功能,但不再更新和维护。协程和任务在概念上是相似的,但有如下不同:

  • 堆栈使用方面: 所有的协程使用同一个堆栈,这样消耗比较少的RAM,而使用FreeRTOS任务中,每个任务都有自己的堆栈。
  • 调度器和优先级: 协程使用合作式的调度器,但是可以在使用抢占式的调度器中使用协程。
  • 宏实现: 协程是通过宏定义来实现的。
  • 使用限制: 为了降低对RAM 的消耗做了很多的限制。
1.3 任务和任务状态

在FreeRTOS中,可以将任务理解为进程。任务由FreeRTOS调度器调度,有优先级,有独立堆栈空间等。每个时间只能执行一个任务,具体执行那个任务,由FreeRTOS调度器决定,每个任务必须有一个任务状态,如下:
在这里插入图片描述

  • 运行态: 当前正在运行的任务称为运行态,对于单核微控制器,运行态的任务有且仅有一个。
  • 就绪态: 就绪态的任务在就绪列表中,表示当前无阻塞和挂起,只是有更高优先级的任务在执行,随时等待调度器调度。刚刚创建的任务处于就绪态。
  • 阻塞态: 阻塞态的任务不在就绪列表中,不能被调度器调用。它表示正在等待一个外部事件,如队列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值