当前位置:网站首页>Naming rules for FreeRTOS

Naming rules for FreeRTOS

2022-07-05 08:06:00 Car chezi


If it's just touching FreeRTOS, See its name , It's ridiculous , Like a heavenly book . therefore , It is still necessary to understand its naming rules .

Variable

  1. uint32_t The defined variables are prefixed ul. u representative unsigned Unsigned ,l representative long Long integer .

    for example :

    static portFORCE_INLINE uint32_t Atomic_CompareAndSwap_u32( 
        uint32_t volatile * pulDestination,
        uint32_t ulExchange,
        uint32_t ulComparand )
    

    ulExchange,ulComparand this is it

  2. uint16_t The defined variables are prefixed us. u representative unsigned Unsigned ,s representative short Short .

    for example : const uint16_t usStackDepth

  3. uint8_t The defined variables are prefixed uc. u representative unsigned Unsigned ,c representative char Character .

    for example :

        #if ( configUSE_TASK_NOTIFICATIONS == 1 )
            uint32_t ulDummy18[ configTASK_NOTIFICATION_ARRAY_ENTRIES ];
            uint8_t ucDummy19[ configTASK_NOTIFICATION_ARRAY_ENTRIES ];
        #endif
        #if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 )
            uint8_t uxDummy20;
        #endif
    

    ucDummy19 this is it ;

    But I don't understand ,uxDiummy20 Why is it used ux Well ?

  4. int The defined variables are prefixed i.i representative int

    for example :int iTaskErrno;

  5. stdint.h Variable types not defined in the file , When defining variables, you need to prefix x.

    for example :

    BaseType_t xCoRoutinePreviouslyWoken

    MiniListItem_t xListEnd

  6. stdint.h Unsigned variable type not defined in the file , When defining variables, prefix them u, such as UBaseType_t Definition
    The variable of should be prefixed ux.

    for example :

    typedef unsigned long UBaseType_t;

    UBaseType_t uxPriority;

  7. Enumerating variables will be prefixed e.

    for example :

    typedef enum
    {
          
        eRunning = 0, /* A task is querying the state of itself, so must be running. */
        eReady,       /* The task being queried is in a ready or pending ready list. */
        eBlocked,     /* The task being queried is in the Blocked state. */
        eSuspended,   /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */
        eDeleted,     /* The task being queried has been deleted, but its TCB has not yet been freed. */
        eInvalid      /* Used as an 'invalid state' value. */
    } eTaskState;
    
    eTaskState eState;
    
  8. Pointer variables are prefixed p.

    for example :

    TCB_t * pxTCB;

    uint8_t * pucQueueStorage; // Because it's unsigned , So it is pu

  9. according to MISRA (The Motor Industry Software Reliability Association, The Chinese name is Automobile Industry Software Reliability Association ) Code rules ,char Defined variables can only be used for ASCII character , Prefix usage c.

    for example :

    char cRxedChar;

  10. according to MISRA Code rules ,**char *** The defined pointer variable can only be used for ASCII character string , Prefix usage pc.

    for example :

    char *pcStringToSend;

function

  1. Combined with the static Declared function , Prefix the definition prv( word private Abbreviation ).

    for example :

    static void prvInitialiseCoRoutineLists( void );

  2. Function with return value , According to the data type of the return value , Add the corresponding prefix , If there is no return value , namely void type , Prefix functions with letters v.

    for example :

    BaseType_t xQueueGenericReset( QueueHandle_t xQueue,
                                   BaseType_t xNewQueue );
    
    #define configRUN_TIME_COUNTER_TYPE uint32_t
    configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimePercent( void );
    
    StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
                                                 StackType_t * pxEndOfStack,
                                                 TaskFunction_t pxCode,
                                                 void * pvParameters,
                                                 BaseType_t xRunPrivileged );
    
    const char * pcQueueGetName( QueueHandle_t xQueue );
    
  3. According to the file name , When defining the corresponding function in the file, the file name may be added to the function name , such as tasks.c Functions in the file
    vTaskDelete, Function task Is in the file name task.

Macro definition

  1. According to the file where the macro definition is located , The file name is also added to the macro definition when the macro definition in the file is declared , For example, macro definition
    configUSE_PREEMPTION Is defined in the file FreeRTOSConfig.h Inside . In the macro definition config It's Wen
    In the piece name config. Also note , Prefix should be lowercase .

  2. Except for the prefix , The rest is capitalized , At the same time, separate with underline .

    for example :

    // include\queue.h
    #define queueQUEUE_TYPE_SET ( ( uint8_t ) 0U )
    
    
    // include\list.h
    #define listINSERT_END( pxList, pxNewListItem ) \ {
             \ ListItem_t * const pxIndex = ( pxList )->pxIndex; \ ...
    
    // include\timers.h
    #define tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR ( ( BaseType_t ) -2 )
    
    // include\croutine.h
    #define crQUEUE_RECEIVE_FROM_ISR( pxQueue, pvBuffer, pxCoRoutineWoken ) \ xQueueCRReceiveFromISR( ( pxQueue ), ( pvBuffer ), ( pxCoRoutineWoken ) )
    

Conclusion

If you study it carefully FreeRTOS The name of , You will also see that some places do not conform to the above rules .

I don't know what the author thinks , Anyway, I don't like such a name .


Reference material

FreeRTOS Coding standard and naming style - Rookie College

原网站

版权声明
本文为[Car chezi]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140546257377.html