mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
freertos: Update SMP idle hooks
This commit updates the usage of idle hooks in SMP FreeRTOS as follows: - IDF style idle hooks are now called from vApplicationMinimalIdleHook() - If the user provdies their own vApplicationMinimalIdleHook(), it can be wrapped using -Wl,--wrap if CONFIG_FREERTOS_USE_MINIMAL_IDLE_HOOK is enabled. - SMP port no longer uses vApplicationIdleHook() as it's only called from the prvIdleTask() and not every prvMinimalIdleTask()
This commit is contained in:
parent
e13bb580c7
commit
e6d43ab56f
@ -206,6 +206,12 @@ else()
|
|||||||
list(APPEND link_options "-Wl,--gc-sections")
|
list(APPEND link_options "-Wl,--gc-sections")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# SMP FreeRTOS user provided minimal idle hook. This allows the user to provide
|
||||||
|
# their own copy of vApplicationMinimalIdleHook()
|
||||||
|
if(CONFIG_FREERTOS_USE_MINIMAL_IDLE_HOOK)
|
||||||
|
list(APPEND link_options "-Wl,--wrap=vApplicationMinimalIdleHook")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Placing jump tables in flash would cause issues with code that required
|
# Placing jump tables in flash would cause issues with code that required
|
||||||
# to be placed in IRAM
|
# to be placed in IRAM
|
||||||
list(APPEND compile_options "-fno-jump-tables")
|
list(APPEND compile_options "-fno-jump-tables")
|
||||||
|
@ -148,7 +148,7 @@ This file get's pulled into assembly sources. Therefore, some includes need to b
|
|||||||
#endif
|
#endif
|
||||||
#define configUSE_CORE_AFFINITY 1
|
#define configUSE_CORE_AFFINITY 1
|
||||||
#define configRUN_MULTIPLE_PRIORITIES 1
|
#define configRUN_MULTIPLE_PRIORITIES 1
|
||||||
#define configUSE_MINIMAL_IDLE_HOOK 1
|
#define configUSE_MINIMAL_IDLE_HOOK 1 // This is always enabled to call IDF style idle hooks, by can be "--Wl,--wrap" if users enable CONFIG_FREERTOS_USE_MINIMAL_IDLE_HOOK
|
||||||
|
|
||||||
// ------------- Synchronization Primitives ----------------
|
// ------------- Synchronization Primitives ----------------
|
||||||
|
|
||||||
@ -183,7 +183,11 @@ This file get's pulled into assembly sources. Therefore, some includes need to b
|
|||||||
|
|
||||||
// ------------------------ Hooks --------------------------
|
// ------------------------ Hooks --------------------------
|
||||||
|
|
||||||
|
#if CONFIG_FREERTOS_USE_IDLE_HOOK
|
||||||
#define configUSE_IDLE_HOOK 1
|
#define configUSE_IDLE_HOOK 1
|
||||||
|
#else
|
||||||
|
#define configUSE_IDLE_HOOK 0
|
||||||
|
#endif
|
||||||
#define configUSE_TICK_HOOK 1
|
#define configUSE_TICK_HOOK 1
|
||||||
#if CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE
|
#if CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE
|
||||||
#define configCHECK_FOR_STACK_OVERFLOW 0
|
#define configCHECK_FOR_STACK_OVERFLOW 0
|
||||||
|
@ -613,19 +613,24 @@ void vApplicationTickHook( void )
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ( configUSE_IDLE_HOOK == 1 )
|
#if CONFIG_FREERTOS_USE_MINIMAL_IDLE_HOOK
|
||||||
void vApplicationIdleHook( void )
|
/*
|
||||||
|
By default, the port uses vApplicationMinimalIdleHook() to run IDF style idle
|
||||||
|
hooks. However, users may also want to provide their own vApplicationMinimalIdleHook().
|
||||||
|
In this case, we use to -Wl,--wrap option to wrap the user provided vApplicationMinimalIdleHook()
|
||||||
|
*/
|
||||||
|
extern void __real_vApplicationMinimalIdleHook( void );
|
||||||
|
void __wrap_vApplicationMinimalIdleHook( void )
|
||||||
{
|
{
|
||||||
esp_vApplicationIdleHook();
|
esp_vApplicationIdleHook(); //Run IDF style hooks
|
||||||
|
__real_vApplicationMinimalIdleHook(); //Call the user provided vApplicationMinimalIdleHook()
|
||||||
}
|
}
|
||||||
#endif
|
#else // CONFIG_FREERTOS_USE_MINIMAL_IDLE_HOOK
|
||||||
|
|
||||||
#if ( configUSE_MINIMAL_IDLE_HOOK == 1 )
|
|
||||||
void vApplicationMinimalIdleHook( void )
|
void vApplicationMinimalIdleHook( void )
|
||||||
{
|
{
|
||||||
esp_vApplicationIdleHook();
|
esp_vApplicationIdleHook(); //Run IDF style hooks
|
||||||
}
|
}
|
||||||
#endif
|
#endif // CONFIG_FREERTOS_USE_MINIMAL_IDLE_HOOK
|
||||||
|
|
||||||
/* ---------------------------------------------- Misc Implementations -------------------------------------------------
|
/* ---------------------------------------------- Misc Implementations -------------------------------------------------
|
||||||
*
|
*
|
||||||
|
@ -215,6 +215,14 @@ menu "FreeRTOS"
|
|||||||
- The FreeRTOS idle hook is NOT the same as the ESP-IDF Idle Hook, but both can be enabled
|
- The FreeRTOS idle hook is NOT the same as the ESP-IDF Idle Hook, but both can be enabled
|
||||||
simultaneously.
|
simultaneously.
|
||||||
|
|
||||||
|
config FREERTOS_USE_MINIMAL_IDLE_HOOK
|
||||||
|
bool "Use FreeRTOS minimal idle hook"
|
||||||
|
depends on FREERTOS_SMP
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
- The application must provide the hook function ``void vApplicationMinimalIdleHook( void );``
|
||||||
|
- ``vApplicationMinimalIdleHook()`` is called from FreeRTOS idle task(s)
|
||||||
|
|
||||||
config FREERTOS_USE_TICK_HOOK
|
config FREERTOS_USE_TICK_HOOK
|
||||||
bool "Use FreeRTOS tick hook"
|
bool "Use FreeRTOS tick hook"
|
||||||
default n
|
default n
|
||||||
|
Loading…
Reference in New Issue
Block a user