FreeRTOS匈牙利命名法

3

我是一个完全的RTOS和C编程新手,我还在逐渐习惯C语言的良好实践。所以我打开了一个使用FreeRTOS的项目,我注意到操作系统文件使用了匈牙利命名法。我了解这种命名法,但在FreeRTOS.h文件中遇到了一些新的“标准”,它们是:

#ifndef configASSERT
    #define configASSERT( x )
    #define configASSERT_DEFINED 0
#else
    #define configASSERT_DEFINED 1
#endif

并且在此之下,

#ifndef INCLUDE_xTaskGetSchedulerState
    #define INCLUDE_xTaskGetSchedulerState 0
#endif

#ifndef INCLUDE_xTaskGetCurrentTaskHandle
    #define INCLUDE_xTaskGetCurrentTaskHandle 0
#endif

我在各个地方看到了x,例如xTaskGetCurrentTaskHandle。还有vpd和类似于这样的变量名,比如在所讨论的头文件的第728行:

#if configENABLE_BACKWARD_COMPATIBILITY == 1
    #define eTaskStateGet eTaskGetState
    #define portTickType TickType_t
    #define xTaskHandle TaskHandle_t
    #define xQueueHandle QueueHandle_t
    #define xSemaphoreHandle SemaphoreHandle_t
    #define xQueueSetHandle QueueSetHandle_t
    #define xQueueSetMemberHandle QueueSetMemberHandle_t
    #define xTimeOutType TimeOut_t
    #define xMemoryRegion MemoryRegion_t
    #define xTaskParameters TaskParameters_t
    #define xTaskStatusType TaskStatus_t
    #define xTimerHandle TimerHandle_t
    #define xCoRoutineHandle CoRoutineHandle_t
    #define pdTASK_HOOK_CODE TaskHookFunction_t
    #define portTICK_RATE_MS portTICK_PERIOD_MS

    /* Backward compatibility within the scheduler code only - these definitions
    are not really required but are included for completeness. */
    #define tmrTIMER_CALLBACK TimerCallbackFunction_t
    #define pdTASK_CODE TaskFunction_t
    #define xListItem ListItem_t
    #define xList List_t

我已经到处搜索这些“缩写”代表什么,但仍然无法弄清楚。

因此,如果有人能帮助我理解这个问题,或者能够指出一条路线之类的东西,我将非常感激。


2
可能是https://dev59.com/9lwY5IYBdhLWcg3wyqaH的重复问题。 - undefined
4
请注意,匈牙利命名法并不一定被认为是良好的编程实践。现在很少使用它了。请查看维基百科上列出的缺点:https://en.wikipedia.org/wiki/Hungarian_notation - undefined
@Lundin,谢谢你的评论。实际上,我觉得我正在做的这个项目有点老了,之前的程序员在其中使用了匈牙利命名法。一旦它成为一个完整的嵌入式系统环境,我想我将无法摆脱它...我将不得不逐渐习惯这种方式,哈哈。谢谢你提供的链接,我一定会看一下! - undefined
编码规范和代码标准在<a href="http://www.freertos.org/FreeRTOS-Coding-Standard-and-Style-Guide.html">FreeRTOS.org网站上描述</a>。 - undefined
1个回答

5

查看这个人

命名约定

RTOS内核和演示应用程序源代码使用以下约定:

变量

  • 类型为uint32_t的变量以ul为前缀,其中'u'表示无符号,'l'表示长整型。

  • 类型为uint16_t的变量以us为前缀,其中'u'表示无符号,'s'表示短整型。

  • 类型为uint8_t的变量以uc为前缀,其中'u'表示无符号,'c'表示字符型。

  • 非stdint类型的变量以x为前缀,例如BaseType_tTickType_t,它们是可移植层定义的typedef,用于体系结构的自然或最有效类型和用于保存RTOS tick计数的类型。

  • 非stdint类型的unsigned变量具有附加前缀u。例如,类型为UBaseType_tunsigned BaseType_t)的变量以ux为前缀。

  • 类型为size_t的变量也以x为前缀。

  • 枚举变量以e为前缀

  • 指针具有附加前缀p,例如指向uint16_t的指针将具有前缀pus

  • 与MISRA指南一致,未经限定的标准字符类型仅允许保存ASCII字符,并以c为前缀。

  • 与MISRA指南一致,类型为char *的变量仅允许保存指向ASCII字符串的指针,并以pc为前缀。

重点在于我

功能

  • 文件作用域静态(私有)函数以prv为前缀。

  • API函数以它们的返回类型作为前缀,根据变量的约定定义,附加前缀v表示void

  • API函数名称以定义它们的文件名开头。例如,vTaskDelete在tasks.c中定义,并具有void返回类型。

重点突出

  • 宏以定义它们的文件为前缀。前缀为小写字母。例如,configUSE_PREEMPTION在FreeRTOSConfig.h中定义。

  • 除了前缀之外,宏都是全大写,并使用下划线分隔单词。

重点突出


1
@LP,非常感谢你,我还在逐渐适应嵌入式系统的环境。干杯! - undefined
1
感谢您的回答。我刚刚发现了它,并已在我的回答中描述了匈牙利命名法。看起来FreeRTOS主要使用系统匈牙利命名法,还有一点应用程序匈牙利风格的命名法。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接