FreeRTOS之基础知识

一,前后台系统

  1,没有操作系统的单片机程序,分为两个部分:前台系统和后台系统。包括:一个死循环和若干个中断服务函数。

  2,后台系统:一个死循环,调用API完成操作。任务级。

  3,前台系统:中断服务函数,用于处理系统的异步事件。中断级。

  4,

 

二,FreeRTOS内核是可剥夺型的

  1,可以剥夺其他任务的CPU使用权,它总是运行就绪任务中的优先级最高的那个任务。

  2,高优先级的任务可以打断低优先级任务的运行而取得 CPU 的使用权。

  3,同一个优先级下,可以有多个任务。

  4,任务和RTOS调度器。

  5,

 

三,STM32F407的FreeRTOS的计算是根据HCLK时钟源的。

 

四,FreeRTOS在STM32F407的系统配置问题:

  1,在FreeRTOSConfig.h文件,对FreeRTOS进行裁剪和配置

  2,在FreeRTOS.h文件,是与配置FreeRTOS宏定义的默认值

  3,

 

五,任务和任务优先级

  1,可以抢占时间片:高优先级的任务可以打断低优先级任务的运行而取得 CPU 的使用权。

  2,每个任务都有自己的运行环境, 不依赖于系统中其他的任务或者 RTOS 调度器。

  3,任何一个时间点只能有一个任务运行,具体运行哪个任务是由 RTOS 调度器来决定的。

  4,FreeRTOS 中的任务永远处于下面几个状态中的某一个:运行态、就绪态、阻塞态、挂起态。

  5,每 个 任 务 都 可 以 分 配 一 个 从 0~(configMAX_PRIORITIES-1) 的 优 先 级。优先级数字越低表示任务的优先级越低, 0 的优先级最低, configMAX_PRIORITIES-1 的优先级最高。空闲任务的优先级最低,为 0。

  6,每个任务都必须有个堆栈,当任务切换的时候将上下文环境保存在堆栈中,这样当任务再次执行的时候就可以从堆栈中取出上下文环境, 任务恢复运行。每个任务都拥有堆栈导致了 RAM 使用量增大。

  7,Cortex-M处理器支持计算前导零指令(该指令可选择下一个要运行的任务)

  8,多个优先级可共用同一个优先级,数量不限。

 

六,FreeRTOS调度器

  1,FreeRTOS 调度器的职责是确保当一个任务开始执行的时候其上下文环境(寄存器值,堆栈内容等)和任务上一次退出的时候相同。

  2,FreeRTOS 调度器确保处于就绪态或运行态的高优先级的任务获取处理器使用权。处于就绪态的优先级相同的任务就会使用时间片轮转调度器获取运行时间。

 

七,任务堆栈

  1,任务调度器在进行任务切换的时候会将当前任务的现场(CPU 寄存器值等)保存在此任务的任务堆栈中,等到此任务下次运行的时候就会先用堆栈中保存的值来恢复现场,恢复现场以后任务就会接着从上次中断的地方开始运行。

  2,创建任务的时候,开发者需要给任务分配一定的堆栈空间。

  3,定义任务堆栈大小的变量是4个字节的,所以任务的实际堆栈大小是我们多定义的4倍。

    示例:#define LED0_STK_SIZE 50    //表示LED0任务的堆栈大小为200个字节。

  4,

 

八,任务控制块TCB_t

  1,定义了每个任务的存储属性

  2,

posted @ 2018-06-01 20:51  Stephen1120  阅读(778)  评论(0)    收藏  举报