【STM32笔记】STM32_HAL库与FreeRTOS(一)—移植FreeRTOS源码

一. FreeRTOS简述

  FreeRTOS 是一个开源的(Free)实时操作系统(RTOS – Real Time Operating System)内核,在 2003 年由 Richard Barry 发布,现已成为全球最流行的 RTOS 之一。FreeRTOS 被广泛应用于各种嵌入式设备中,包括物联网(IoT)设备、工业控制器、消费电子产品、汽车电子等。

1. 主要特点

  • 开源且免费 轻量又高效:FreeRTOS 内核非常小巧,通常只占用几 KB 的内存,适合资源有限的嵌入式系统。
  • 可移植性强:FreeRTOS 支持多种处理器架构,如:EFM32 Gecko(Cortex-M3 和 Cortex-M4F)、8051 兼容微控制器、STM32的F1、 F4、 F7 和 H7 等型号的 MCU 都可支持,在官方的技术手册中已存在超 30 种架构的芯片支持移植。
  • 内部功能丰富:支持多任务并发执行,任务可以设置不同的优先级。提供队列、信号量、互斥量等机制,用于任务间的同步和通信。提供多种内存分配策略,如 heap_1、heap_2、heap_3、heap_4 和 heap_5。支持一次性定时器和周期性定时器,用于任务调度和时间管理。提供高效的中断处理机制,支持嵌套中断。
  • 可扩展性:reeRTOS 支持多种插件和扩展,如FreeRTOS-Plus-TCP、FreeRTOS-Plus-CLI、FreeRTOS-Plus-IO 等等。
  • 二. 获取FreeRTOS源码

      下载FreeRTOS源码的官网地址链接: FreeRTOS源码下载

      这里选择下载 FreeRTOS 202212.01 数据包。下载好后打开文件,

      FreeRTOS 文件包含了FreeRTOS实时内核源码(这也是后续要移植的FreeRTOS源码)。
      FreeRTOS-Plus 文件是实现了 FreeRTOS 内核的附加功能。与 FreeRTOS 核心库不同,FreeRTOS-Plus 库对 FreeRTOS RTOS 内核具有依赖性。

    三. 使用STM32CubeMX生成工程

      打开STM32CubeMX,选择STM32103C8芯片,设置基本配置。这里我将PA08与PA15引脚口设置为推挽输出模式,同时开启USART1串口外设功能。

      注意:这里修改一下修改HAL库的时基源。将FreeRTOS占用的时基源与HAL库占用的时基源错开。

      生成工程(以下简称keil工程文件)。

    四. 移植FreeRTOS

      1. 打开生成的keil工程文件,在该工程的主目录下新建名为FreeRTOS文件夹,然后在FreeRTOS文件夹中创建includeportsrc文件夹。

      2. 打开下载的FreeRTOSv202212.01源码文件夹,将FreeRTOSv202212.01\FreeRTOS\Source\include文件中的所有文件copy到keil工程文件的FreeRTOS\include文件中。

      3. 打开下载的FreeRTOSv202212.01源码文件夹,将FreeRTOSv202212.01\FreeRTOS\Source\portable文件中的MemMang文件与RVDS文件copy到keil工程文件的FreeRTOS\port文件中。

      4. 打开下载的FreeRTOSv202212.01源码文件夹,将FreeRTOSv202212.01\FreeRTOS\Source文件下中所有.c文件copy到keil工程文件的FreeRTOS\src文件中。

      5. 打开下载的FreeRTOSv202212.01源码文件夹,将FreeRTOSv202212.01\FreeRTOS\Demo文件中查找到你创建工程所选芯片的demo例程,并将该例程文件下的FreeRTOSConfig.h,copy到keil工程文件的FreeRTOS\include文件中。

    (这里我是使用的STM32F103系列芯片,因此我选择CORTEX_STM32F103_Keil例程移植)

    提示:如果第5步不知道该如何选择Demo,可查看FreeRTOS官方文档说明链接:支持的演示 与链接:支持的设备 如下图对应Demo中文件名查看选择。

      6. 打开创建的Keil工程,先编译一下,编译成功后在该工程设备树添加文件。


      关于MemMang文件(内存分配实现示例)中的heap_1.c~heap_5.c文件选择谁(只能选一个),各自又有什么作用,在FreeRTOS官方文档说明也有说明链接:FreeRTOS 堆内存管理。
      关于RVDS文件选择哪一个port.c文件,则去查看你所使用的芯片系列是ARM Cortex-M?内核。

      7. 添加了.c文件对应的也需要添加.h文件。

      8. 在stm32f1xx_it.c文件中添加代码。

    extern void vPortSVCHandler( void );
    extern void xPortPendSVHandler( void );
    extern void xPortSysTickHandler( void );
    




    到此FreeRTOS源码的移植就基本完成了,开始编译。

    下一节来对FreeRTOS的移植进行验证。

    作者:Macy~

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【STM32笔记】STM32_HAL库与FreeRTOS(一)—移植FreeRTOS源码

    发表回复