第五章:FreeRTOS移植到keil6(2025.4.2最新版保姆级教程)

第四章:Keil6建立一个工程文件夹(2025.3.31保姆级教程)

FreeRTOS移植详解

本文详细介绍了如何在STM32平台上移植FreeRTOS操作系统,包括源码获取、工程配置、文件修改等完整步骤。通过本文的学习,您将掌握FreeRTOS移植的关键技术点。

本文对应的工程代码已上传至GitHub:FreeRTOS移植工程

一、准备工作

1.1 打开工程文件夹

首先打开之前创建的keil6文件夹,准备进行FreeRTOS的移植工作。

点击打开keil6创建新文件夹教程(含工程文件夹)

打开keil6文件夹

1.2 下载FreeRTOS源码

访问FreeRTOS官网下载最新版本源码:

下载FreeRTOS源码

1.3 获取内核文档

在官网找到关于FreeRTOS内核的文档:

获取内核文档

1.4 选择下载版本

点击下载FreeRTOS,选择最新版本FreeRTOS 202212.01(有条件也可以下载两个版本进行对比):

选择下载版本

1.5 解压文件

将下载好的文件解压到创建的FreeRTOS目录下:

解压文件

二、工程配置

2.1 创建新工程

  1. 新建一个002工程文件
  2. 将上节课的工程文件模板复制进来
  3. 添加FreeRTOS src和FreeRTOS portable文件夹

创建新工程

2.2 复制源文件

导航到...\FreeRTOSv202212.01\FreeRTOS\Source,将所有.c文件复制到002的freertos src文件夹中:

复制源文件1
复制源文件2

2.3 复制移植文件

导航到...\FreeRTOSv202212.01\FreeRTOS\Source\portable,将"MemMang"文件夹与"RVDS"文件夹拷贝到新建的freertos port文件夹中:

复制移植文件1
复制移植文件2

2.4 复制头文件

导航到...\FreeRTOSv202212.01\FreeRTOS\Source,将include直接复制到工程文件夹并改名为freertos include:

复制头文件1
复制头文件2

2.5 整理文件结构

为了更好的文件组织,可以在002目录下新建一个FreeRTOS文件夹,并将刚才创建的三个文件夹放入其中:

整理文件结构

2.6 配置FreeRTOSConfig.h

导航到...\FreeRTOSv202212.01\FreeRTOS\Demo\CORTEX_STM32F103_Keil找到freertosconfig.h,将其复制到user文件夹下:

配置FreeRTOSConfig.h

三、Keil工程配置

3.1 添加文件组

  1. 打开Keil,点击魔法棒右边的三个小箱子
  2. 添加freertos port组,添加以下文件:
    • ...\Despacito\002\FreeRTOS\freertos portable\RVDS\ARM_CM3\port.c
    • ...\Despacito\002\FreeRTOS\freertos portable\MemMang\heap_4.c

添加文件组1

  1. 添加freertos src组,添加所有.c文件:

添加文件组2

  1. 在user分组中添加FreeRTOSConfig.h文件:

添加文件组3

3.2 配置头文件路径

点击魔法棒–>c/c++(AC6)–>include path,添加以下路径:

配置头文件路径

四、文件修改

4.1 修改FreeRTOSConfig.h

FreeRTOSConfig.h文件需要修改的内容不多,主要是:

  1. 修改开发板对应的头文件(如STM32F1系列使用#include "stm32f10x.h"
  2. 添加串口头文件#include "stm32f10x_usart.h"(用于断言操作打印信息)

修改FreeRTOSConfig.h

4.2 修改stm32f10x_it.c

SysTick中断服务函数是FreeRTOS的心跳时钟,驱动着FreeRTOS的运行。FreeRTOS已经帮我们实现了:

  1. 在port.c中实现了vPortSetupTimerInterrupt()函数
  2. 实现了通用的xPortSysTickHandler()函数

我们只需要在stm32f10x_it.c中实现STM32平台上的SysTick_Handler()函数即可。

同时,需要注释掉PendSV_Handler()SVC_Handler()这两个函数,因为FreeRTOS已经在port.c中实现了xPortPendSVHandler()vPortSVCHandler()函数。

/* 修改后的stm32f10x_it.c文件 */
#include "stm32f10x_it.h"
#include "FreeRTOS.h"					//FreeRTOS使用		  
#include "task.h" 

/* 其他代码保持不变 */

// 注释掉SVC_Handler
//void SVC_Handler(void)
//{
//}

// 注释掉PendSV_Handler
//void PendSV_Handler(void)
//{
//}

// 实现SysTick_Handler
void SysTick_Handler(void)
{
    if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED) //系统已经运行
    {
        xPortSysTickHandler();	
    }
}

4.3 修改main.c

修改main.c文件,添加FreeRTOS相关头文件和初始化代码:

#include "stm32f10x.h"
#include "FreeRTOS.h"
#include "task.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_usart.h"

int main(void) {
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStruct);
    while(1) {
        GPIO_ResetBits(GPIOC, GPIO_Pin_13);  
    }
}

五、编译问题解决

5.1 常见编译错误

FreeRTOS移植编译错误主要由以下原因引起:

  1. 编译器版本与移植文件不兼容

    • __forceinline关键字未识别:RVDS移植文件中的__forceinline是ARM Compiler 5(AC5)特有的内联语法
    • 汇编语法错误:RVDS移植文件中的汇编指令语法与AC6不兼容
  2. 关键配置缺失

    • 中断服务函数重命名问题
    • 数据类型未定义
  3. 其他可能原因

    • 中断优先级冲突
    • 内存分配问题

5.2 解决方案

  1. 替换移植文件

    • 删除portable/RVDS/ARM_CM3目录
    • 复制FreeRTOS/portable/GCC/ARM_CM3中的文件到工程
    • 更新Keil工程文件引用路径
  2. 修改编译器设置

    • 在Keil的Options for Target → C/C++选项卡中:
      • 使用AC5编译器
      • 或启用AC6的GNU兼容模式
  3. 验证关键配置

// FreeRTOSConfig.h 关键配置示例
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY (tskIDLE_PRIORITY + 3)
#define configTIMER_QUEUE_LENGTH 10
#define configKERNEL_INTERRUPT_PRIORITY 255

5.3 切换到GCC编译器

在Keil中切换到GCC编译器:

切换到GCC编译器1
切换到GCC编译器2
切换到GCC编译器3

5.4 编译结果

编译后没有报错和警告,移植成功:

在这里插入图片描述

六、总结

通过以上步骤,我们成功完成了FreeRTOS在STM32平台上的移植。主要步骤包括:

  1. 获取并配置FreeRTOS源码
  2. 创建工程并添加必要文件
  3. 修改相关配置文件
  4. 解决编译问题

移植完成后,您就可以开始使用FreeRTOS进行开发了。FreeRTOS作为一个轻量级的实时操作系统,在嵌入式系统开发中有着广泛的应用。

七、参考资料

  1. FreeRTOS官方文档
  2. STM32官方文档
  3. FreeRTOS移植工程

如果本文对您有帮助,欢迎点赞、收藏和关注!您的支持是我持续创作的动力。

第六章:freertosconfig.h核心函数详解(官方最新版,附FreeRTOSconfig.h归类完的完整中文注释)

### 如何在本地使用 PyCharm 部署 DeepSeek 项目 #### 准备工作 为了顺利部署 DeepSeek 项目,在开始之前需确认已安装好必要的软件包。推荐组合为:DeepSeek-r1:1.5b + PyCharm 社区版 + CodeGPT 插件[^1]。 #### 下载并安装 PyCharm PyCharm 是广泛使用的 Python 编辑器之一,对于希望提高开发效率的开发者来说是一个不错的选择。可以从官方网站获取社区版本进行免费下载和安装[^2]: - 访问链接:<https://www.jetbrains.com/zh-cn/pycharm/> - 按照页面提示完成安装过程 #### 获取 DeepSeek 大语言模型 通过 Ollama 工具来管理 DeepSeek 的安装与运行环境。具体命令如下所示[^3]: ```bash ollama list # 查看当前可用的大语言模型列表 ollama run deepseek-r1:7b # 启动指定版本的语言模型服务 ``` #### 创建新工程并与 DeepSeek 结合 打开 PyCharm 并创建一个新的 Python 项目;接着配置项目的解释器和其他设置以适应即将集成的 DeepSeek API 或 SDK 调用需求。确保所选路径清晰易记以便后续维护。 #### 使用插件增强功能体验 考虑引入额外的支持工具如 CodeGPT 来进一步提升编码速度及质量。这类辅助工具有助于自动生成代码片段、提供智能建议等功能,从而让整个流程更加流畅高效。 #### 测试连接情况 最后一步是要验证能否成功调用远程或本地部署好的 DeepSeek 服务端口。可以通过编写简单的测试脚本来实现这一点——尝试向服务器发送请求并处理返回的数据作为初步检验手段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Despacito0o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值