FreeRTOS 学习笔记(二) 任务管理

一、知识点

  • 1、FreeRTOS是一个轻量级嵌入式操作系统,源码公开,个人和商业都无需授权。
  • 2、FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同赋予一定的优先级,CPU总是让处于就绪态的,优先级最高的任务先运行。
  • 3、FreeRTOS内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。

  • 4、任务管理:

(1)每个任务都是一个功能相对独立的程序。任务具有程序入口,通常运行在一个死循环中,永不退出,也不返回任何结果。任务不应该执行到实现任务代码的末尾,必要时,应在末尾添加报错功能的代码,即当程序运行到此处时,以某种方式通知用户出错。此外,通常在此处添加一个删除任务的函数vTaskDelete( NULL ) //传入NULL参数表示删除的是当前的任务,以确保出错时该任务不致影响其他任务的运行。

  • 5、任务调度:

    (1)对于单核处理器来说,运行与内存的多个任务不可能同时获得处理器的服务,在任意给定时间内,仅会执行一个任务。这就意味着当一个任务占有处理器资源时,其他任务只能处于非运行态。

    (2)当任务处于非运行态时,该任务进行休眠,它的所有状态都被妥善保存,以便在下一次调试器决定让它进入运行态时可以恢复执行。当任务恢复执行时,其将精确地从离开运行态时正准备执行的那一条指令开始执行。任务从非运行态转移到运行态被称为切入。相反,任务从运行态转移到非运行态被称为切出。FreeRTOS的调度器是能让任务切入切出的唯一实体。

  • 6、任务创建xTaskCreate:

(1)这个函数的调用需要传入很多参数,包括指向函数名的指针,函数名,任务运行参数,堆栈空间大小,优先级,任务的句柄。

(2)可以在主函数中创建两个任务,然后启动任务调度器vTaskStartScheduler();也可以在一个函数中创建另一个函数,这需要在第一个函数进入死循环之前创建另一个任务。

  • 7、任务优先级:数值越大,优先级越高

(1)调度器总是在具备运行条件的任务中,选择具有最高优先级的任务使其进入运行状态。一个高优先级但不能够运行的任务意味着不会被调度器选中,取而代之以另一个优先级虽然更低但能够运行的任务。

(2)FreeRTOS支持不同任务共享同一个优先级,调度器将采用时间片轮转的方式保障同优先级的任务都得以执行。