C 弗里特斯匈牙利记法

C 弗里特斯匈牙利记法,c,embedded,freertos,hungarian-notation,C,Embedded,Freertos,Hungarian Notation,我是RTOS和C编程的完全新手,而且我仍然习惯C的良好实践。所以我打开了一个使用FreeRTOS的项目,我注意到OS文件使用匈牙利符号。我对符号略知一二,但在FreeRTOS.h文件中遇到了一些新的“标准”,它们是: #ifndef configASSERT #define configASSERT( x ) #define configASSERT_DEFINED 0 #else #define configASSERT_DEFINED 1 #endif 除此之外 #

我是RTOS和C编程的完全新手,而且我仍然习惯C的良好实践。所以我打开了一个使用FreeRTOS的项目,我注意到OS文件使用匈牙利符号。我对符号略知一二,但在
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
我到处都找遍了那些“首字母”代表什么,但还是弄不明白

所以,如果有人能帮我理解这一点,或者能给我指一条路或什么的,我将非常感激。

看着

命名约定

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

变量

  • uint32\u t
    类型的变量前缀为ul,其中'u'表示
    无符号
    'l'表示

  • uint16\u t
    类型的变量前缀为us,其中'u'表示“无符号”,而's'表示

  • uint8\u t
    类型的变量前缀为uc,其中'u'表示“无符号”,而'c'表示
    字符

  • 非标准类型的变量前缀为x。示例包括
    BaseType\u t
    TickType\u t
    ,它们是可移植层定义的typedef,分别用于体系结构的自然类型或最有效类型以及用于保存RTOS勾号计数的类型

  • Unsigned
    非标准类型的变量有一个额外的前缀u。例如,
    UBaseType\u t
    unsigned BaseType\u t
    )类型的变量前缀为ux

  • size\u t
    类型的变量也带有前缀x

  • 枚举变量的前缀为e

  • 指针具有附加前缀p,例如指向
    uint16\u t
    的指针将具有前缀pus

  • 根据MISRA指南,不合格的标准字符类型仅允许包含
    ASCII字符
    ,并且前缀为c

  • 根据MISRA指南,类型为
    char*
    的变量仅允许包含指向
    ASCII字符串的指针,并且前缀为pc

重点矿山

功能

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

  • 根据为变量定义的约定,API函数以其返回类型作为前缀,并为
    void
    添加前缀v

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

重点矿山

  • 宏是用定义宏的文件预先固定的预修复为小写。例如,
    configUSE\u抢占
    在FreeRTOSConfig.h中定义

  • 除了前缀之外,宏都是用大写字母编写的,并用下划线分隔单词


Emphasis mine

可能重复的请注意,匈牙利符号不一定被视为良好实践。现在用得不多了。查看维基百科上列出的缺点:@Lundin,谢谢你的评论。事实上,我认为我正在做的这个项目有点老了,以前的程序员在所有项目中都使用匈牙利符号。一旦它成为一个完整的嵌入式系统环境,我想我就没有办法摆脱它了。。。我得习惯了,哈哈。谢谢你的链接,我一定会看看的!样式指南和编码标准在FreeRTOS.org网站上。@LP's,非常感谢你,伙计,我仍然习惯于所有这种嵌入式系统环境。干杯谢谢你的回答。我刚刚发现了它,现在已经引用了它。FreeRTOS似乎主要使用Systems匈牙利符号,还有一点匈牙利风格的符号。