Венгерская нотация 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

Я видел этот 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

Я искал везде, что означают эти «инициалы», но так и не смог понять.

Итак, если кто-нибудь может помочь мне понять это или показать мне путь или что-то в этом роде, я был бы очень благодарен.


person ulissesBR    schedule 04.10.2016    source источник
comment
возможный дубликат http://stackoverflow.com/questions/32199690/what-is-v-and-x-means-in-freertos-task-creating-or-used-in-it   -  person kkrambo    schedule 04.10.2016
comment
Обратите внимание, что венгерская нотация не обязательно считается хорошей практикой. В настоящее время он мало используется. См. недостатки, перечисленные в Википедии: en.wikipedia.org/wiki/Hungarian_notation   -  person Lundin    schedule 04.10.2016
comment
@Lundin, спасибо за комментарий. На самом деле, я думаю, что проект, над которым я работаю, довольно старый, и предыдущие программисты использовали во всем этом венгерскую нотацию. Как только это будет полная среда встроенной системы, я думаю, что у меня не будет возможности выбраться из нее ... Мне придется как-то привыкнуть к этому, лол. Спасибо за ссылку, обязательно посмотрю!   -  person ulissesBR    schedule 04.10.2016
comment
Руководство по стилю и стандарт кодирования: ‹a href=freertos .org/ на веб-сайте FreeRTOS.org‹/a›.   -  person Richard    schedule 05.10.2016


Ответы (1)


Глядя на человека

Соглашения об именах

Исходный код ядра RTOS и демонстрационного приложения использует следующие соглашения:

Переменные

  • Переменные типа uint32_t имеют префикс ul, где 'u' обозначает unsigned, а 'l' обозначает long.

  • Переменные типа uint16_t имеют префикс us, где '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 также имеют префикс x.

  • Перечисленные переменные имеют префикс e.

  • Указатели имеют дополнительный префикс p, например, указатель на uint16_t будет иметь префикс pus.

  • В соответствии с руководствами MISRA, неквалифицированные стандартные типы char могут содержать только ASCII characters и имеют префикс c.

  • В соответствии с руководствами MISRA, переменные типа char * могут содержать только указатели на ASCII strings и имеют префикс pc.

Внимание мое

Функции

  • Статические (закрытые) функции файловой области имеют префикс prv.

  • Функции API имеют префикс типа возвращаемого значения в соответствии с соглашением, определенным для переменных, с добавлением префикса v для void.

  • Имена функций API начинаются с имени файла, в котором они определены. Например, vTaskDelete определено в tasks.c и имеет возвращаемый тип void.

Внимание мое

Макросы

  • Макросы предварительно фиксируются в файле, в котором они определены. Префикс в нижнем регистре. Например, configUSE_PREEMPTION определено в FreeRTOSConfig.h.

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

Внимание мое

person LPs    schedule 04.10.2016
comment
@LP, большое спасибо, чувак, я все еще привыкаю ко всей этой среде встроенных систем. Ваше здоровье! - person ulissesBR; 04.10.2016
comment
Спасибо за этот ответ. Я только что обнаружил это и теперь сослался на него в моем ответе, описывающем венгерскую нотацию здесь. Похоже, что FreeRTOS использует в основном нотацию Системный венгерский с небольшим количеством нотации в стиле Венгерский для приложений. - person Gabriel Staples; 30.04.2018