【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的移植进行验证。

### 实现 FreeRTOS Shell 为了实现基于 FreeRTOS 的命令行接口 (CLI),可以采用多种方法。种流行的方式是利用 `FreeRTOS-CLI` 或者第三方如 `letter-shell` 来构建个功能丰富的 shell 环境。 #### 使用 FreeRTOS CLI 创建 Shell 命令 当使用 FreeRTOS 提供的标准 CLI 功能时,需要确保项目中已经包含了必要的头文件: ```c #include "FreeRTOS.h" #include "FreeRTOS_CLI.h" ``` 定义个新的命令可以通过宏来简化这过程[^4]。例如下面展示了如何创建并注册条简单的命令: ```c BaseType_t prvSampleCommand( char *pcWriteBuffer, size_t xWriteBufferLen, const char *pcCommandString ) { /* Command implementation here */ } /* Register the command with the CLI */ ZNS_CMD_EXPORT(prvSampleCommand, this is a shell cmd demo); ``` 这段代码实现了名为 `prvSampleCommand` 的函数作为命令处理器,并通过宏将其导出给 CLI 解析器识别。 对于更复杂的交互需求,则可能考虑引入像 `letter-shell` 这样的外部组件[^1]。该工具专为资源受限环境设计,提供了更加灵活易用的 API 接口用于开发自定义命令集。 #### 初始化配置 无论选择哪种方式,在启动任何任务之前应当先完成系统的初始化工作。幸运的是,如果是在未分配特定静态存储区的情况下调用 `xTaskCreate()` 函数的话,FreeRTOS 会自动处理好这部分细节[^3]。 这意味着开发者无需担心底层内存布局的具体情况;只需关注于编写应用程序逻辑以及设置合适的参数即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值