Ver Fonte

freertos: Refactor configuration files

This commit refactors the FreeRTOS configuration headers as follows:

- Layout is now similar to FreeRTOSConfig.h found in other upstream demos
- Separate out Vanilla FreeRTOS configurations and ESP-IDF additions
- Move/remove some irrelevant/unused macros and configurations
Darian Leung há 4 anos atrás
pai
commit
2cebfcf885

+ 17 - 24
components/freertos/FreeRTOS-Kernel/include/freertos/FreeRTOS.h

@@ -499,12 +499,6 @@
     #define traceQUEUE_SET_SEND    traceQUEUE_SEND
 #endif
 
-#ifdef ESP_PLATFORM
-#ifndef traceQUEUE_SEMAPHORE_RECEIVE
-    #define traceQUEUE_SEMAPHORE_RECEIVE( pxQueue )
-#endif
-#endif // ESP_PLATFORM
-
 #ifndef traceQUEUE_SEND
     #define traceQUEUE_SEND( pxQueue )
 #endif
@@ -557,16 +551,6 @@
     #define traceQUEUE_DELETE( pxQueue )
 #endif
 
-#ifdef ESP_PLATFORM
-#ifndef traceQUEUE_GIVE_FROM_ISR
-    #define traceQUEUE_GIVE_FROM_ISR( pxQueue )
-#endif
-
-#ifndef traceQUEUE_GIVE_FROM_ISR_FAILED
-    #define traceQUEUE_GIVE_FROM_ISR_FAILED( pxQueue )
-#endif
-#endif // ESP_PLATFORM
-
 #ifndef traceTASK_CREATE
     #define traceTASK_CREATE( pxNewTCB )
 #endif
@@ -771,6 +755,9 @@
     #define traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength )
 #endif
 
+/*
+Default values for trace macros added by ESP-IDF and are not part of Vanilla FreeRTOS
+*/
 #ifdef ESP_PLATFORM
 #ifndef traceISR_EXIT_TO_SCHEDULER
     #define traceISR_EXIT_TO_SCHEDULER()
@@ -783,6 +770,18 @@
 #ifndef traceISR_ENTER
     #define traceISR_ENTER(_n_)
 #endif
+
+#ifndef traceQUEUE_SEMAPHORE_RECEIVE
+    #define traceQUEUE_SEMAPHORE_RECEIVE( pxQueue )
+#endif
+
+#ifndef traceQUEUE_GIVE_FROM_ISR
+    #define traceQUEUE_GIVE_FROM_ISR( pxQueue )
+#endif
+
+#ifndef traceQUEUE_GIVE_FROM_ISR_FAILED
+    #define traceQUEUE_GIVE_FROM_ISR_FAILED( pxQueue )
+#endif
 #endif // ESP_PLATFORM
 
 #ifndef configGENERATE_RUN_TIME_STATS
@@ -977,8 +976,8 @@
 /* Either variables of tick type cannot be read atomically, or
  * portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when
  * the tick count is returned to the standard critical section macros. */
-    #define portTICK_TYPE_ENTER_CRITICAL(mux) portENTER_CRITICAL(mux)
-    #define portTICK_TYPE_EXIT_CRITICAL(mux) portEXIT_CRITICAL(mux)
+    #define portTICK_TYPE_ENTER_CRITICAL()                      portENTER_CRITICAL()
+    #define portTICK_TYPE_EXIT_CRITICAL()                       portEXIT_CRITICAL()
     #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR()         portSET_INTERRUPT_MASK_FROM_ISR()
     #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x )    portCLEAR_INTERRUPT_MASK_FROM_ISR( ( x ) )
 #else
@@ -1060,12 +1059,6 @@
     #define pxContainer                   pvContainer
 #endif /* configENABLE_BACKWARD_COMPATIBILITY */
 
-#ifdef ESP_PLATFORM
-#ifndef configESP32_PER_TASK_DATA
-    #define configESP32_PER_TASK_DATA 1
-#endif
-#endif // ESP_PLATFORM
-
 #if ( configUSE_ALTERNATIVE_API != 0 )
     #error The alternative API was deprecated some time ago, and was removed in FreeRTOS V9.0 0
 #endif

+ 1 - 1
components/freertos/FreeRTOS-Kernel/include/freertos/portable.h

@@ -136,7 +136,7 @@
                                              TaskFunction_t pxCode,
                                              void * pvParameters ) PRIVILEGED_FUNCTION;
     #endif
-#endif
+#endif /* if ( portUSING_MPU_WRAPPERS == 1 ) */
 
 #ifdef configUSE_FREERTOS_PROVIDED_HEAP
 

+ 0 - 5
components/freertos/FreeRTOS-Kernel/include/freertos/timers.h

@@ -454,12 +454,7 @@ void vTimerSetTimerID( TimerHandle_t xTimer,
 BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;
 
 /**
- * @cond !DOC_EXCLUDE_HEADER_SECTION
  * TaskHandle_t xTimerGetTimerDaemonTaskHandle( void );
- * @endcond
- *
- * xTimerGetTimerDaemonTaskHandle() is only available if
- * INCLUDE_xTimerGetTimerDaemonTaskHandle is set to 1 in FreeRTOSConfig.h.
  *
  * Simply returns the handle of the timer service/daemon task.  It it not valid
  * to call xTimerGetTimerDaemonTaskHandle() before the scheduler has been started.

+ 12 - 19
components/freertos/FreeRTOS-Kernel/portable/riscv/include/freertos/FreeRTOSConfig_arch.h

@@ -7,32 +7,25 @@
 #ifndef FREERTOS_CONFIG_RISCV_H
 #define FREERTOS_CONFIG_RISCV_H
 
-// This file is included in the common FreeRTOSConfig.h.
+//RISC-V Archiecture specific configuration. This file is included in the common FreeRTOSConfig.h.
 
 #include "sdkconfig.h"
 
-#define configUSE_PORT_OPTIMISED_TASK_SELECTION         0
+/* ------------------------------------------------- FreeRTOS Config ---------------------------------------------------
+ * - All Vanilla FreeRTOS configuration goes into this section
+ * ------------------------------------------------------------------------------------------------------------------ */
 
-#ifndef __ASSEMBLER__
-#include "esp_rom_sys.h"
-#endif // __ASSEMBLER__
+// ------------------ Scheduler Related --------------------
 
-/* The maximum interrupt priority from which FreeRTOS.org API functions can
-   be called.  Only API functions that end in ...FromISR() can be used within
-   interrupts. */
-#define configMAX_SYSCALL_INTERRUPT_PRIORITY            0
+#define configUSE_PORT_OPTIMISED_TASK_SELECTION             0
+#define configMAX_API_CALL_INTERRUPT_PRIORITY               0
 
-#ifndef configISR_STACK_SIZE
-#define configISR_STACK_SIZE                            (CONFIG_FREERTOS_ISR_STACKSIZE)
-#endif
+/* ------------------------------------------------ ESP-IDF Additions --------------------------------------------------
+ *
+ * ------------------------------------------------------------------------------------------------------------------ */
 
-#ifndef __ASSEMBLER__
-#if CONFIG_APPTRACE_SV_ENABLE
-extern int xPortSwitchFlag;
-#define os_task_switch_is_pended(_cpu_) (xPortSwitchFlag)
-#else
-#define os_task_switch_is_pended(_cpu_) (false)
-#endif
+#ifndef configISR_STACK_SIZE
+#define configISR_STACK_SIZE                                (CONFIG_FREERTOS_ISR_STACKSIZE)
 #endif
 
 #endif // FREERTOS_CONFIG_RISCV_H

+ 15 - 0
components/freertos/FreeRTOS-Kernel/portable/riscv/include/freertos/portmacro.h

@@ -498,7 +498,22 @@ bool xPortcheckValidStackMem(const void *ptr);
 #define portVALID_TCB_MEM(ptr) xPortCheckValidTCBMem(ptr)
 #define portVALID_STACK_MEM(ptr) xPortcheckValidStackMem(ptr)
 
+// --------------------- App-Trace -------------------------
 
+#if CONFIG_APPTRACE_SV_ENABLE
+extern int xPortSwitchFlag;
+#define os_task_switch_is_pended(_cpu_) (xPortSwitchFlag)
+#else
+#define os_task_switch_is_pended(_cpu_) (false)
+#endif
+
+// --------------------- Debugging -------------------------
+
+#if CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION
+#define UNTESTED_FUNCTION() { esp_rom_printf("Untested FreeRTOS function %s\r\n", __FUNCTION__); configASSERT(false); } while(0)
+#else
+#define UNTESTED_FUNCTION()
+#endif
 
 /* ---------------------------------------------------- Deprecate ------------------------------------------------------
  * - Pull in header containing deprecated macros here

+ 37 - 54
components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/FreeRTOSConfig_arch.h

@@ -7,79 +7,62 @@
 #ifndef FREERTOS_CONFIG_XTENSA_H
 #define FREERTOS_CONFIG_XTENSA_H
 
-#include "sdkconfig.h"
+//Xtensa Archiecture specific configuration. This file is included in the common FreeRTOSConfig.h.
 
-/* enable use of optimized task selection by the scheduler */
-#ifdef CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
-#define configUSE_PORT_OPTIMISED_TASK_SELECTION         1
-#endif
-
-#define XT_USE_THREAD_SAFE_CLIB                         0
-#undef XT_USE_SWPRI
+#include "sdkconfig.h"
 
+/* Required for configuration-dependent settings. */
+#include "xtensa_config.h"
+
+/* -------------------------------------------- Xtensa Additional Config  ----------------------------------------------
+ * - Provide Xtensa definitions usually given by -D option when building with xt-make (see readme_xtensa.txt)
+ * - xtensa_rtos.h and xtensa_timer.h will default some of these values
+ *      - XT_SIMULATOR         configXT_SIMULATOR
+ *      - XT_BOARD             configXT_BOARD
+ *      - XT_CLOCK_FREQ        Should not be defined as we are using XT_BOARD mode
+ *      - XT_TICK_PER_SEC      Defaults to configTICK_RATE_HZ
+ *      - XT_TIMER_INDEX       Defaults to configXT_TIMER_INDEX
+ *      - XT_INTEXC_HOOKS      Defaults to configXT_INTEXC_HOOKS
+ *      - XT_USE_OVLY          We don't define this (unused)
+ *      - XT_USE_SWPRI         We don't define this (unused)
+ * ------------------------------------------------------------------------------------------------------------------ */
+
+#define configXT_SIMULATOR                                  0
+#define configXT_BOARD                                      1   /* Board mode */
 #if CONFIG_FREERTOS_CORETIMER_0
-#define XT_TIMER_INDEX                                  0
+#define configXT_TIMER_INDEX                                0
 #elif CONFIG_FREERTOS_CORETIMER_1
-#define XT_TIMER_INDEX                                  1
+#define configXT_TIMER_INDEX                                1
 #endif
+#define configXT_INTEXC_HOOKS                               0
 
-#ifndef __ASSEMBLER__
-/**
- * This function is defined to provide a deprecation warning whenever
- * XT_CLOCK_FREQ macro is used.
- * Update the code to use esp_clk_cpu_freq function instead.
- * @return current CPU clock frequency, in Hz
- */
-int xt_clock_freq(void) __attribute__((deprecated));
-
-#define XT_CLOCK_FREQ   (xt_clock_freq())
+#define configBENCHMARK                                     0
 
-#endif // __ASSEMBLER__
+/* ------------------------------------------------- FreeRTOS Config ---------------------------------------------------
+ * - All Vanilla FreeRTOS configuration goes into this section
+ * ------------------------------------------------------------------------------------------------------------------ */
 
-/* Required for configuration-dependent settings */
-#include <freertos/xtensa_config.h>
+// ------------------ Scheduler Related --------------------
 
-/* configASSERT behaviour */
-#ifndef __ASSEMBLER__
-#include <assert.h>
-#include "esp_rom_sys.h"
-#endif // __ASSEMBLER__
-
-#if CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION
-#define UNTESTED_FUNCTION() { esp_rom_printf("Untested FreeRTOS function %s\r\n", __FUNCTION__); configASSERT(false); } while(0)
+#ifdef CONFIG_FREERTOS_OPTIMIZED_SCHEDULER
+#define configUSE_PORT_OPTIMISED_TASK_SELECTION             1
 #else
-#define UNTESTED_FUNCTION()
+#define configUSE_PORT_OPTIMISED_TASK_SELECTION             0
 #endif
+#define configMAX_API_CALL_INTERRUPT_PRIORITY               XCHAL_EXCM_LEVEL
 
-#define configXT_BOARD                                  1   /* Board mode */
-#define configXT_SIMULATOR                              0
-#define configBENCHMARK                                 0
-
-/* The maximum interrupt priority from which FreeRTOS.org API functions can
-   be called.  Only API functions that end in ...FromISR() can be used within
-   interrupts. */
-#define configMAX_SYSCALL_INTERRUPT_PRIORITY	XCHAL_EXCM_LEVEL
-
-/* Stack alignment, architecture specifc. Must be a power of two. */
-#define configSTACK_ALIGNMENT                           16
-
+/* ------------------------------------------------ ESP-IDF Additions --------------------------------------------------
+ *
+ * ------------------------------------------------------------------------------------------------------------------ */
 
 /* The Xtensa port uses a separate interrupt stack. Adjust the stack size
  * to suit the needs of your specific application.
  * Size needs to be aligned to the stack increment, since the location of
  * the stack for the 2nd CPU will be calculated using configISR_STACK_SIZE.
  */
+#define configSTACK_ALIGNMENT                               16
 #ifndef configISR_STACK_SIZE
-#define configISR_STACK_SIZE                            ((CONFIG_FREERTOS_ISR_STACKSIZE + configSTACK_ALIGNMENT - 1) & (~(configSTACK_ALIGNMENT - 1)))
-#endif
-
-#ifndef __ASSEMBLER__
-#if CONFIG_APPTRACE_SV_ENABLE
-extern uint32_t port_switch_flag[];
-#define os_task_switch_is_pended(_cpu_) (port_switch_flag[_cpu_])
-#else
-#define os_task_switch_is_pended(_cpu_) (false)
-#endif
+#define configISR_STACK_SIZE                                ((CONFIG_FREERTOS_ISR_STACKSIZE + configSTACK_ALIGNMENT - 1) & (~(configSTACK_ALIGNMENT - 1)))
 #endif
 
 #endif // FREERTOS_CONFIG_XTENSA_H

+ 15 - 0
components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/portmacro.h

@@ -752,7 +752,22 @@ bool xPortcheckValidStackMem(const void *ptr);
 #define portVALID_TCB_MEM(ptr) xPortCheckValidTCBMem(ptr)
 #define portVALID_STACK_MEM(ptr) xPortcheckValidStackMem(ptr)
 
+// --------------------- App-Trace -------------------------
 
+#if CONFIG_APPTRACE_SV_ENABLE
+extern uint32_t port_switch_flag[];
+#define os_task_switch_is_pended(_cpu_) (port_switch_flag[_cpu_])
+#else
+#define os_task_switch_is_pended(_cpu_) (false)
+#endif
+
+// --------------------- Debugging -------------------------
+
+#if CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION
+#define UNTESTED_FUNCTION() { esp_rom_printf("Untested FreeRTOS function %s\r\n", __FUNCTION__); configASSERT(false); } while(0)
+#else
+#define UNTESTED_FUNCTION()
+#endif
 
 /* ---------------------------------------------------- Deprecate ------------------------------------------------------
  * - Pull in header containing deprecated macros here

+ 39 - 3
components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/xtensa_config.h

@@ -111,7 +111,43 @@ extern "C" {
   #define STK_INTEXC_EXTRA          0
 #endif
 
-#define XT_CLIB_CONTEXT_AREA_SIZE         0
+/* Check C library thread safety support and compute size of C library save area.
+   For the supported libraries, we enable thread safety by default, and this can
+   be overridden from the compiler/make command line. */
+#if (XSHAL_CLIB == XTHAL_CLIB_NEWLIB) || (XSHAL_CLIB == XTHAL_CLIB_XCLIB)
+  #ifndef XT_USE_THREAD_SAFE_CLIB
+    #define XT_USE_THREAD_SAFE_CLIB         1
+  #endif
+#else
+  #define XT_USE_THREAD_SAFE_CLIB           0
+#endif
+
+#if XT_USE_THREAD_SAFE_CLIB > 0u
+  #if XSHAL_CLIB == XTHAL_CLIB_XCLIB
+    #define XT_HAVE_THREAD_SAFE_CLIB        1
+    #if !defined __ASSEMBLER__
+      #include <sys/reent.h>
+      #define XT_CLIB_CONTEXT_AREA_SIZE     ((sizeof(struct _reent) + 15) + (-16))
+      #define XT_CLIB_GLOBAL_PTR            _reent_ptr
+      #define _REENT_INIT_PTR               _init_reent
+      #define _impure_ptr                   _reent_ptr
+
+      void _reclaim_reent(void * ptr);
+    #endif
+  #elif XSHAL_CLIB == XTHAL_CLIB_NEWLIB
+    #define XT_HAVE_THREAD_SAFE_CLIB        1
+    #if !defined __ASSEMBLER__
+      #include <sys/reent.h>
+      #define XT_CLIB_CONTEXT_AREA_SIZE     ((sizeof(struct _reent) + 15) + (-16))
+      #define XT_CLIB_GLOBAL_PTR            _impure_ptr
+    #endif
+  #else
+    #define XT_HAVE_THREAD_SAFE_CLIB        0
+    #error The selected C runtime library is not thread safe.
+  #endif
+#else
+  #define XT_CLIB_CONTEXT_AREA_SIZE         0
+#endif
 
 /*------------------------------------------------------------------------------
   Extra size -- interrupt frame plus coprocessor save area plus hook space.
@@ -141,8 +177,8 @@ extern "C" {
 #define XT_STACK_MIN_SIZE         ((XT_XTRA_SIZE + XT_USER_SIZE) / sizeof(unsigned char))
 
 /* OS overhead with and without C library thread context. */
-#define XT_STACK_EXTRA            (XT_XTRA_SIZE)
-#define XT_STACK_EXTRA_CLIB       (XT_XTRA_SIZE + XT_CLIB_CONTEXT_AREA_SIZE)
+#define XT_STACK_EXTRA              (XT_XTRA_SIZE)
+#define XT_STACK_EXTRA_CLIB         (XT_XTRA_SIZE + XT_CLIB_CONTEXT_AREA_SIZE)
 
 
 #ifdef __cplusplus

+ 1 - 1
components/freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_overlay_os_hook.c

@@ -35,7 +35,7 @@
 #include "FreeRTOS.h"
 #include "semphr.h"
 
-#if configUSE_MUTEX
+#if configUSE_MUTEXES
 
 /* Mutex object that controls access to the overlay. Currently only one
  * overlay region is supported so one mutex suffices.

+ 162 - 151
components/freertos/esp_additions/include/freertos/FreeRTOSConfig.h

@@ -9,8 +9,13 @@
 
 #include "sdkconfig.h"
 
-/* for likely and unlikely */
-#include "esp_compiler.h"
+/*
+This file get's pulled into assembly sources. Therefore, some includes need to be wrapped in #ifndef __ASSEMBLER__
+*/
+
+#ifndef __ASSEMBLER__
+#include <assert.h>         //For configASSERT()
+#endif /* def __ASSEMBLER__ */
 
 // The arch-specific FreeRTOSConfig_arch.h in port/<arch>/include.
 #include "freertos/FreeRTOSConfig_arch.h"
@@ -21,134 +26,122 @@
 #error "Needs architecture-speific FreeRTOSConfig.h!"
 #endif
 
-#ifndef CONFIG_FREERTOS_UNICORE
-#define portNUM_PROCESSORS                              2
-#else
-#define portNUM_PROCESSORS                              1
-#endif
-
-#define portUSING_MPU_WRAPPERS                          0
-#define configUSE_MUTEX                                 1
-
-#define configNUM_THREAD_LOCAL_STORAGE_POINTERS CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS
-#define configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS     1
-
-/* configASSERT behaviour */
-#ifndef __ASSEMBLER__
-#include <assert.h>
-
-#define configASSERT(a) assert(a)
-
-#if CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION
-#define UNTESTED_FUNCTION() { esp_rom_printf("Untested FreeRTOS function %s\r\n", __FUNCTION__); configASSERT(false); } while(0)
-#else
-#define UNTESTED_FUNCTION()
-#endif
-
-#endif /* def __ASSEMBLER__ */
-
-/*-----------------------------------------------------------
- * Application specific definitions.
- *
- * These definitions should be adjusted for your particular hardware and
- * application requirements.
- *
- * Note that the default heap size is deliberately kept small so that
- * the build is more likely to succeed for configurations with limited
- * memory.
- *
- * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
- * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
- *----------------------------------------------------------*/
-
-#define configUSE_PREEMPTION                            1
-#define configUSE_IDLE_HOOK                             1
-#define configUSE_TICK_HOOK                             1
-#define configRECORD_STACK_HIGH_ADDRESS                 1
-#define configTICK_RATE_HZ                              ( CONFIG_FREERTOS_HZ )
-
-/* This has impact on speed of search for highest priority */
-#define configMAX_PRIORITIES                            ( 25 )
-
-/* Various things that impact minimum stack sizes */
+/* ----------------------------------------------------- Helpers -------------------------------------------------------
+ * - Macros that the FreeRTOS configuration macros depend on
+ * ------------------------------------------------------------------------------------------------------------------ */
 
 /* Higher stack checker modes cause overhead on each function call */
 #if CONFIG_STACK_CHECK_ALL || CONFIG_STACK_CHECK_STRONG
-#define configSTACK_OVERHEAD_CHECKER                    256
+#define STACK_OVERHEAD_CHECKER                          256
 #else
-#define configSTACK_OVERHEAD_CHECKER                    0
+#define STACK_OVERHEAD_CHECKER                          0
 #endif
 
 /* with optimizations disabled, scheduler uses additional stack */
 #if CONFIG_COMPILER_OPTIMIZATION_NONE
-#define configSTACK_OVERHEAD_OPTIMIZATION               320
+#define STACK_OVERHEAD_OPTIMIZATION                     320
 #else
-#define configSTACK_OVERHEAD_OPTIMIZATION               0
+#define STACK_OVERHEAD_OPTIMIZATION                     0
 #endif
 
 /* apptrace mdule increases minimum stack usage */
 #if CONFIG_APPTRACE_ENABLE
-#define configSTACK_OVERHEAD_APPTRACE                   1280
+#define STACK_OVERHEAD_APPTRACE                         1280
 #else
-#define configSTACK_OVERHEAD_APPTRACE                   0
+#define STACK_OVERHEAD_APPTRACE                         0
 #endif
 
 /* Stack watchpoint decreases minimum usable stack size by up to 60 bytes.
    See FreeRTOS FREERTOS_WATCHPOINT_END_OF_STACK option in Kconfig. */
 #if CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK
-#define configSTACK_OVERHEAD_WATCHPOINT                   60
+#define STACK_OVERHEAD_WATCHPOINT                       60
 #else
-#define configSTACK_OVERHEAD_WATCHPOINT                   0
+#define STACK_OVERHEAD_WATCHPOINT                       0
 #endif
 
-#define configSTACK_OVERHEAD_TOTAL (                                    \
-                                    configSTACK_OVERHEAD_CHECKER +      \
-                                    configSTACK_OVERHEAD_OPTIMIZATION + \
-                                    configSTACK_OVERHEAD_APPTRACE +     \
-                                    configSTACK_OVERHEAD_WATCHPOINT     \
-                                                                        )
+#define configSTACK_OVERHEAD_TOTAL (                              \
+                                    STACK_OVERHEAD_CHECKER +      \
+                                    STACK_OVERHEAD_OPTIMIZATION + \
+                                    STACK_OVERHEAD_APPTRACE +     \
+                                    STACK_OVERHEAD_WATCHPOINT     \
+                                                            )
+
+/* ------------------------------------------------- FreeRTOS Config ---------------------------------------------------
+ * - All Vanilla FreeRTOS configuration goes into this section
+ * - Keep this section in-sync with the corresponding version of single-core upstream version of FreeRTOS
+ * - Don't put any SMP or ESP-IDF exclusive FreeRTOS configurations here. Those go into the next section
+ * - Not all FreeRTOS configuration are listed. Some configurations have default values set in FreeRTOS.h thus don't
+ *   need to be explicitly defined.
+ * ------------------------------------------------------------------------------------------------------------------ */
 
-#define configMINIMAL_STACK_SIZE                        (768 + configSTACK_OVERHEAD_TOTAL)
+/*-----------------------------------------------------------
+ * Application specific definitions.
+ *
+ * These definitions should be adjusted for your particular hardware and
+ * application requirements.
+ *
+ * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
+ *
+ * See http://www.freertos.org/a00110.html
+ *----------------------------------------------------------*/
 
-#ifndef configIDLE_TASK_STACK_SIZE
-#define configIDLE_TASK_STACK_SIZE CONFIG_FREERTOS_IDLE_TASK_STACKSIZE
-#endif
+// ------------------ Scheduler Related --------------------
 
-/* Minimal heap size to make sure examples can run on memory limited
-   configs. Adjust this to suit your system. */
+#define configUSE_PREEMPTION                            1
+#define configUSE_TICKLESS_IDLE                         CONFIG_FREERTOS_USE_TICKLESS_IDLE
+#if configUSE_TICKLESS_IDLE
+#define configEXPECTED_IDLE_TIME_BEFORE_SLEEP           CONFIG_FREERTOS_IDLE_TIME_BEFORE_SLEEP
+#endif //configUSE_TICKLESS_IDLE
+#define configCPU_CLOCK_HZ                              (CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ * 1000000)
+#define configTICK_RATE_HZ                              CONFIG_FREERTOS_HZ
+#define configMAX_PRIORITIES                            ( 25 )  //This has impact on speed of search for highest priority
+#define configMINIMAL_STACK_SIZE                        ( 768 + configSTACK_OVERHEAD_TOTAL )
+#define configUSE_TIME_SLICING                          1
+#define configUSE_16_BIT_TICKS                          0
+#define configIDLE_SHOULD_YIELD                         0
+#define configKERNEL_INTERRUPT_PRIORITY                 1   //Todo: This currently isn't used anywhere
 
+// ------------- Synchronization Primitives ----------------
 
-//We define the heap to span all of the non-statically-allocated shared RAM. ToDo: Make sure there
-//is some space left for the app and main cpu when running outside of a thread.
-#define configAPPLICATION_ALLOCATED_HEAP                1
-#define configTOTAL_HEAP_SIZE                           (&_heap_end - &_heap_start)//( ( size_t ) (64 * 1024) )
+#define configUSE_MUTEXES                               1
+#define configUSE_RECURSIVE_MUTEXES                     1
+#define configUSE_COUNTING_SEMAPHORES                   1
+#define configUSE_QUEUE_SETS                            1
+#define configQUEUE_REGISTRY_SIZE                       CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE
+#define configUSE_TASK_NOTIFICATIONS                    1
+#define configTASK_NOTIFICATION_ARRAY_ENTRIES           1
 
-#define configMAX_TASK_NAME_LEN                         ( CONFIG_FREERTOS_MAX_TASK_NAME_LEN )
+// ----------------------- System --------------------------
 
-#ifdef CONFIG_FREERTOS_USE_TRACE_FACILITY
-#define configUSE_TRACE_FACILITY                        1       /* Used by uxTaskGetSystemState(), and other trace facility functions */
+#define configMAX_TASK_NAME_LEN                         CONFIG_FREERTOS_MAX_TASK_NAME_LEN
+#define configNUM_THREAD_LOCAL_STORAGE_POINTERS         CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS
+#ifndef CONFIG_IDF_TARGET_LINUX
+#define configSTACK_DEPTH_TYPE                          uint32_t
+#define configUSE_NEWLIB_REENTRANT                      1
 #endif
-
-#ifdef CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
-#define configUSE_STATS_FORMATTING_FUNCTIONS            1   /* Used by vTaskList() */
+#if CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY
+#define configENABLE_BACKWARD_COMPATIBILITY             1
+#else
+#define configENABLE_BACKWARD_COMPATIBILITY             0
 #endif
+#define configASSERT(a)                                 assert(a)
+#define configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H       1
 
-#ifdef CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID
-#define configTASKLIST_INCLUDE_COREID                   1
-#endif
+// ----------------------- Memory  -------------------------
 
-#ifdef CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
-#define configGENERATE_RUN_TIME_STATS                   1       /* Used by vTaskGetRunTimeStats() */
-#endif
+#define configSUPPORT_STATIC_ALLOCATION                 1
+#define configSUPPORT_DYNAMIC_ALLOCATION                1
+//We define the heap to span all of the non-statically-allocated shared RAM. ToDo: Make sure there
+//is some space left for the app and main cpu when running outside of a thread.
+#define configTOTAL_HEAP_SIZE                           (&_heap_end - &_heap_start)//( ( size_t ) (64 * 1024) )
+#define configAPPLICATION_ALLOCATED_HEAP                1
+#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP       0
 
-#define configUSE_16_BIT_TICKS                          0
-#define configIDLE_SHOULD_YIELD                         0
-#define configQUEUE_REGISTRY_SIZE                       CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE
-
-#define configUSE_MUTEXES                               1
-#define configUSE_RECURSIVE_MUTEXES                     1
-#define configUSE_COUNTING_SEMAPHORES                   1
+// ------------------------ Hooks --------------------------
 
+#define configUSE_IDLE_HOOK                             1
+#define configUSE_TICK_HOOK                             1
 #if CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE
 #define configCHECK_FOR_STACK_OVERFLOW                  0
 #elif CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL
@@ -156,100 +149,118 @@
 #elif CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY
 #define configCHECK_FOR_STACK_OVERFLOW                  2
 #endif
+#define configRECORD_STACK_HIGH_ADDRESS                 1
 
+// ------------------- Run-time Stats ----------------------
+
+#ifdef CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS
+#define configGENERATE_RUN_TIME_STATS                   1   /* Used by vTaskGetRunTimeStats() */
+#endif
+#ifdef CONFIG_FREERTOS_USE_TRACE_FACILITY
+#define configUSE_TRACE_FACILITY                        1   /* Used by uxTaskGetSystemState(), and other trace facility functions */
+#endif
+#ifdef CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS
+#define configUSE_STATS_FORMATTING_FUNCTIONS            1   /* Used by vTaskList() */
+#endif
+
+// -------------------- Co-routines  -----------------------
 
-/* Co-routine definitions. */
 #define configUSE_CO_ROUTINES                           0
-#define configMAX_CO_ROUTINE_PRIORITIES                 ( 2 )
+#define configMAX_CO_ROUTINE_PRIORITIES                 2
+
+// ------------------- Software Timer ----------------------
 
-/* Set the following definitions to 1 to include the API function, or zero
-   to exclude the API function. */
+#define configUSE_TIMERS                                1
+#define configTIMER_TASK_PRIORITY                       CONFIG_FREERTOS_TIMER_TASK_PRIORITY
+#define configTIMER_QUEUE_LENGTH                        CONFIG_FREERTOS_TIMER_QUEUE_LENGTH
+#define configTIMER_TASK_STACK_DEPTH                    CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH
+
+// -------------------- API Includes -----------------------
+
+#if CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY
+#define configENABLE_BACKWARD_COMPATIBILITY             1
+#else
+#define configENABLE_BACKWARD_COMPATIBILITY             0
+#endif
 
 #define INCLUDE_vTaskPrioritySet                        1
 #define INCLUDE_uxTaskPriorityGet                       1
 #define INCLUDE_vTaskDelete                             1
-#define INCLUDE_vTaskCleanUpResources                   0
 #define INCLUDE_vTaskSuspend                            1
-#define INCLUDE_vTaskDelayUntil                         1
+#define INCLUDE_xTaskDelayUntil                         1
 #define INCLUDE_vTaskDelay                              1
-#define INCLUDE_uxTaskGetStackHighWaterMark             1
-#define INCLUDE_pcTaskGetTaskName                       1
 #define INCLUDE_xTaskGetIdleTaskHandle                  1
-#define INCLUDE_pxTaskGetStackStart                     1
-#define INCLUDE_eTaskGetState                           1
 #define INCLUDE_xTaskAbortDelay                         1
-#define INCLUDE_xTaskGetHandle                          1
 #define INCLUDE_xSemaphoreGetMutexHolder                1
+#define INCLUDE_xTaskGetHandle                          1
+#define INCLUDE_uxTaskGetStackHighWaterMark             1
+#define INCLUDE_uxTaskGetStackHighWaterMark2            0
+#define INCLUDE_eTaskGetState                           1
+#define INCLUDE_xTaskResumeFromISR                      1
 #define INCLUDE_xTimerPendFunctionCall                  1
-#define INCLUDE_xTimerGetTimerDaemonTaskHandle          0   //Currently there is no need for this API
+#define INCLUDE_xTaskGetSchedulerState                  1
+#define INCLUDE_xTaskGetCurrentTaskHandle               1
+//Unlisted
+#define INCLUDE_pxTaskGetStackStart                     1
 
-/* The priority at which the tick interrupt runs.  This should probably be
-   kept at 1. */
-#define configKERNEL_INTERRUPT_PRIORITY                 1
+// -------------------- Trace Macros -----------------------
 
-#if !CONFIG_IDF_TARGET_LINUX
-#define configUSE_NEWLIB_REENTRANT                      1
-#endif
+/*
+For trace macros.
+Note: Include trace macros here and not above as trace macros are dependent on some of the FreeRTOS configs
+*/
+#ifndef __ASSEMBLER__
+#if CONFIG_SYSVIEW_ENABLE
+#include "SEGGER_SYSVIEW_FreeRTOS.h"
+#undef INLINE // to avoid redefinition
+#endif //CONFIG_SYSVIEW_ENABLE
+#endif /* def __ASSEMBLER__ */
 
-#if CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY
-#define configENABLE_BACKWARD_COMPATIBILITY             1
-#else
-#define configENABLE_BACKWARD_COMPATIBILITY             0
-#endif
+/* ------------------------------------------------ ESP-IDF Additions --------------------------------------------------
+ * - All FreeRTOS related configurations no part of Vanilla FreeRTOS goes into this section
+ * - FreeRTOS configurations related to SMP and ESP-IDF additions go into this section
+ * ------------------------------------------------------------------------------------------------------------------ */
 
-#define configSUPPORT_DYNAMIC_ALLOCATION                1
-#define configSUPPORT_STATIC_ALLOCATION                 1
+// ------------------------- SMP ---------------------------
 
-#ifndef __ASSEMBLER__
-#if CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP
-extern void vPortCleanUpTCB ( void *pxTCB );
-#define portCLEAN_UP_TCB( pxTCB )           vPortCleanUpTCB( pxTCB )
+#ifndef CONFIG_FREERTOS_UNICORE
+#define portNUM_PROCESSORS                              2
+#else
+#define portNUM_PROCESSORS                              1
 #endif
+#define configNUM_CORES                                 portNUM_PROCESSORS
+#ifdef CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID
+#define configTASKLIST_INCLUDE_COREID                   1
 #endif
 
-/* Test FreeRTOS timers (with timer task) and more. */
-/* Some files don't compile if this flag is disabled */
-#define configUSE_TIMERS                                1
-#define configTIMER_TASK_PRIORITY                       CONFIG_FREERTOS_TIMER_TASK_PRIORITY
-#define configTIMER_QUEUE_LENGTH                        CONFIG_FREERTOS_TIMER_QUEUE_LENGTH
-#define configTIMER_TASK_STACK_DEPTH                    CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH
-
-#define configUSE_QUEUE_SETS                            1
-
-#define configUSE_TICKLESS_IDLE                         CONFIG_FREERTOS_USE_TICKLESS_IDLE
-#if configUSE_TICKLESS_IDLE
-#define configEXPECTED_IDLE_TIME_BEFORE_SLEEP           CONFIG_FREERTOS_IDLE_TIME_BEFORE_SLEEP
-#endif //configUSE_TICKLESS_IDLE
-
+// ---------------------- Features -------------------------
 
+#define configTHREAD_LOCAL_STORAGE_DELETE_CALLBACKS     1
+#ifndef configIDLE_TASK_STACK_SIZE
+#define configIDLE_TASK_STACK_SIZE                      CONFIG_FREERTOS_IDLE_TASK_STACKSIZE
+#endif
 #if CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT
 #define configENABLE_TASK_SNAPSHOT                      1
 #endif
 #ifndef configENABLE_TASK_SNAPSHOT
 #define configENABLE_TASK_SNAPSHOT                      0
 #endif
-
-#if CONFIG_SYSVIEW_ENABLE
-#ifndef __ASSEMBLER__
-#include "SEGGER_SYSVIEW_FreeRTOS.h"
-#undef INLINE // to avoid redefinition
-#endif /* def __ASSEMBLER__ */
-#endif
-
 #if CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER
 #define configCHECK_MUTEX_GIVEN_BY_OWNER                1
 #else
 #define configCHECK_MUTEX_GIVEN_BY_OWNER                0
 #endif
 
+#ifndef __ASSEMBLER__
+#if CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP
+extern void vPortCleanUpTCB ( void *pxTCB );
+#define portCLEAN_UP_TCB( pxTCB )                       vPortCleanUpTCB( pxTCB )
+#endif
+#endif
 
-#define configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H       1
-
-#define configTASK_NOTIFICATION_ARRAY_ENTRIES           1
+// -------------------- Compatibility ----------------------
 
 // backward compatibility for 4.4
 #define xTaskRemoveFromUnorderedEventList vTaskRemoveFromUnorderedEventList
 
-#define configNUM_CORES                                 portNUM_PROCESSORS
-
 #endif /* FREERTOS_CONFIG_H */