FreeRTOS教程1 基础知识

1、准备材料

正点原子stm32f407探索者开发板V2.4

STM32CubeMX软件(Version 6.10.0

Keil µVision5 IDE(MDK-Arm

野火DAP仿真器

2、学习目标

了解 FreeRTOS 相关知识,并熟悉使用 STM32CubeMX 软件配置 FreeRTOS 工程的流程

3、前提知识


读者须知:本系列教程中关于 FreeRTOS 的学习重点为应用,不会剖析源码内容,利用 STM32CubeMX 软件生成的 FreeRTOS 工程源代码中一般不会直接调用 FreeRTOS 的 API 函数,而是调用了 CMSIS-RTOS 封装好的上层API函数,但此系列教程主要介绍属于 FreeRTOS 的各类 API 函数及其应用,对于 CMSIS-RTOS 的 API 函数仅简单描述,读者需自行理解,另外对于常见硬件原理不再详细说明,感兴趣读者可阅读笔者的 “STM32CubeMX+STM32F4系列教程


3.1、FreeRTOS简介

FreeRTOS是一个完全免费且开源的嵌入式实时操作系统(Real-Time Operating System,简称RTOS) ,其一般将任务称为线程,以下列表为FreeRTOS的一些特点,笔者认为学习FreeRTOS的应用正是掌握和理解下列各个特性

  1. 抢占式(pre-emptive)或合作式(co-operative)任务调度方式
  2. 非常灵活的优先级管理
  3. 灵活、快速且轻量化的任务通知机制(task notification)
  4. 消息队列(Queue)
  5. 二值信号量(Binary Semaphores)
  6. 计数信号量(Counting Semaphores)
  7. 互斥量(Mutex)
  8. 递归互斥量(Recursive Mutex)
  9. 软件定时器(Timers)
  10. 事件组(Events)
  11. 时间节拍钩子函数
  12. 空闲任务钩子函数
  13. 栈溢出检测
  14. 任务运行时间统计收集
  15. 完整的中断嵌套模型
  16. 用于低功耗的无节拍(Tickless)特性

RTOS主要应用于对实时性有要求的嵌入式系统,所谓实时性就是任务完成的时间是确定的,实时性又分为软实时和硬实时

软实时指任务完成时间是确定的,但是如果任务超时了也不会对整个系统产生破坏性影响;硬实时是指任务完成时间是确定的,但是如果任务超时未完成则会对整个系统产生灾难性影响,基于FreeRTOS开发的系统可以完成硬实时的要求

3.2、源码函数命名规律

FreeRTOS源码中函数命名规律:FreeRTOS源码中各个函数并非随机命名,而是有规律的命名,这样方便使用者看到名字就能获得该函数更多的信息,其函数名一般由 ① 函数返回值类型简写,② 函数所在文件 和 ③ 函数作用名称这三部分组成

① 函数返回值类型简写主要有:

  1. 'u'表示'unsigned'
  2. 'c'表示'char'
  3. 's'表示'int16_t(short)'
  4. 'l'表示'int32_t(long)'
  5. 'p'表示指针类型变量
  6. 'x'表示'BaseType_t'结构体和其他非标准类型的变量名
  7. 'uc'表示'UBaseType_t'结构体
  8. 'v'表示'void'
  9. 'prv'表示私有函数无返回值

这些简写可以自由组合在一起,例如 'pc' 表示 'char *' 类型,'uc' 表示 'unsigned char' 类型

② 函数所在文件:

  1. 'CoRoutine'表示该函数定义在'coroutine.c'文件中的
  2. 'EventGroup'表示该函数定义在'event_groups.c'文件中的
  3. 'List'表示该函数定义在'list.c'文件中的
  4. 'Queue'表示该函数定义在'queue.c'文件中的
  5. 'StreamBuffer'表示该函数定义在'stream_buffer.c'文件中的
  6. 'Task'表示该函数定义在'tasks.c'文件中的
  7. 'Timer'表示该函数定义在'timers.c'文件中的
  8. 'Port'表示该函数定义在'port.c'或'heap_x.c'文件中的

举几个例子:

  1. xTaskCreate 表示函数返回值为 BaseType_t 结构体类型,函数被定义在 'tasks.c' 文件中,函数作用为“创建”
  2. vTaskSuspend 表示函数返回值为 void 类型,函数被定义在 'tasks.c' 文件中,函数作用为“挂起”
  3. prvTaskIsTaskSuspended 表示该函数为私有函数,仅能在 'tasks.c' 文件中使用,函数作用为“判断任务是否被挂起”

4、动手创建一个FreeRTOS空工程

4.1、CubeMX相关配置

4.1.1、工程基本配置

打开STM32CubeMX软件,单击ACCESS TO MCU SELECTOR选择开发板MCU(选择你使用开发板的主控MCU型号),选中MCU型号后单击页面右上角Start Project开始工程,具体如下图所示

开始工程之后在配置主页面System Core/RCC中配置HSE/LSE晶振,在System Core/SYS中配置Debug模式,因为系统滴答定时器SysTick要被FreeRTOS所使用,所以需要配置HAL库的时基源为除系统滴答定时器SysTick外的选项,笔者这里选择了基本定时器TIM6,这两个时基源均为1ms,具体配置如下图所示

4.1.2、时钟树配置

系统时钟使用8MHz外部高速时钟HSE,HCLK、PCLK1和PCLK2均设置为STM32F407能达到的最高时钟频率,具体如下图所示

4.1.3、外设参数配置

单击Pinout & Configuration页面左边功能分类栏目Middleware and SoftwarePacks中的FREERTOS,在模式配置栏中将其接口设置为CMSIS_V2(CMSIS_V2只是对CMSIS_V1的某些功能进行了扩展)

下方的Configuration配置页面中可以对9个选项卡关于FreeRTOS的所有参数做配置,目前均保持默认即可,具体配置如下图所示

以下列表为对上图所示这9个配置选项卡及其包含的参数做简单的介绍

  1. Tasks and Queues:任务和队列管理
  2. Timers and Semaphores :定时器和信号量管理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值