FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6

目录

一、FreeRTOS 介绍

什么是 FreeRTOS ?

为什么选择 FreeRTOS ?

FreeRTOS 资料与源码下载

祼机开发与 FreeRTOS

FreeRTOS 实现多任务的原理

二、移植 FreeRTOS 到 STM32F103C8T6

手动移植

使用CubeMX快速移植

1. 在 SYS 选项里,将 Debug 设为 Serial Wire ,并且将 Timebase Source 设为 TIM2 (其它定 时器也行)。为何要如此配置?下文解说。

2. 将 RCC 里的 HSE 设置为 Crystal/Ceramic Resonator 。

3. 时钟配置

4.打开串口

5. 选择 FREERTOS 选项,并将 Interface 改为 CMSIS_V1 。V1 和 V2 有啥区别?下文解释。​编辑

6. 配置项目信息,并导出代码​编辑​编辑

7.导出代码之后打开文件,加入下面代码和打开Use MicroLIB 使printf重定向到串口​编辑

8.测试是否移植成功

一些常见问题

1. Timebase Source 为什么不能设置为 SysTick ?

2. FreeRTOS 版本问题

3. FreeRTOS 各配置选项卡的解释

4. 内核配置、函数使能的一些翻译


一、FreeRTOS 介绍

什么是 FreeRTOS ?

Free即免费的,RTOS的全称是Real time operating system,中文就是实时操作系统。

注意:RTOS不是指某一个确定的系统,而是指一类操作系统。比如:uc/OS,FreeRTOS,RTX, RT-Thread等这些都是RTOS类操作系统。

FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管 理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满 足较小系统的需要。 由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、 embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、 embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移 植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。

为什么选择 FreeRTOS ?

  • FreeRTOS 是免费的;
  • 很多半导体厂商产品的SDK(Software Development Kit)软件开发工具包,就使用FreeRTOS 作为其操作系统,尤其是WIFI、蓝牙这些带有协议栈的芯片或模块。
  • 简单,因为FreeRTOS的文件数量很少。

FreeRTOS 资料与源码下载

官网资料:点击直达官网

祼机开发与 FreeRTOS

祼机(Bare Machine)是指硬件系统上没有任何操作系统支持的情况。在祼机开发中,开发者需要自己编写所有的驱动程序和操作系统,以实现设备控制和任务管理等功能。

FreeRTOS是一款面向嵌入式系统的实时操作系统,具有轻量级、可移植、开放源代码等特点。在祼机开发中,可以使用FreeRTOS作为操作系统,来简化开发过程。

在祼机开发中使用FreeRTOS,需要进行以下步骤:

  1. 在硬件系统上移植FreeRTOS操作系统。

  2. 编写任务函数,实现任务的具体功能。

  3. 使用FreeRTOS提供的API接口来进行任务管理、内存管理、时间管理、中断处理等操作。

  4. 根据具体需求,编写设备驱动程序,以实现对硬件设备的控制。

需要注意的是,在祼机开发中使用FreeRTOS,需要对系统硬件和软件进行深入的了解和掌握,因此开发过程较为复杂。同时,由于没有操作系统的支持,所以开发者需要对任务管理、内存管理等方面进行更加细致和严密的设计,以确保系统的稳定性和可靠性。

FreeRTOS 实现多任务的原理

  • 严格来说 FreeRTOS 并不是实时操作系统,因为它是分时复用的。
  • 系统将时间分割成很多时间片,然后轮流执行各个任务。
  • 每个任务都是独立运行的,互不影响,由于切换的频率很快,就感觉像是同时运行的一样FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6_第1张图片

二、移植 FreeRTOS 到 STM32F103C8T6

手动移植

过程复杂且繁琐,对新手不友好。如有需要手动移植,可参照大佬:FreeRTOS手动移植到STM32

使用CubeMX快速移植

快速移植流程

1. 在 SYS 选项里,将 Debug 设为 Serial Wire ,并且将 Timebase Source 设为 TIM2 (其它定 时器也行)。为何要如此配置?下文解说

FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6_第2张图片

2. 将 RCC 里的 HSE 设置为 Crystal/Ceramic Resonator 。

FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6_第3张图片

3. 时钟配置

FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6_第4张图片

4.打开串口

FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6_第5张图片

5. 选择 FREERTOS 选项,并将 Interface 改为 CMSIS_V1 。V1 和 V2 有啥区别?下文解释。FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6_第6张图片
6. 配置项目信息,并导出代码FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6_第7张图片FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6_第8张图片
7.导出代码之后打开文件,加入下面代码和打开Use MicroLIB 使printf重定向到串口FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6_第9张图片
8.测试是否移植成功

FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6_第10张图片

FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6_第11张图片

一些常见问题

1. Timebase Source 为什么不能设置为 SysTick ?

裸机的时钟源默认是 SysTick,但是开启 FreeRTOS 后,FreeRTOS会占用 SysTick (用来生成1ms 定时,用于任务调度),所以需要为其他总线提供另外的时钟源。

2. FreeRTOS 版本问题

V2 的内核版本更高,功能更多,在大多数情况下 V1 版本的内核完全够用。

3. FreeRTOS 各配置选项卡的解释
  • Events:事件相关的创建
  • Task and Queues: 任务与队列的创建
  • Timers and Semaphores: 定时器和信号量的创建
  • Mutexes: 互斥量的创建
  • FreeRTOS Heap Usage: 用于查看堆使用情况
  • config parameters: 内核参数设置,用户根据自己的实际应用来裁剪定制 FreeRTOS 内核 Include parameters: FreeRTOS 部分函数的使能
  • User Constants: 相关宏的定义,可以自建一些常量在工程中使用
  • Advanced settings:高级设置
4. 内核配置、函数使能的一些翻译

内核参数的理解内容非常多,可以参考大佬:FreeRTOS内核配置说明

你可能感兴趣的:(FreeRTOS,FreeRTOS,STM32)