当前位置: 首页 > news >正文

# 超简单四步完成FreeRTOS移植到STM32

一、资源准备

  • FreeRTOS源码:推荐FreeRTOSv9.0.0(稳定性高,适配STM32F4系列,可从官网或正点原子/野火等开源仓库获取)

二、FreeRTOS源码文件夹详解

下载的FreeRTOS压缩包解压后,核心文件夹说明如下:

文件夹作用说明
FreeRTOS核心源码文件夹,移植的主要操作对象
Demo针对不同MCU/开发板的示例工程(如CORTEX_M4F_STM32F407ZG-SK是STM32F407的参考例程)
License开源许可协议(MIT许可证,商业/非商业使用均需遵守)
SourceFreeRTOS内核源码,移植的核心文件
include通用头文件(如FreeRTOS.htask.h,所有工程都需包含)
portable硬件适配层(连接内核与具体MCU的“桥梁”,需按需保留以下子文件夹)
KeilKeil编译器适配文件(确保编译兼容)
MemMang内存管理实现(提供5种内存分配策略,heap_4.c最常用,支持动态分配与碎片管理)
RVDS针对ARM架构的芯片适配(STM32F407为Cortex-M4F内核,需保留ARM_CM4F文件夹)

FreeRTOS-Plus:扩展功能包(如TCP/IP、FAT文件系统等),基础移植无需使用。

三、详细移植步骤

1. 工程结构搭建
  • 打开基础裸机工程,在工程根目录新建FreeRTOS文件夹(与UserLibrary等文件夹同级)。
  • 复制FreeRTOS源码中FreeRTOS/Source下的所有文件(包括task.cqueue.csemphr.c等)到新建的FreeRTOS文件夹。
  • 进入FreeRTOS/portable目录,删除无关文件夹(仅保留KeilMemMangRVDS,其他如GCCIAR等非Keil环境的文件夹可删除)。
2. 工程文件添加

打开Keil工程,按以下步骤添加文件:

  • 新建分组:在工程左侧“Project”窗口右键→“Manage Project Items”,新建两个分组:FreeRTOS_CORE(内核文件)和FreeRTOS_PORTABLE(硬件适配文件)。
  • FreeRTOS_CORE添加文件:选择FreeRTOS文件夹下的所有.c文件(如task.cqueue.csemphr.ccroutine.c(协程功能)若不使用可不添加,减少编译体积)。
  • FreeRTOS_PORTABLE添加文件:MemMang文件夹下的heap_4.c(推荐,支持内存碎片管理)、RVDS/ARM_CM4F文件夹下的port.c(Cortex-M4F内核适配文件)。
3. 头文件路径配置
  • 在Keil中点击“Options for Target”(魔术棒图标)→“C/C++”→“Include Paths”,添加:
    • ./FreeRTOS/include(FreeRTOS通用头文件路径);
    • ./FreeRTOS/portable/RVDS/ARM_CM4Fport.c对应的头文件路径)。
4. 编译报错及解决(逐步处理)
报错1:缺少FreeRTOSConfig.h
  • 解决:从源码FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK文件夹复制FreeRTOSConfig.h,粘贴到工程FreeRTOS/include目录。
报错2:SystemCoreClock未定义
  • 解决:打开FreeRTOSConfig.h,修改条件编译,添加SystemCoreClock声明:
    #if defined(__ICCARM__) || defined(__CC_ARM__) || defined(__GNUC__)#include <stdint.h>extern uint32_t SystemCoreClock;  // 声明系统时钟变量
    #endif
    
报错3:中断服务函数重复定义(PendSV_HandlerSVC_HandlerSysTick_Handler
  • 解决:打开stm32f4xx_it.c,注释掉这3个函数的实现(FreeRTOS的port.c已实现,需用FreeRTOS版本)。
报错4:钩子函数未定义
  • 解决:打开FreeRTOSConfig.h,关闭未实现的钩子函数:
    #define configUSE_IDLE_HOOK          0
    #define configUSE_TICK_HOOK          0
    #define configUSE_MALLOC_FAILED_HOOK 0
    #define configCHECK_FOR_STACK_OVERFLOW 0
    
5. 编译验证

点击Keil“Rebuild”,显示“0 Error(s), 0 Warning(s)”则移植成功。

http://www.dtcms.com/a/483518.html

相关文章:

  • 专业做电子的外贸网站嘉兴做网站美工的工作
  • 山东青岛网站设计网站制定公司
  • 网站制作理念深圳12个区排名
  • Flutter---底部导航框架
  • 宁波网站开发服务平台的运营推广怎么做
  • 建设局网站漠河网站建设规模设想
  • 购物网站后台好管理吗wordpress网站的优化
  • 【深入浅出PyTorch】--7.1.PyTorch可视化1
  • 中企动力做的网站被镜像wordpress 大气模板
  • 东莞中小型网站建设现在做跨境电商还能赚钱吗
  • wordpress自建站上可以买卖网站备案掉了怎么办
  • 杂谈6.0
  • C语言--预处理
  • 电子商务网站建设核心是河南省城乡建设厅网站首页
  • 个人网站备案名称咋制作网站
  • 做网站需要考虑什么金融网站开发文档
  • 白细胞偏高:揪出原因,科学应对
  • 【开题答辩过程】以《助农电商信息管理系统的设计与实现》为例,不会开题答辩的可以进来看看
  • HT4822立体声耳机放大器:打造高品质音频
  • 使用NVIDIA TAO 6和DeepStream 8构建实时视觉检测管道
  • Java并发机制的底层实现原理:从CPU到JVM的全面解析
  • 判断web代理服务未生效以及测试服务是否生效
  • 视觉检测设备-AI视觉质量检测方案提升效率
  • 原生多模态AI架构:统一训练与跨模态推理的系统实现与性能优化
  • 荣耀手机商城官方网站入口网站制作公司深圳
  • 网站内容运营免费建网站的服务器
  • Spring Boot 集成免费的 EdgeTTS 实现文本转语音
  • Hexo + Butterfly 博客添加 Live2D 看板娘指南
  • 陕西渭南富平建设局网站个人网站 数据库如何上传到空间
  • 亚马逊用什么网站上传做新品好电子工程信息建设网