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

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

目录

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.xdnf.cn/news/5600.html

相关文章:

  • 制造业IT管理方法论:柔性变更与数据治理的融合实践
  • 视觉-语言-动作模型:概念、进展、应用与挑战(上)
  • OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——nettle库
  • ActiveMQ 高级特性:延迟消息与优先级队列实战(一)
  • 【PmHub后端篇】Skywalking:性能监控与分布式追踪的利器
  • 15.three官方示例+编辑器+AI快速学习webgl_buffergeometry_instancing
  • PINN应用案例:神经网络求解热扩散方程高质量近似解
  • Python的安装使用
  • 深度策略梯度算法PPO
  • 《Asp.net Mvc 网站开发》复习试题
  • Java SpringMVC 异常处理:保障应用健壮性的关键策略
  • Spring Bean有哪几种配置方式?
  • 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 09.天空和背景
  • 鸿蒙(HarmonyOS)应用开发入门教程
  • ISSCC 25 14.4 性能达51.6TFLOPs/W的全数据路径存内计算宏单元,逼近稀疏性极限,应用于复合人工智能时损失低于2-30
  • kafka消费组
  • 接口自动化测试设计思路--设计实战
  • 每日一题洛谷P8662 [蓝桥杯 2018 省 AB] 全球变暖c++
  • 专题二:二叉树的深度搜索(二叉树剪枝)
  • tryhackme——Lateral Movement and Pivoting
  • 状态压缩动态规划:用二进制“魔法”破解组合难题
  • 利用D435i相机进行SLAM实现建图的关键环节-----Kalibr标定工具以及常见的问题调试
  • idea查看pom文件依赖
  • qtcreator导入帮助文档
  • 为什么 mac os .bashrc 没有自动加载?
  • 按钮导航组件 | 纯血鸿蒙组件库AUI
  • 文本数据可视化
  • 5.5.1 WPF中的动画2-基于路径的动画
  • P2P架构
  • vue3: pdf.js 3.4.120 using javascript