FreeRTOS学习记录(变量命名规则全解、文件介绍)

news2025/7/15 10:17:19

目录

FreeRTOS 变量命名规则详解​

​一、变量命名前缀规则​

(一)数据类型相关前缀​

(二)功能模块相关前缀​

 (三)宏定义

二、变量命名与文件的关系​

(一)核心源文件中的变量命名​

(二)配置文件FreeRTOSConfig.h中的变量命名​

(三)应用程序文件中的变量命名​

 FreeRTOS文件介绍

FreeRTOS Plus 是 FreeRTOS 的商业扩展版本,它们有以下联系与区别:

联系

区别

 FreeRTOS文件结构


FreeRTOS 变量命名规则详解​

​一、变量命名前缀规则​

新定义的数据类型实际的数据类型(C 标准类型)说明
portCHARchar
portSHORTshort
portLONGlong
portTickTypeunsigned short int用于定义系统时基计数器的值和阻塞时间的值。当 FreeRTOSConfig.h 头文件中的宏 configUSE_16_BIT_TICKS 为 1 时则为 16 位。
portTickTypeunsigned int用于定义系统时基计数器的值和阻塞时间的值。FreeRTOSConfig.h 头文件中的宏 configUSE_16_BIT_TICKS 为 0 时则为 32 位。
portBASE_TYPElong根据处理器的架构来决定是多少位的,如果是 32/16/8bit 的处理器则是 32/16/8bit 的数据类型。一般用于定义函数的返回值或者布尔类型。

(一)数据类型相关前缀​

  1. x前缀:通常用于表示指针类型或句柄类型的变量 。在 FreeRTOS 中,任务句柄TaskHandle_t、队列句柄QueueHandle_t、信号量句柄SemaphoreHandle_t等相关变量,常以x开头命名。例如,xTaskHandle表示任务句柄变量,xQueueHandle表示队列句柄变量,xSemaphoreHandle表示信号量句柄变量。这是因为这些句柄本质上是指向相应控制结构的指针,使用x作为前缀便于开发者快速识别变量的指针性质,在代码阅读和编写过程中,能直观地判断变量可用于对特定资源(任务、队列、信号量)的操作。​
  2. ul前缀:代表无符号长整型(unsigned long)数据类型。在涉及到计数、优先级等需要较大取值范围的无符号数值变量时,常使用ul作为前缀。比如,ulTaskPriority用于表示任务优先级变量,由于任务优先级可能有多个级别,使用无符号长整型可以满足较大范围的优先级设定;ulSemaphoreCount表示信号量的计数值变量,在计数信号量中,计数值可能会在较大范围内变化,无符号长整型能确保计数值的准确记录。​
  3. us前缀:表示无符号短整型(unsigned short)数据类型。该前缀常用于取值范围相对较小的变量,如队列长度变量。以usQueueLength为例,在大多数情况下,队列长度不会达到非常大的数值,使用无符号短整型既能满足需求,又能节省内存空间。​
  4. e前缀:用于枚举(enumeration)类型的变量。在描述任务状态、队列状态等具有固定取值集合的情况时,会使用枚举类型。例如,eTaskState表示任务状态的枚举变量,其可能取值包括任务就绪状态、运行状态、阻塞状态等;eQueueError表示队列操作过程中可能出现的错误类型的枚举变量,如队列满、队列空等错误情况。通过e前缀,开发者可以快速识别该变量为枚举类型,从而了解其取值范围和用途。​

(二)功能模块相关前缀​

  1. 任务相关前缀:与任务相关的变量,除了句柄变量以x开头外,其他变量名称中通常会包含Task相关词汇。例如,xTaskStack表示任务堆栈变量,ulTaskDelay表示任务延时时间变量。这样的命名方式能明确变量与任务功能模块的关联,方便开发者在处理任务相关代码时,快速找到和理解相关变量的作用。​
  2. 队列相关前缀:队列相关变量名称中会包含Queue相关词汇。如xQueueSendBuffer表示用于向队列发送数据的缓冲区变量,usQueueReceiveCount表示从队列中接收数据的计数变量。通过这种命名规则,在涉及队列操作的代码区域,开发者可以迅速辨别出与队列相关的变量,提高代码的可读性和可维护性。​
  3. 信号量相关前缀:信号量相关变量名称中一般包含Semaphore相关词汇。例如,xMutexSemaphoreOwner表示互斥信号量的所有者变量,ulBinarySemaphoreValue表示二进制信号量的值变量。这种命名方式使得在处理信号量同步与互斥功能的代码中,变量的功能一目了然。​

 (三)宏定义

前缀宏定义的文件
port(举例,portMAX_DELAY)portable.h
task(举例,taskENTER_CRITICAL ())task.h
pd(举例,pdTRUE)projdefs.h
config(举例,configUSE_PREEMPTION)FreeRTOSConfig.h
err(举例,errQUEUE_FULL)projdefs.h

实际的值
pdTRUE1
pdFALSE0
pdPASS1
pdFAIL0

二、变量命名与文件的关系​

(一)核心源文件中的变量命名​

  1. tasks.c和tasks.h:在任务管理的核心文件中,定义了大量与任务相关的变量。任务句柄变量如xCreatedTaskHandle,用于记录创建后的任务句柄,方便后续对任务进行操作;任务优先级变量ulTaskPriorityConfig,用于存储任务优先级的配置值,在任务创建或优先级调整时使用。这些变量的命名严格遵循任务相关的命名规则,通过名称可以清晰地判断其在任务管理中的具体功能,使得其他开发者在阅读和修改任务相关代码时,能够快速理解变量的用途和作用机制。​
  1. queue.c和queue.h:队列相关文件中,变量命名围绕队列功能展开。例如,xQueueStorage表示队列的存储区域变量,用于存放队列中的数据;usQueueSizeLimit表示队列大小限制变量,用于控制队列能够容纳的数据项数量。在这些文件中,变量命名规则的应用使得队列操作的逻辑更加清晰,开发者可以根据变量名称准确地找到与队列创建、数据发送、数据接收等操作相关的变量,便于代码的编写和调试。​
  1. semphr.c和semphr.h:信号量相关文件里,变量命名体现信号量的类型和功能。如xBinarySemaphoreInstance表示二进制信号量实例变量,xCountingSemaphoreResource表示计数信号量所管理的资源相关变量。这些变量名称符合信号量相关的命名规范,在实现信号量同步和互斥功能的代码中,通过变量名可以快速了解信号量的类型和用途,有助于开发者正确使用信号量进行任务间的协调。​

(二)配置文件FreeRTOSConfig.h中的变量命名​

FreeRTOSConfig.h文件主要通过宏定义来配置系统参数,但其中也存在一些与变量命名规则相关的体现。例如,configMAX_PRIORITIES定义了系统支持的最大任务优先级数量,虽然它是宏定义,但在概念上与任务优先级变量相关,其命名方式(使用大写字母加下划线)与变量命名规则中参考系统宏定义表意逻辑相呼应。又如,configQUEUE_REGISTRY_SIZE定义了队列注册表的大小,与队列相关变量命名中包含Queue词汇的规则一致。这些配置宏的命名方式,使得开发者在理解和修改系统配置时,能够基于统一的命名逻辑快速把握各配置项的含义,同时也为用户自定义与系统配置相关的变量提供了命名参考。​

(三)应用程序文件中的变量命名​

在用户编写的应用程序文件中,同样需要遵循 FreeRTOS 的变量命名规则。例如,在一个基于 FreeRTOS 的物联网数据采集项目中,创建任务用于采集传感器数据,可命名任务句柄变量为xSensorDataCollectionTaskHandle,符合任务句柄变量的命名规则;用于存储采集数据的队列句柄变量命名为xSensorDataQueueHandle,遵循队列句柄变量的命名规范。通过在应用程序中严格应用这些命名规则,不仅能使代码风格与 FreeRTOS 系统保持一致,提高代码的规范性,还能方便团队协作开发,不同开发者在阅读和维护代码时,能够迅速理解变量的功能和用途,降低沟通成本和代码出错的概率。

 FreeRTOS文件介绍

FreeRTOS Plus 是 FreeRTOS 的商业扩展版本,它们有以下联系与区别:

联系

  • 内核基础相同:FreeRTOS Plus 基于 FreeRTOS 开源内核构建。FreeRTOS 是一款广泛应用的小型实时操作系统内核,提供了任务管理、队列、信号量等基础实时功能,FreeRTOS Plus 继承了这些核心功能,在其基础上进行拓展和增强。
  • 代码风格与编程接口相似:两者代码风格保持一致,遵循相似的编程规范和变量命名规则等。并且 FreeRTOS Plus 的很多编程接口与 FreeRTOS 相同,开发者如果熟悉 FreeRTOS 的开发,在使用 FreeRTOS Plus 时可以快速上手,例如任务创建函数xTaskCreate在两者中使用方式基本相同。

区别

  • 功能丰富度:FreeRTOS Plus 增加了更多高级功能。比如它可能包含了安全相关功能,适用于对安全性要求较高的应用场景,像汽车电子、医疗设备等领域;还可能有更完善的中间件支持,如网络协议栈、文件系统等,而 FreeRTOS 内核本身相对基础,仅提供核心的实时操作系统功能。
  • 商业支持与授权:FreeRTOS 是开源的,遵循 MIT 许可证,开发者可以免费使用、修改和分发其代码,适用于对成本敏感且技术能力较强、能够自行解决开发中问题的团队和个人。FreeRTOS Plus 是商业化产品,由 AWS(亚马逊网络服务)提供商业支持,购买其商业授权的用户可以获得官方的技术支持、更新维护等服务,适合对技术支持有需求、有一定预算的企业用户在商业项目中使用。

 FreeRTOS文件结构

FreeRTOS
├── Demo
│   └── [各种硬件平台和编译器的示例项目文件夹]
├── Source
│   ├── include                 #存放FreeRTOS 的头文件,像FreeRTOS.h、task.h、queue.h等核心
│   │   ├── FreeRTOS.h          #头文件。
│   │   ├── task.h
│   │   ├── queue.h
│   │   ├── semphr.h
│   │   ├── timers.h
│   │   ├── event_groups.h
│   │   └── ...(其他头文件)
│   ├── portable
│   │   ├── (compiler)          # 如 GCC、IAR、Keil 等
│   │   │   └── (architecture)  # 如 ARM_CM4、AVR、MSP430 等
│   │   │       ├── port.c
│   │   │       └── ...(其他平台相关文件)
│   │   └── MemMang
│   │       ├── heap_1.c
│   │       ├── heap_2.c
│   │       ├── heap_3.c
│   │       ├── heap_4.c
│   │       └── heap_5.c
│   ├── list.c
│   ├── queue.c
│   ├── tasks.c
│   ├── timers.c
│   ├── event_groups.c
│   └── ...(其他源文件)
└── FreeRTOSConfig.h            # 系统配置文件
文件夹名称内容介绍用途
Demo包含针对不同硬件平台和编译器的示例项目,如ARM_CM3AVR等平台示例。供开发者参考学习,快速了解 FreeRTOS 在不同环境下的应用方式,辅助开发和调试自己的项目。
include存放 FreeRTOS 的头文件,像FreeRTOS.htask.hqueue.h等核心头文件。定义了 FreeRTOS 的各种数据类型、函数原型、宏定义等,是应用程序引用相关功能的必要文件。
portable包含与硬件平台相关的代码,针对不同编译器(如GCCIARKeil)和处理器架构(如ARMAVR)有不同子文件夹。用于将 FreeRTOS 移植到特定的硬件平台上,实现底层硬件交互和系统适配。
sourceFreeRTOS 的核心源代码文件夹,包含tasks.cqueue.csemphr.c等源文件。实现了任务管理、队列、信号量、定时器等核心功能,是 FreeRTOS 的功能主体部分。
MemMang内存管理相关的源文件,如heap_1.cheap_2.cheap_3.cheap_4.cheap_5.c提供不同的内存分配策略,开发者可根据项目需求选择合适的内存管理方案。

 其他:

Test存放 FreeRTOS 相关测试代码和资源的文件夹,用于对 FreeRTOS 的功能进行测试和验证,确保其稳定性、正确性和可靠性CMock:单元测试框架相关内容,用于编写和运行单元测试,如对内核及功能模块进行功能验证。
CBMC:可能包含与 C 有界模型检查器相关的配置或测试脚本,用于对 FreeRTOS 代码进行形式化验证。
- 按功能模块划分的测试代码文件夹,如QueueSemaphore等文件夹,包含针对相应功能的测试用例,用于验证队列、信号量等功能的正确性。
- 可能存在与特定硬件平台相关的测试代码,用于在不同硬件环境下对 FreeRTOS 进行测试。
- 测试框架相关的文件,用于组织、执行测试用例,以及生成测试报告等。
LICENSE 文件主要的许可证文本文件,一般位于项目根目录。包含 FreeRTOS 所采用的 MIT 许可证的详细条款,如允许自由使用、修改和分发软件,但需保留版权声明等内容;可能还会提及其他与许可证相关的注意事项。明确软件使用、分发、修改的权限和条件,保障开源软件使用的合规性,让使用者清楚在该许可证下的权利和义务。
NOTICE 文件可能存在的通知文件,记录第三方组件的版权和许可信息。列出 FreeRTOS 中所依赖的第三方组件(如某些库或工具)的版权声明,以及使用这些组件的特殊许可要求。告知使用者关于第三方组件的相关许可情况,确保在使用过程中不违反第三方的版权和许可规定。
源文件头部每个源文件开头部分包含的版权和许可声明。一般会包含版权信息(如版权所有者、版权年份等)以及使用该文件的许可声明,通常以注释形式存在。强调每个源文件的版权归属和许可使用方式,方便开发者了解该文件的使用限制和条件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2374742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt 中 QWidget涉及的常用核心属性介绍

欢迎来到干货小仓库 一匹真正的好马,即使在鞭子的影子下,也能飞奔 1.enabled API说明isEnabled()获取到控件的可用状态setEnabled()设置控件是否可使用.true:可用,false:禁用 禁用:指该控件不能接收任何用…

Open CASCADE学习|由大量Edge构建闭合Wire:有序与无序处理的完整解析

在CAD建模中,构建闭合的Wire(线框)是拓扑结构生成的基础操作。OpenCascade(OCCT)作为强大的几何建模库,支持从离散的Edge(边)构建Wire,但在实际应用中,边的有序性直接影响构建的成功率。本文将详细探讨有序与无序两种场景下的实现方法,并提供完整代码示例。 一、有序…

linux 开发小技巧之git增加指令别名

众所周知,git的指令执行时都得敲好几个字符才能补充上来,比如常用的git status,是不是要将全部的字符一个个地在键盘敲上来,有没有更懒惰点办法,可以将经常用到的git命令通过其他的别名的方式填充,比如刚刚…

一文读懂如何使用MCP创建服务器

如果你对MCP(模型上下文协议)一窍不通,在阅读本篇文章之前(在获得对MCP深度认识之前),你可以理解为学习MCP就是在学习一个python工具库mcp,类似于其它python工具库一样,如numpy、sys…

Python Day23 学习

继续SHAP图绘制的学习 1. SHAP特征重要性条形图 特征重要性条形图(Feature Importance Bar Plot)是 SHAP 提供的一种全局解释工具,用于展示模型中各个特征对预测结果的重要性。以下是详细解释: 图的含义 - 横轴:表示…

VS Code 重磅更新:全新 MCP 服务器发现中心上线

目前各种 MCP 客户端层出不穷,但是安装 MCP 服务却格外繁琐,尤其 VS Code 中无界面化的 MCP 服务配置方式,效率较低。 Copilot MCP 是一个 VS Code 插件,在今天发布的新版本中,插件支持了自动发现与安装开源 MCP 服务…

一、网络基础

IPv4:32位二进制 -- 点分十进制标识 192.168.1.1(连续的32位,为了好看方便每8位一段) IPv6:128位二进制 IP(Internet协议) 洪泛:除流量进入接口外的所有接口的复制 OSI模型&#…

基于HTML+JavaScript+CSS实现教学网站

摘要 21世纪是信息化的时代,信息化物品不断地涌入我们的生活。同时,教育行业也产生了重大变革。传统的身心教授的模式,正在被替代。互联网模式的教育开辟了一片新的热土。 这算是对教育行业的一次重大挑战。截至目前,众多教育行…

告别卡顿,图片查看界的“速度与激情”

嘿,小伙伴们!今天电脑天空给大家介绍一款超好用的图片查看神器——ImageGlass!这可不是普通的图片查看软件哦,它简直就是图片界的“全能王”。首先,它能打开的图片格式多到让你眼花缭乱,什么PNG、JPEG、GIF…

C++ - 类和对象 #日期类的实现

文章目录 前言 一、导言 二、构造 三、比较大小 1、实现大于 2、等于 3、大于等于 4、小于 5、小于等于 6、不等于 二、加减 1、加与加等 2、减与减等 3、、-- 4、日期-日期 三、流提取、流插入 1、流插入 2、流提取 四、日期类所有代码汇总 总结 前言 路…

Redis 8.0携新功能,重新开源

01 引言 Redis从7.4版本起,将开源许可证改成 RSALv2(Redis 源代码可用许可证)与 SSPLv1(服务器端公共许可证)的双重授权策略。简单来说,就是不能随意商用。为了抵制Redis,Redis的替代品Valkey、…

从MCU到SoC的开发思维转变

目录 1、硬件设计 2、软件开发 3、调试与测试 4、电源管理 微控制器单元(MCU)和系统级芯片(SoC)是嵌入式开发中最常见的两种处理器类型。MCU以其简单、低功耗的特点,广泛应用于特定控制任务;而SoC凭借强…

Eclipse SWT 1 等比缩放

Eclipse SWT 1 等比缩放 1 布局方式2 测试代码 1 布局方式 布局名称特点说明适合场景AbsoluteLayout绝对定位,控件位置和大小完全由开发者手动设置。特殊定制界面、不规则排版FillLayout简单线性布局,将所有子控件填满容器(水平或垂直方向&a…

IP 地址、银行卡等多维数据于风险控制的作用

IP 地址、银行卡、手机号、身份证归属地等多维度身份数据,通过构建风险画像数据库,为交易反欺诈、广告营销检测、账户安全防护等提供了强有力的支持。 数据整合构建风险画像数据 IP 地址、银行卡、手机号、身份证归属地等数据来源各异,信息属…

堆复习(C语言版)

目录 1.树的相关概念: 2.堆的实现 3.TopK问题 4.总结 1.树的相关概念: 1.结点的度:一个结点含有的子树(孩子)个数。 A的度为6 2.叶结点or终端结点:度为0的结点。 J、K、L、H、I 都是叶子结点 3.非终端结…

Spring AI 与 Groq 的深度集成:解锁高效 AI 推理新体验

Spring AI 与 Groq 的深度集成:解锁高效 AI 推理新体验 前言 在人工智能飞速发展的当下,AI 推理的效率和性能成为开发者关注的焦点。Groq 作为一款基于 LPU™ 的超快速 AI 推理引擎,凭借其强大的性能,能够支持各类 AI 模型&…

Megatron系列——张量并行

本文整理自bilibili Zomi视频 1、行切分和列切分 注意: (1)A按列切分时,X无需切分,split复制广播到A1和A2对应设备即可。最后Y1和Y2需要拼接下,即All Gather (2)A按行切分时&#…

学习笔记:黑马程序员JavaWeb开发教程(2025.4.3)

12.1 基础登录功能 EmpService中的login方法,是根据接收到的用户名和密码,查询时emp数据库中的员工信息,会返回一个员工对象。使用了三元运算符来写返回 Login是登录,是一个业务方法,mapper接口是持久层,是…

[Windows] Honeyview V5.53

[Windows] Honeyview 链接:https://pan.xunlei.com/s/VOQ3BzcINSmMb1YsHO_Pp2tqA1?pwdujkm# Honeyview是一款兼快速与强大于一体的免费图像查看器, 本版本为该软件的最后一个版本,将不再有新的更新。 主要功能 轻量且快速可以显示包括…

Altera系列FPGA实现图像视频采集转HDMI/LCD输出,提供4套Quartus工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目Altera系列FPGA相关方案推荐 3、设计思路框架工程设计原理框图输入Sensor之-->OV7725摄像头输入Sensor之-->OV5640摄像头输入Sensor之-->串口传图输入图像缓…