#112_东山笔记_关于FreeRTOS移植树文件的内容说明
推荐FreeRTOS教程链接一:FreeRTOS官网链接二:百问网FreeRTOS教程链接三:百问网移至文件1. 核心源文件Source 根目录这些文件是 FreeRTOS 内核的通用实现与具体硬件无关因此放在Source根目录下所有移植版本共用。文件作用为什么放在这里tasks.c任务管理创建、删除、延时、调度、优先级管理内核最核心的功能与硬件无关list.c链表数据结构实现内核内部使用就绪链表、延时链表等纯软件数据结构与硬件无关queue.c队列、信号量、互斥量的实现内核同步机制与硬件无关timers.c软件定时器实现依赖 tick但本身逻辑与硬件无关event_groups.c事件组实现内核同步机制与硬件无关croutine.c协程Co-routine实现可选已较少使用与硬件无关stream_buffer.c流缓冲区Stream Buffer实现与硬件无关message_buffer.c消息缓冲区Message Buffer实现基于流缓冲区与硬件无关为什么这些文件放在 Source 根目录因为它们只依赖 C 语言和 FreeRTOS 内部接口不直接操作寄存器或特定硬件。放在根目录可以避免重复所有工程共享同一份代码。2. 移植相关文件portable 目录portable目录下按[compiler]/[architecture]分子目录例如RVDS/ARM_CM3。文件作用为什么放在这个子目录port.c实现硬件相关的底层操作上下文切换、启动第一个任务、SysTick 中断处理、临界区进入/退出这些操作依赖具体 CPU 架构和编译器必须为每种组合单独实现portmacro.h定义硬件相关的数据类型如TickType_t、BaseType_t、临界区宏、上下文切换相关的宏同port.c与架构和编译器强相关为什么按[compiler]/[architecture]分目录不同编译器RVDS、IAR、GCC的内联汇编、符号修饰、数据对齐等特性不同不同架构Cortex-M3、M4、RISC-V的寄存器和指令集不同。分目录可以清晰隔离这些差异。3. 内存管理文件portable\MemMang文件作用为什么放在 portable 下heap_1.c只分配不释放适用于简单应用内存分配策略依赖应用场景用户可以根据需求选择或自定义heap_2.c支持分配和释放但不合并相邻空闲块同上heap_3.c包装标准malloc/free线程安全同上heap_4.c支持分配、释放并合并相邻空闲块最常用同上heap_5.c同heap_4但支持多个非连续内存区域同上为什么放在portable目录内存管理方案与硬件内存布局、编译器特性、应用需求相关因此被设计为可替换组件。portable目录的本意就是“用户可以提供自己的实现”。4. 头文件目录4.1Source\include包含所有内核公开的头文件头文件作用FreeRTOS.h总包含文件引入其他头文件task.h任务管理 API 声明queue.h队列、信号量、互斥量 API 声明semphr.h信号量相关宏和函数声明timers.h软件定时器 API 声明event_groups.h事件组 API 声明stream_buffer.h流缓冲区 API 声明message_buffer.h消息缓冲区 API 声明projdefs.h通用宏定义如pdTRUE、pdFALSEportable.h移植层接口声明list.h链表结构声明内核内部使用stack_macros.h栈检查相关宏4.2portable\[compiler]\[architecture]包含portmacro.h定义硬件相关数据类型和宏是所有源文件需要包含的移植头文件。4.3Core\Inc或工程配置目录包含FreeRTOSConfig.h这是用户配置文件用于裁剪和配置内核功能如是否启用软件定时器、tick 频率、堆大小等。为什么FreeRTOSConfig.h放在工程目录而不是 Source 目录因为它是工程特定的配置每个工程可以有不同的配置不应修改内核源文件。放在工程目录可以独立于内核源码进行管理。5. 入口函数与启动流程入口函数通常位于main.c中与 STM32CubeMX 生成的代码结合osKernelInitialize();// 初始化 FreeRTOS 内核创建空闲任务、初始化链表等MX_FREERTOS_Init();// 创建用户任务由 CubeMX 生成位于 freertos.cosKernelStart();// 启动调度器开始任务调度osKernelInitialize()和osKernelStart()是 CMSIS-RTOS 封装底层调用 FreeRTOS 的vTaskStartScheduler()等函数。freertos.c中定义的任务创建代码最终会调用xTaskCreate()。总结目录划分的设计思想FreeRTOS/Source ├── include # 内核公共头文件API 声明、内部数据结构 ├── *.c # 内核核心实现与硬件无关 ├── portable │ ├── [compiler]/[arch] # 移植层上下文切换、硬件相关数据类型 │ └── MemMang # 可替换的内存管理实现 └── (工程目录) ├── FreeRTOSConfig.h # 工程配置 └── main.c / freertos.c # 入口和任务创建核心代码与移植代码分离方便支持不同硬件平台。配置与源码分离FreeRTOSConfig.h放在工程目录避免修改内核源码。可替换组件独立内存管理、协程等可选功能放在portable下用户可按需选择。如果你需要我根据具体的文件列表比如你提到的image2、image3中的内容逐一解释请将图片中的文字或文件名贴出来我可以继续补充。

相关新闻

Photo to Video AI + Motion Prompt:让静态照片动起来的关键技巧

Photo to Video AI + Motion Prompt:让静态照片动起来的关键技巧

先想一个场景。你手里有一张人物照片,想让它微笑、眨眼、转过头来。放在五年前,这意味着你需要学一套动画管线:先抠图、再建模、绑定骨骼、打关键帧、调补间,最后还要处理脸部纹理在运动时崩坏的问题。放在现在,这张照…

2026/10/17 5:23:35 阅读更多 →
GitHub Actions与Pages降级应对指南

GitHub Actions与Pages降级应对指南

如果你打开 GitHub 状态页,看到 “GitHub Actions and Pages are experiencing degraded availability” 这一行提示,第一反应不应该是不停刷新自己的仓库配置,而是先搞清楚官方到底在降级什么。这段提示的意思是:GitHub 官方托管…

2026/10/17 5:26:30 阅读更多 →
基于特征工程与集成学习的工业故障诊断:从数学建模到Python实战

基于特征工程与集成学习的工业故障诊断:从数学建模到Python实战

1. 项目概述:从数学建模竞赛到工业实践去年带队参加天府杯数学建模竞赛,A题“仪器故障智能诊断技术”让我们团队拿了个一等奖。赛题本身很有意思,它把一个典型的工业预测性维护问题,包装成了一个数据驱动的建模任务。简单来说&…

2026/10/17 5:26:35 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/4 1:35:24 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/5 1:08:50 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/3 11:35:49 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/4 6:23:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/5 0:54:28 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/4 19:19:54 阅读更多 →

日新闻

周新闻

月新闻