feat(freertos): Link FreeRTOS idle task and its hook function to IRAM

This commit is contained in:
dongheng
2019-03-06 10:42:08 +08:00
parent 6042355fad
commit ab3179efd7
5 changed files with 9 additions and 8 deletions

View File

@ -75,12 +75,12 @@ static uint32_t task_ms_to_tick_wrapper(uint32_t ms)
return (uint32_t)(ms / portTICK_RATE_MS); return (uint32_t)(ms / portTICK_RATE_MS);
} }
static void task_suspend_all_wrapper(void) static void IRAM_ATTR task_suspend_all_wrapper(void)
{ {
vTaskSuspendAll(); vTaskSuspendAll();
} }
static void task_resume_all_wrapper(void) static void IRAM_ATTR task_resume_all_wrapper(void)
{ {
xTaskResumeAll(); xTaskResumeAll();
} }

View File

@ -14,6 +14,7 @@
#include <stdint.h> #include <stdint.h>
#include "esp_attr.h"
#include "esp_log.h" #include "esp_log.h"
#include "esp_libc.h" #include "esp_libc.h"
#include "esp_wifi_osi.h" #include "esp_wifi_osi.h"
@ -78,7 +79,7 @@ esp_err_t esp_task_wdt_init(void)
* @brief Reset(Feed) the Task Watchdog Timer (TWDT) on behalf of the currently * @brief Reset(Feed) the Task Watchdog Timer (TWDT) on behalf of the currently
* running task * running task
*/ */
void esp_task_wdt_reset(void) void IRAM_ATTR esp_task_wdt_reset(void)
{ {
WDT_FEED(); WDT_FEED();
} }

View File

@ -2054,7 +2054,7 @@ void vTaskEndScheduler( void )
} }
/*----------------------------------------------------------*/ /*----------------------------------------------------------*/
void vTaskSuspendAll( void ) void IRAM_ATTR vTaskSuspendAll( void )
{ {
/* A critical section is not required as the variable is of type /* A critical section is not required as the variable is of type
BaseType_t. Please read Richard Barry's reply in the following link to a BaseType_t. Please read Richard Barry's reply in the following link to a
@ -2127,7 +2127,7 @@ void vTaskSuspendAll( void )
#endif /* configUSE_TICKLESS_IDLE */ #endif /* configUSE_TICKLESS_IDLE */
/*----------------------------------------------------------*/ /*----------------------------------------------------------*/
BaseType_t xTaskResumeAll( void ) BaseType_t IRAM_ATTR xTaskResumeAll( void )
{ {
TCB_t *pxTCB = NULL; TCB_t *pxTCB = NULL;
BaseType_t xAlreadyYielded = pdFALSE; BaseType_t xAlreadyYielded = pdFALSE;
@ -2611,7 +2611,7 @@ implementations require configUSE_TICKLESS_IDLE to be set to a value other than
#endif /* INCLUDE_xTaskAbortDelay */ #endif /* INCLUDE_xTaskAbortDelay */
/*----------------------------------------------------------*/ /*----------------------------------------------------------*/
BaseType_t xTaskIncrementTick( void ) BaseType_t IRAM_ATTR xTaskIncrementTick( void )
{ {
TCB_t * pxTCB; TCB_t * pxTCB;
TickType_t xItemValue; TickType_t xItemValue;

View File

@ -151,7 +151,7 @@ void PortEnableInt_NoNest( void );
not necessary for to use this port. They are defined so the common demo files not necessary for to use this port. They are defined so the common demo files
(which build with all the ports) will build. */ (which build with all the ports) will build. */
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) #define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters ) #define portTASK_FUNCTION( vFunction, pvParameters ) void IRAM_ATTR vFunction( void *pvParameters )
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
void _xt_user_exit (void); void _xt_user_exit (void);

View File

@ -344,7 +344,7 @@ BaseType_t xQueueGenericReceive(QueueHandle_t xQueue, void * const pvBuffer,
return xQueueReceive(xQueue, pvBuffer, xTicksToWait); return xQueueReceive(xQueue, pvBuffer, xTicksToWait);
} }
void vApplicationIdleHook(void) void IRAM_ATTR vApplicationIdleHook(void)
{ {
extern void pmIdleHook(void); extern void pmIdleHook(void);
extern void esp_task_wdt_reset(void); extern void esp_task_wdt_reset(void);