C 弗里特斯匈牙利记法
我是RTOS和C编程的完全新手,而且我仍然习惯C的良好实践。所以我打开了一个使用FreeRTOS的项目,我注意到OS文件使用匈牙利符号。我对符号略知一二,但在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 除此之外 #
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。另外,v、pd和类似的变量名,如标题的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匈牙利符号,还有一点匈牙利风格的符号。