FreeRTOS移植详解:两种方法探索——CubeMX配置与自主移植

RTOS,即实时操作系统(Real time operating system)

它并非指代某一款特定的操作系统,而是一类操作系统的统称。

像 uc/OS、FreeRTOS、RTX、RT – Thread 等,都归属于 RTOS 类操作系统。

FreeRTOS 是一款小型的实时操作系统内核,具备轻量级的特性。

它涵盖了任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等诸多功能,

这些功能基本能够满足小型系统的需求。

由于 RTOS 运行时需要占用一定的系统资源,特别是对随机存取存储器(RAM)资源有要求

因此只有 μC/OS – II、embOS、salvo、FreeRTOS 等少数实时操作系统,能够在内存容量较小的单片机上稳定运行。

FreeRTOS 是一款应用于嵌入式系统的 RTOS,具备以下优势:

  • 开源免费:开源,采用 MIT 许可证,可免费使用、修改、分发。
  • 轻量级:设计注重轻量,适用于资源受限系统,不占过多内存和处理器资源 。
  • 应用广泛:在工业自动化、医疗设备、消费电子、汽车电子等嵌入式领域广泛应用。
  • 多平台支持:可移植性强,能轻松移植到不同硬件平台,支持多种处理器架构。
  • 功能丰富:提供多任务调度、任务通信、同步等功能,适用于复杂嵌入式场景。
  • 一、以下为STM32F103C8T6为例在STM32CubeMX上,引入FreeRTOS创建工程

    裸机的时钟源默认是SysTick,但是开启FreeRTOS后,FreeRTOS会占用SysTick

    用来生成1ms定时,用于任务调度,所以需要为其他的总线提供另外的时钟源,例如使用TIM1~TIM4

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

    以下为FreeRTOS的核心配置介绍:

    二、自行移植FreeRTOS

    下载好后解压缩,点击进入FreeRTOS

    点击进入Source

    步骤:

    1.在例程目录结构中新建文件夹,起名FreeRTOS,将需要移植的文件移入其中

    2.将上图中所述Source中的include文件夹,portable文件夹(或者只复制其中所需文件夹)和所有的.c文件复制进去

    3.如上图所示,根据实际情况在Demo中选择所需文件下,复制FreeRTOSConfig.h, 可放在工程的Core里的Inc下。(不管放在哪,只要在环境配置里面的include路径能找到它)

    4.在kill中添加源码文件

      

    5.系统配置文件修改

    在 FreeRTOSConfig.h 中添加如下 3 个配置:

    #define xPortPendSVHandler  PendSV_Handler
    #define vPortSVCHandler     SVC_Handler
    #define INCLUDE_xTaskGetSchedulerState 1

    修改stm32f1xx_it.c

    1.添加

    /* Private includes ----------------------------------------------------------*/
    /* USER CODE BEGIN Includes */
    #include "FreeRTOS.h"
    #include "task.h"
    /* USER CODE END Includes */

     2.注释掉两个函数

    //void SVC_Handler(void)
    //{
    //}
    
    //void PendSV_Handler(void)
    //{
    //}

    3.在SysTick_Handler函数中添加 SysTick 时钟中断服务函数

    if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) 
    {
        xPortSysTickHandler(); 
    }

    在前面引用extern void  xPortSysTickHandler(void); 

    以上为自行移植的方法,如果出现问题,可尝试在.io文件中将systick改为TIM,修改工程系统时钟依赖的时钟源

    本文所述内容为本人通过网络自学后归纳所得,仅服务于个人复习与学习需求,无任何商业应用意图。

    作者:早睡冠军候选人

    物联沃分享整理
    物联沃-IOTWORD物联网 » FreeRTOS移植详解:两种方法探索——CubeMX配置与自主移植

    发表回复