笔记前言:
本文基于Kevin_WWW的 视频教程记录而来。
阅读本笔记需要有关于STM32的基础知识,需了解STM32 Cube MX如何配置你使用的芯片项目;需了解片上外设的作用;需掌握 C 语言语法知识,尤其是多线程编程、函数指针等方面。对操作系统方面有所了解为佳。
本笔记开发环境为 VS Code ,如果你是第一次使用 VS Code 开发 STM32,我推荐参考以下教程:
【爽!手把手教你用 VSCode 开发 STM32【大人,时代变啦!!!】】
该视频详细展示了如何配置 VS Code 环境、安装必要的扩展和工具链,以及开始您的第一个 STM32 项目。
虽然我会提供我学习中使用的例程,但是我学习的顺序可能和视频中不同,我也会在学习freertos的途中去学别的技术,因此我的例程通常带有一些别的功能,仅有参考价值,建议你跟着原视频自己动手。点此获取视频例程。
RTOS(Real Time Operating System,实时操作系统)。
在一个简单的嵌入式项目中,我们可能习惯于使用一个大的while(1)循环来处理所有事情(比如在main函数中)。但随着项目变得越来越复杂,这种方式会带来很多问题。
使用 FreeRTOS 的主要优势在于:
- 裸机系统:初学时使用,功能要求不复杂时使用;
- 使用RTOS:功能要求复杂,必须使用多任务,或对实时性要求高时使用。
使用RTOS并且将功能分解为多个任务,可以使程序功能模块化,程序结构更简单,便于维护和扩展,也便于团队协作开发,提高开发效率。
实时性指任务的完成时间是确定的,如驾驶控制系统必须在一定时间内完成对驾驶员操作的响应。
FreeRTOS是一个实时操作系统,满足硬实时要求。
软实时要求 指虽然任务有一个截止时间,但是超过整个截止时间并不会使系统失效,不会造成严重后果,比如打开网页、敲击键盘等。
硬实时要求 指任务有一个截止时间,且超过整个截止时间可能会导致系统失效,如安全气囊弹出系统就是硬实时要求。
操作系统的主要功能就是实现了多任务管理,FreeRTOS是一个支持多任务的实时操作系统,FreeRTOS将任务称为线程(thread),但我们还是使用常用的名词“任务(task)”。
一般的MCU都是单核的,处理器在任何时刻只能执行一个任务的代码。FreeRTOS的多任务功能是通过其内核中的任务调度器来实现的,FreeRTOS支持基于任务优先级的抢占式任务调度算法,因而能满足硬实时的要求。
FreeRTOS少部分与硬件密切相关的源码需要针对不同架构的MCU进行一些改写,例如针对STM32系列单片机,就需要改写相应的代码,这个过程称为移植。移植好的一套FreeRTOS源码称为一个接口(port)。
STM32Cube固件包里包含移植好了的FreeRTOS源码,例如对于STM32F4系列,其STM32CubeF4中就包含针对STM32F4移植好了的FreeRTOS源码,在CubeMX中作为一个中间件使用。