FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6

简介: FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6

一、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 并不是实时操作系统,因为它是分时复用的。
  • 系统将时间分割成很多时间片,然后轮流执行各个任务。
  • 每个任务都是独立运行的,互不影响,由于切换的频率很快,就感觉像是同时运行的一样

9c7b40af650292fcb1f76172ab879d62_a2c24e2564a5434e91c7ed9af6df3f63.png

二、移植 FreeRTOS 到 STM32F103C8T6

手动移植

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


使用CubeMX快速移植

快速移植流程


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


3c672e8e79d1559501eea4e48f46f883_394b3caedbe24d4b81334df650fab383.png

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

b4c59c5754e15cdb7529f14c1d7b0f61_af4ea092694b4b3a8f55f84dd2444916.png


3. 时钟配置

f3e8d01b831755ed9de12d2a9671928e_3bd56cff51e44703820a6f9553bdf028.png


4.打开串口

8c9dab2c3ccfd36235cdac140494fa15_e1043e300f07499ebab859491121b76a.png


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

716afbc24a3a5df9fd9f39c93f4e77e9_e16a61cdfaf84a4abd92e714fcc09764.png


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

ef2d67dcd76d19e18d26e9381db0c29d_7dab31b09d6147abbbd606d9541760ff.png

639446cb659683ba58ff8c461ef62bf6_2d89d671ded2488cb2d24ad895c677a8.png

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

71e5e59aeabeea8b13ad51ff53c55b60_2d5cee96bc4547bbb771a7d6eb9f5a3c.png

8.测试是否移植成功




一些常见问题

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内核配置说明

相关文章
|
11月前
|
缓存 Java C语言
嵌入式 LVGL移植到STM32F4
嵌入式 LVGL移植到STM32F4
|
28天前
|
传感器
手把手在STM32F103C8T6上构建可扩展可移植的DHT11驱动
【8月更文挑战第29天】本文详细介绍在STM32F103C8T6上构建可扩展且可移植的DHT11温湿度传感器驱动的步骤,包括硬件与软件准备、硬件连接、驱动代码编写及测试。通过这些步骤,可根据实际项目需求优化和扩展代码。
|
2月前
STM32CubeMX FreeRTOS 互斥锁
STM32CubeMX FreeRTOS 互斥锁
54 12
|
2月前
|
数据安全/隐私保护
STM32CubeMX U8g2移植
STM32CubeMX U8g2移植
57 12
|
2月前
STM32CubeMX FreeRTOS 任务的挂起和恢复
STM32CubeMX FreeRTOS 任务的挂起和恢复
50 12
|
2月前
STM32Cubemx FreeRTOS Event
STM32Cubemx FreeRTOS Event
33 11
|
2月前
|
消息中间件
STM32CubeMX FreeRTOS 消息队列
STM32CubeMX FreeRTOS 消息队列
67 11
|
2月前
STM32Cubmx FreeRTOS Timer
STM32Cubmx FreeRTOS Timer
40 10
|
2月前
STM32CubeMX FreeRTOS点亮LED
STM32CubeMX FreeRTOS点亮LED
54 10
|
2月前
|
编解码
STM32CubeMX FreeRTOS u8g2图片菜单制作
STM32CubeMX FreeRTOS u8g2图片菜单制作
81 8