feat(freertos): Cleanup tick/idle hook functionality

Closes https://github.com/espressif/ESP8266_RTOS_SDK/issues/500
This commit is contained in:
Wu Jian Gang
2019-03-04 20:40:29 +08:00
committed by dongheng
parent d847d847e4
commit b6ea4eab21
7 changed files with 65 additions and 3 deletions

View File

@ -39,6 +39,17 @@ config FREERTOS_ISR_STACKSIZE
help
The interrupt handlers have their own stack. The size of the stack can be defined here.
config FREERTOS_EXTENED_HOOKS
bool "Use FreeRTOS extened hooks"
default n
help
By using the "esp_register_freertos_xxx_hook system", extened hook function offers a number
of registerable hooks/callback functions that are called when a timer tick happens,
the idle thread runs etc.
Otherwise User can also use FreeRTOS raw hook functions "vApplicationIdleHook" and
"vApplicationTickHook".
config FREERTOS_GLOBAL_DATA_LINK_IRAM
bool "Link FreeRTOS global data to IRAM"
default y

View File

@ -2752,6 +2752,12 @@ BaseType_t xSwitchRequired = pdFALSE;
}
}
#endif /* configUSE_TICK_HOOK */
#ifdef CONFIG_FREERTOS_EXTENED_HOOKS
{
esp_vApplicationTickHook();
}
#endif /* CONFIG_FREERTOS_EXTENED_HOOKS */
}
else
{
@ -2764,6 +2770,12 @@ BaseType_t xSwitchRequired = pdFALSE;
vApplicationTickHook();
}
#endif
#ifdef CONFIG_FREERTOS_EXTENED_HOOKS
{
esp_vApplicationTickHook();
}
#endif /* CONFIG_FREERTOS_EXTENED_HOOKS */
}
#if ( configUSE_PREEMPTION == 1 )
@ -3309,6 +3321,18 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters )
vApplicationIdleHook();
}
#endif /* configUSE_IDLE_HOOK */
#ifdef CONFIG_FREERTOS_EXTENED_HOOKS
{
/* Call the esp-idf hook system */
esp_vApplicationIdleHook();
}
#endif /* CONFIG_FREERTOS_EXTENED_HOOKS */
{
extern void esp_internal_idle_hook(void);
esp_internal_idle_hook();
}
#if CONFIG_ENABLE_FREERTOS_SLEEP
/* This conditional compilation should use inequality to 0, not equality

View File

@ -22,6 +22,8 @@
#include "sdkconfig.h"
#ifdef CONFIG_FREERTOS_EXTENED_HOOKS
//We use just a static array here because it's not expected many components will need
//an idle or tick hook.
#define MAX_HOOKS CONFIG_FREERTOS_MAX_HOOK
@ -158,3 +160,4 @@ void esp_deregister_freertos_tick_hook(esp_freertos_tick_cb_t old_tick_cb)
portEXIT_CRITICAL(&hooks_spinlock);
}
#endif /* CONFIG_FREERTOS_EXTENED_HOOKS */

View File

@ -50,8 +50,10 @@
#define portNUM_PROCESSORS 1
#define configUSE_PREEMPTION 1
#define configUSE_IDLE_HOOK 1
#define configUSE_TICK_HOOK 0
#define configUSE_TICK_HOOK 1
#define configUSE_TICKLESS_IDLE 1
#define configCPU_CLOCK_HZ ( ( unsigned long ) 80000000 )
#define configTICK_RATE_HZ ( ( portTickType ) CONFIG_FREERTOS_HZ )

View File

@ -15,6 +15,10 @@
#ifndef __ESP_FREERTOS_HOOKS_H__
#define __ESP_FREERTOS_HOOKS_H__
#include "sdkconfig.h"
#ifdef CONFIG_FREERTOS_EXTENED_HOOKS
#include <stdbool.h>
#include "esp_err.h"
@ -127,5 +131,6 @@ void esp_deregister_freertos_tick_hook(esp_freertos_tick_cb_t old_tick_cb);
}
#endif
#endif /* CONFIG_FREERTOS_EXTENED_HOOKS */
#endif

View File

@ -205,6 +205,9 @@ void _xt_enter_first_task(void);
#define xTaskCreatePinnedToCore(pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pvCreatedTask, tskNO_AFFINITY) \
xTaskCreate(pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pvCreatedTask)
extern void esp_vApplicationIdleHook( void );
extern void esp_vApplicationTickHook( void );
#ifdef __cplusplus
}
#endif

View File

@ -344,15 +344,29 @@ BaseType_t xQueueGenericReceive(QueueHandle_t xQueue, void * const pvBuffer,
return xQueueReceive(xQueue, pvBuffer, xTicksToWait);
}
void vApplicationIdleHook(void)
void esp_internal_idle_hook(void)
{
extern void pmIdleHook(void);
extern void esp_task_wdt_reset(void);
pmIdleHook();
esp_task_wdt_reset();
pmIdleHook();
}
#if configUSE_IDLE_HOOK == 1
void __attribute__((weak)) vApplicationIdleHook(void)
{
}
#endif
#if configUSE_TICK_HOOK == 1
void __attribute__((weak)) vApplicationTickHook(void)
{
}
#endif
uint32_t xPortGetTickRateHz(void)
{
return (uint32_t)configTICK_RATE_HZ;