From 2cebfcf8859bc788f5d6f201762240e12a5e554c Mon Sep 17 00:00:00 2001 From: Darian Leung Date: Tue, 8 Feb 2022 16:38:09 +0800 Subject: [PATCH] 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 --- .../include/freertos/FreeRTOS.h | 41 +-- .../include/freertos/portable.h | 2 +- .../FreeRTOS-Kernel/include/freertos/timers.h | 5 - .../include/freertos/FreeRTOSConfig_arch.h | 31 +- .../riscv/include/freertos/portmacro.h | 15 + .../include/freertos/FreeRTOSConfig_arch.h | 87 ++--- .../xtensa/include/freertos/portmacro.h | 15 + .../xtensa/include/freertos/xtensa_config.h | 42 ++- .../portable/xtensa/xtensa_overlay_os_hook.c | 2 +- .../include/freertos/FreeRTOSConfig.h | 347 +++++++++--------- 10 files changed, 314 insertions(+), 273 deletions(-) diff --git a/components/freertos/FreeRTOS-Kernel/include/freertos/FreeRTOS.h b/components/freertos/FreeRTOS-Kernel/include/freertos/FreeRTOS.h index 22a437d316..74c4c2ad9f 100644 --- a/components/freertos/FreeRTOS-Kernel/include/freertos/FreeRTOS.h +++ b/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 diff --git a/components/freertos/FreeRTOS-Kernel/include/freertos/portable.h b/components/freertos/FreeRTOS-Kernel/include/freertos/portable.h index 9e3e375540..18ab8f60bb 100644 --- a/components/freertos/FreeRTOS-Kernel/include/freertos/portable.h +++ b/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 diff --git a/components/freertos/FreeRTOS-Kernel/include/freertos/timers.h b/components/freertos/FreeRTOS-Kernel/include/freertos/timers.h index b0ca9160cc..f5627e22dc 100644 --- a/components/freertos/FreeRTOS-Kernel/include/freertos/timers.h +++ b/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. diff --git a/components/freertos/FreeRTOS-Kernel/portable/riscv/include/freertos/FreeRTOSConfig_arch.h b/components/freertos/FreeRTOS-Kernel/portable/riscv/include/freertos/FreeRTOSConfig_arch.h index 0abbe9e82d..2adf8c0d24 100644 --- a/components/freertos/FreeRTOS-Kernel/portable/riscv/include/freertos/FreeRTOSConfig_arch.h +++ b/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 + +/* ------------------------------------------------ ESP-IDF Additions -------------------------------------------------- + * + * ------------------------------------------------------------------------------------------------------------------ */ #ifndef configISR_STACK_SIZE -#define configISR_STACK_SIZE (CONFIG_FREERTOS_ISR_STACKSIZE) -#endif - -#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 +#define configISR_STACK_SIZE (CONFIG_FREERTOS_ISR_STACKSIZE) #endif #endif // FREERTOS_CONFIG_RISCV_H diff --git a/components/freertos/FreeRTOS-Kernel/portable/riscv/include/freertos/portmacro.h b/components/freertos/FreeRTOS-Kernel/portable/riscv/include/freertos/portmacro.h index b80f794f4a..5b5e35efbc 100644 --- a/components/freertos/FreeRTOS-Kernel/portable/riscv/include/freertos/portmacro.h +++ b/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 diff --git a/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/FreeRTOSConfig_arch.h b/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/FreeRTOSConfig_arch.h index dfa5df51d1..cb0c78ec1f 100644 --- a/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/FreeRTOSConfig_arch.h +++ b/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 +//Xtensa Archiecture specific configuration. This file is included in the common FreeRTOSConfig.h. + #include "sdkconfig.h" -/* enable use of optimized task selection by the scheduler */ -#ifdef CONFIG_FREERTOS_OPTIMIZED_SCHEDULER -#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 -#endif +/* Required for configuration-dependent settings. */ +#include "xtensa_config.h" -#define XT_USE_THREAD_SAFE_CLIB 0 -#undef XT_USE_SWPRI +/* -------------------------------------------- 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 configBENCHMARK 0 -#define XT_CLOCK_FREQ (xt_clock_freq()) +/* ------------------------------------------------- FreeRTOS Config --------------------------------------------------- + * - All Vanilla FreeRTOS configuration goes into this section + * ------------------------------------------------------------------------------------------------------------------ */ -#endif // __ASSEMBLER__ +// ------------------ Scheduler Related -------------------- -/* Required for configuration-dependent settings */ -#include - -/* configASSERT behaviour */ -#ifndef __ASSEMBLER__ -#include -#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 diff --git a/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/portmacro.h b/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/portmacro.h index b60b90ce9e..926c9fedad 100644 --- a/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/portmacro.h +++ b/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 diff --git a/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/xtensa_config.h b/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/xtensa_config.h index 618fa6c11e..f8b2557e31 100644 --- a/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/xtensa_config.h +++ b/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 + #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 + #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 diff --git a/components/freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_overlay_os_hook.c b/components/freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_overlay_os_hook.c index 8830f97ff7..38258f3b7c 100644 --- a/components/freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_overlay_os_hook.c +++ b/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. diff --git a/components/freertos/esp_additions/include/freertos/FreeRTOSConfig.h b/components/freertos/esp_additions/include/freertos/FreeRTOSConfig.h index ee54098d9e..03fe91b49f 100644 --- a/components/freertos/esp_additions/include/freertos/FreeRTOSConfig.h +++ b/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 //For configASSERT() +#endif /* def __ASSEMBLER__ */ // The arch-specific FreeRTOSConfig_arch.h in port//include. #include "freertos/FreeRTOSConfig_arch.h" @@ -21,31 +26,53 @@ #error "Needs architecture-speific FreeRTOSConfig.h!" #endif -#ifndef CONFIG_FREERTOS_UNICORE -#define portNUM_PROCESSORS 2 +/* ----------------------------------------------------- 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 STACK_OVERHEAD_CHECKER 256 #else -#define portNUM_PROCESSORS 1 +#define STACK_OVERHEAD_CHECKER 0 #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 - -#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) +/* with optimizations disabled, scheduler uses additional stack */ +#if CONFIG_COMPILER_OPTIMIZATION_NONE +#define STACK_OVERHEAD_OPTIMIZATION 320 #else -#define UNTESTED_FUNCTION() +#define STACK_OVERHEAD_OPTIMIZATION 0 #endif -#endif /* def __ASSEMBLER__ */ +/* apptrace mdule increases minimum stack usage */ +#if CONFIG_APPTRACE_ENABLE +#define STACK_OVERHEAD_APPTRACE 1280 +#else +#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 STACK_OVERHEAD_WATCHPOINT 60 +#else +#define STACK_OVERHEAD_WATCHPOINT 0 +#endif + +#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. + * ------------------------------------------------------------------------------------------------------------------ */ /*----------------------------------------------------------- * Application specific definitions. @@ -53,102 +80,68 @@ * 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. + * + * See http://www.freertos.org/a00110.html *----------------------------------------------------------*/ +// ------------------ Scheduler Related -------------------- + #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 */ - -/* Higher stack checker modes cause overhead on each function call */ -#if CONFIG_STACK_CHECK_ALL || CONFIG_STACK_CHECK_STRONG -#define configSTACK_OVERHEAD_CHECKER 256 -#else -#define configSTACK_OVERHEAD_CHECKER 0 -#endif - -/* with optimizations disabled, scheduler uses additional stack */ -#if CONFIG_COMPILER_OPTIMIZATION_NONE -#define configSTACK_OVERHEAD_OPTIMIZATION 320 -#else -#define configSTACK_OVERHEAD_OPTIMIZATION 0 -#endif - -/* apptrace mdule increases minimum stack usage */ -#if CONFIG_APPTRACE_ENABLE -#define configSTACK_OVERHEAD_APPTRACE 1280 -#else -#define configSTACK_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 -#else -#define configSTACK_OVERHEAD_WATCHPOINT 0 -#endif - -#define configSTACK_OVERHEAD_TOTAL ( \ - configSTACK_OVERHEAD_CHECKER + \ - configSTACK_OVERHEAD_OPTIMIZATION + \ - configSTACK_OVERHEAD_APPTRACE + \ - configSTACK_OVERHEAD_WATCHPOINT \ - ) - -#define configMINIMAL_STACK_SIZE (768 + configSTACK_OVERHEAD_TOTAL) - -#ifndef configIDLE_TASK_STACK_SIZE -#define configIDLE_TASK_STACK_SIZE CONFIG_FREERTOS_IDLE_TASK_STACKSIZE -#endif - -/* Minimal heap size to make sure examples can run on memory limited - configs. Adjust this to suit your system. */ - - -//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 configMAX_TASK_NAME_LEN ( CONFIG_FREERTOS_MAX_TASK_NAME_LEN ) - -#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 - -#ifdef CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID -#define configTASKLIST_INCLUDE_COREID 1 -#endif - -#ifdef CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS -#define configGENERATE_RUN_TIME_STATS 1 /* Used by vTaskGetRunTimeStats() */ -#endif - +#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 configQUEUE_REGISTRY_SIZE CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE +#define configKERNEL_INTERRUPT_PRIORITY 1 //Todo: This currently isn't used anywhere + +// ------------- Synchronization Primitives ---------------- #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 +// ----------------------- System -------------------------- + +#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 +#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 + +// ----------------------- Memory ------------------------- + +#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 + +// ------------------------ 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,40 +149,33 @@ #elif CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY #define configCHECK_FOR_STACK_OVERFLOW 2 #endif +#define configRECORD_STACK_HIGH_ADDRESS 1 +// ------------------- Run-time Stats ---------------------- -/* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) - -/* Set the following definitions to 1 to include the API function, or zero - to exclude the API function. */ - -#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_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_xTimerPendFunctionCall 1 -#define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 //Currently there is no need for this API - -/* The priority at which the tick interrupt runs. This should probably be - kept at 1. */ -#define configKERNEL_INTERRUPT_PRIORITY 1 - -#if !CONFIG_IDF_TARGET_LINUX -#define configUSE_NEWLIB_REENTRANT 1 +#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 ----------------------- + +#define configUSE_CO_ROUTINES 0 +#define configMAX_CO_ROUTINE_PRIORITIES 2 + +// ------------------- Software Timer ---------------------- + +#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 @@ -197,59 +183,84 @@ #define configENABLE_BACKWARD_COMPATIBILITY 0 #endif -#define configSUPPORT_DYNAMIC_ALLOCATION 1 -#define configSUPPORT_STATIC_ALLOCATION 1 +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_xTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_xTaskGetIdleTaskHandle 1 +#define INCLUDE_xTaskAbortDelay 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_xTaskGetSchedulerState 1 +#define INCLUDE_xTaskGetCurrentTaskHandle 1 +//Unlisted +#define INCLUDE_pxTaskGetStackStart 1 +// -------------------- Trace Macros ----------------------- + +/* +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_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP -extern void vPortCleanUpTCB ( void *pxTCB ); -#define portCLEAN_UP_TCB( pxTCB ) vPortCleanUpTCB( pxTCB ) +#if CONFIG_SYSVIEW_ENABLE +#include "SEGGER_SYSVIEW_FreeRTOS.h" +#undef INLINE // to avoid redefinition +#endif //CONFIG_SYSVIEW_ENABLE +#endif /* def __ASSEMBLER__ */ + +/* ------------------------------------------------ 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 + * ------------------------------------------------------------------------------------------------------------------ */ + +// ------------------------- SMP --------------------------- + +#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 */