Search code examples
cfreertos

How can a #define from another headder file be used if the headderfile is not included?


I'm currently working with FreeRTOS, and have noticed something, which i have not encountered before.

The file "projdefs.h" uses a define from the file "FreeRTOSConfig.h" without including "FreeRTOSConfig.h" without including it. "projdefs.h" does not include any other files for that matter.

How is this possible?

The case is shown below:

//projdefs.h

#ifndef pdMS_TO_TICKS
    #define pdMS_TO_TICKS( xTimeInMs )    ( ( TickType_t ) ( ( ( TickType_t ) ( xTimeInMs ) * ( TickType_t ) configTICK_RATE_HZ ) / ( TickType_t ) 1000U ) )
#endif

//FreeRTOSConfig.h
#ifndef configTICK_RATE_HZ
#define configTICK_RATE_HZ (1000)
#endif

I've tried to google my way to the answer but nothing has been forthcoming.


Solution

  • In the beginning of FreeRTOS.h, you will notice:

    /* Application specific configuration options. */
    #include "FreeRTOSConfig.h"
    
    /* Basic FreeRTOS definitions. */
    #include "projdefs.h"
    

    Also, pdMS_TO_TICKS() macro is not used by the kernel itself. FreeRTOS kernel always uses ticks. The macro is provided for users (we, application developers) only.