FreeRTOS Венгерская нотация
Я - новичок в программировании на 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
Я видел это х - как и в х TaskGetCurrentTaskHandle - везде. Кроме того, 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
Я искал везде, что означают эти "инициалы", но все еще не мог понять это.
Поэтому, если бы кто-нибудь мог помочь мне понять это или показать мне путь или что-то еще, я был бы очень благодарен.
1 ответ
Смотреть на человека
Соглашения об именах
Исходный код ядра RTOS и демонстрационного приложения использует следующие соглашения:
переменные
Переменные типа
uint32_t
имеют префикс ul, где 'u' обозначаетunsigned
и "л" обозначаетlong
,Переменные типа
uint16_t
с префиксом нас, где "u" обозначает "без знака", а "s" обозначаетshort
,Переменные типа
uint8_t
имеют префикс uc, где "u" обозначает "без знака", а "c" обозначаетchar
,Переменные не стандартного типа имеют префикс x. Примеры включают
BaseType_t
а такжеTickType_t
, которые являются переносимыми определенными определениями типов для естественного или наиболее эффективного типа для архитектуры и типа, используемого для хранения тиков RTOS соответственно.
Unsigned
переменные не стандартного типа имеют дополнительный префикс u. Например переменные типаUBaseType_t
(unsigned BaseType_t
) имеют префикс ux.Переменные типа
size_t
также имеют префикс х.Перечисляемые переменные имеют префикс e
Указатели имеют дополнительный префикс p, например указатель на
uint16_t
будет иметь префикс гноя.В соответствии с руководствами MISRA разрешено хранить только неквалифицированные стандартные типы символов
ASCII characters
и имеют префикс c.В соответствии с руководствами MISRA, переменные типа
char *
разрешено только держать указатели наASCII strings
и имеют префикс ПК.
Акцент мой
функции
Статические (частные) функции области файла имеют префикс prv.
API-функции имеют префикс с возвращаемым типом согласно соглашению, определенному для переменных, с добавлением префикса v для
void
,Имена функций API начинаются с имени файла, в котором они определены. Например
vTaskDelete
определяется в tasks.c и имеетvoid
тип возврата.
Акцент мой
макрос
Макросы предварительно фиксируются в файле, в котором они определены. Предварительная фиксация строчная. Например,
configUSE_PREEMPTION
определяется в FreeRTOSConfig.h.За исключением предварительного исправления, макросы записываются в верхнем регистре и используют подчеркивание для разделения слов.
Акцент мой