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.

  • За исключением предварительного исправления, макросы записываются в верхнем регистре и используют подчеркивание для разделения слов.

Акцент мой

Другие вопросы по тегам