FreeRTOS 匈牙利表示法

uli*_*sBR 3 c embedded hungarian-notation freertos

我是 RTOS 和 C 编程的新手,而且我仍在习惯 C 的良好实践。因此,我打开了一个使用 FreeRTOS 的项目,我注意到操作系统文件使用匈牙利表示法。我知道一点符号,但在文件中遇到了一些新的“标准” FreeRTOS.h,它们是:

#ifndef configASSERT
    #define configASSERT( x )
    #define configASSERT_DEFINED 0
#else
    #define configASSERT_DEFINED 1
#endif
Run Code Online (Sandbox Code Playgroud)

在那之下,

#ifndef INCLUDE_xTaskGetSchedulerState
    #define INCLUDE_xTaskGetSchedulerState 0
#endif

#ifndef INCLUDE_xTaskGetCurrentTaskHandle
    #define INCLUDE_xTaskGetCurrentTaskHandle 0
#endif
Run Code Online (Sandbox Code Playgroud)

我到处都看到过这个x - 就像x TaskGetCurrentTaskHandle一样。此外,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
Run Code Online (Sandbox Code Playgroud)

我到处搜索过这些“首字​​母缩写”代表什么,但仍然无法弄清楚。

因此,如果有人可以帮助我理解这一点,或者可以向我展示一条道路或其他东西,我将非常感激。

LPs*_*LPs 5

看着男人

命名约定

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

变量

  • 类型变量uint32_tul为前缀,其中“u”表示“ unsignedl 表示long

  • 类型变量以usuint16_t为前缀,其中'u'表示 'unsigned','s' 表示。short

  • 类型变量的uint8_t前缀为uc,其中“u”表示“无符号”,“c”表示char

  • 非 stdint 类型的变量以 x 为前缀。示例包括 BaseType_tTickType_t,它们是可移植层定义的类型定义,分别用于架构的自然或最有效类型以及用于保存 RTOS 滴答计数的类型。

  • Unsigned非 stdint 类型的变量有一个额外的前缀u。例如UBaseType_t( unsigned BaseType_t) 类型的变量带有前缀ux

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

  • 枚举变量以e为前缀

  • 指针有一个额外的前缀p,例如指向 a 的指针uint16_t将有前缀pus

  • 根据 MISRA 指南,不合格的标准 char 类型仅允许保存ASCII characters并以c为前缀。

  • 根据 MISRA 指南,类型变量char *只允许保存指向ASCII stringspc指针。

强调我的

功能

  • 文件范围静态(私有)函数以 prv 为前缀。

  • API 函数以其返回类型为前缀,按照为变量定义的约定,并添加前缀vvoid

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

强调我的

  • 宏预先固定在定义它们的文件中。前缀是小写的。例如,configUSE_PREEMPTION在 FreeRTOSConfig.h 中定义。

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

强调我的