mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 06:11:06 +00:00 
			
		
		
		
	refactor(freertos): Updated FreeRTOS component files to astyle format
This commit updates the FreeRTOS component source files (excluding upstream source files) to the astyle coding format.
This commit is contained in:
		@@ -51,7 +51,7 @@ For now, AMP is not supported (i.e., running FreeRTOS on one core and a bare met
 | 
				
			|||||||
CONFIG_FREERTOS_UNICORE and CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE should be identical. We add a check for this here.
 | 
					CONFIG_FREERTOS_UNICORE and CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE should be identical. We add a check for this here.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
#if CONFIG_FREERTOS_UNICORE != CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE
 | 
					#if CONFIG_FREERTOS_UNICORE != CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE
 | 
				
			||||||
    #error "AMP not supported. FreeRTOS number of cores and system number of cores must be identical"
 | 
					#error "AMP not supported. FreeRTOS number of cores and system number of cores must be identical"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// -------------------- Declarations -----------------------
 | 
					// -------------------- Declarations -----------------------
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -30,21 +30,21 @@
 | 
				
			|||||||
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
 | 
					#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if ( configSUPPORT_DYNAMIC_ALLOCATION == 0 )
 | 
					#if ( configSUPPORT_DYNAMIC_ALLOCATION == 0 )
 | 
				
			||||||
    #error This file must not be used if configSUPPORT_DYNAMIC_ALLOCATION is 0
 | 
					#error This file must not be used if configSUPPORT_DYNAMIC_ALLOCATION is 0
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "esp_heap_caps.h"
 | 
					#include "esp_heap_caps.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !CONFIG_IDF_TARGET_LINUX
 | 
					#if !CONFIG_IDF_TARGET_LINUX
 | 
				
			||||||
    /* Memory util functions are not implemented in the Linux simulator */
 | 
					/* Memory util functions are not implemented in the Linux simulator */
 | 
				
			||||||
    #include "esp_memory_utils.h"
 | 
					#include "esp_memory_utils.h"
 | 
				
			||||||
#endif /* CONFIG_IDF_TARGET_LINUX */
 | 
					#endif /* CONFIG_IDF_TARGET_LINUX */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define portFREERTOS_HEAP_CAPS    ( MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT )
 | 
					#define portFREERTOS_HEAP_CAPS    ( MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*-----------------------------------------------------------*/
 | 
					/*-----------------------------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void * pvPortMalloc( size_t xWantedSize )
 | 
					void * pvPortMalloc(size_t xWantedSize)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    void * pvReturn = NULL;
 | 
					    void * pvReturn = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -52,57 +52,57 @@ void * pvPortMalloc( size_t xWantedSize )
 | 
				
			|||||||
     * users need to allocate FreeRTOS objects into external RAM, they should
 | 
					     * users need to allocate FreeRTOS objects into external RAM, they should
 | 
				
			||||||
     * use the "static" equivalents of FreeRTOS API to create FreeRTOS objects
 | 
					     * use the "static" equivalents of FreeRTOS API to create FreeRTOS objects
 | 
				
			||||||
     * (e.g., queues). */
 | 
					     * (e.g., queues). */
 | 
				
			||||||
    pvReturn = heap_caps_malloc( xWantedSize, portFREERTOS_HEAP_CAPS );
 | 
					    pvReturn = heap_caps_malloc(xWantedSize, portFREERTOS_HEAP_CAPS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return pvReturn;
 | 
					    return pvReturn;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/*-----------------------------------------------------------*/
 | 
					/*-----------------------------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void vPortFree( void * pv )
 | 
					void vPortFree(void * pv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    heap_caps_free( pv );
 | 
					    heap_caps_free(pv);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/*-----------------------------------------------------------*/
 | 
					/*-----------------------------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
size_t xPortGetFreeHeapSize( void )
 | 
					size_t xPortGetFreeHeapSize(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return heap_caps_get_free_size( portFREERTOS_HEAP_CAPS );
 | 
					    return heap_caps_get_free_size(portFREERTOS_HEAP_CAPS);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/*-----------------------------------------------------------*/
 | 
					/*-----------------------------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
size_t xPortGetMinimumEverFreeHeapSize( void )
 | 
					size_t xPortGetMinimumEverFreeHeapSize(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return heap_caps_get_minimum_free_size( portFREERTOS_HEAP_CAPS );
 | 
					    return heap_caps_get_minimum_free_size(portFREERTOS_HEAP_CAPS);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/*-----------------------------------------------------------*/
 | 
					/*-----------------------------------------------------------*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool xPortCheckValidListMem( const void * ptr )
 | 
					bool xPortCheckValidListMem(const void * ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    #if CONFIG_IDF_TARGET_LINUX
 | 
					#if CONFIG_IDF_TARGET_LINUX
 | 
				
			||||||
        return true;
 | 
					    return true;
 | 
				
			||||||
    #else /* CONFIG_IDF_TARGET_LINUX */
 | 
					#else /* CONFIG_IDF_TARGET_LINUX */
 | 
				
			||||||
        return esp_ptr_internal( ptr ) && esp_ptr_byte_accessible( ptr );
 | 
					    return esp_ptr_internal(ptr) && esp_ptr_byte_accessible(ptr);
 | 
				
			||||||
    #endif /* CONFIG_IDF_TARGET_LINUX */
 | 
					#endif /* CONFIG_IDF_TARGET_LINUX */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool xPortCheckValidTCBMem( const void * ptr )
 | 
					bool xPortCheckValidTCBMem(const void * ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    #if CONFIG_IDF_TARGET_LINUX
 | 
					#if CONFIG_IDF_TARGET_LINUX
 | 
				
			||||||
        return true;
 | 
					    return true;
 | 
				
			||||||
    #else /* CONFIG_IDF_TARGET_LINUX */
 | 
					#else /* CONFIG_IDF_TARGET_LINUX */
 | 
				
			||||||
        return esp_ptr_internal( ptr ) && esp_ptr_byte_accessible( ptr );
 | 
					    return esp_ptr_internal(ptr) && esp_ptr_byte_accessible(ptr);
 | 
				
			||||||
    #endif /* CONFIG_IDF_TARGET_LINUX */
 | 
					#endif /* CONFIG_IDF_TARGET_LINUX */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool xPortcheckValidStackMem( const void * ptr )
 | 
					bool xPortcheckValidStackMem(const void * ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    #if CONFIG_IDF_TARGET_LINUX
 | 
					#if CONFIG_IDF_TARGET_LINUX
 | 
				
			||||||
        return true;
 | 
					    return true;
 | 
				
			||||||
    #else /* CONFIG_IDF_TARGET_LINUX */
 | 
					#else /* CONFIG_IDF_TARGET_LINUX */
 | 
				
			||||||
        #ifdef CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY
 | 
					#ifdef CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY
 | 
				
			||||||
            return esp_ptr_byte_accessible( ptr );
 | 
					    return esp_ptr_byte_accessible(ptr);
 | 
				
			||||||
        #else
 | 
					#else
 | 
				
			||||||
            return esp_ptr_internal( ptr ) && esp_ptr_byte_accessible( ptr );
 | 
					    return esp_ptr_internal(ptr) && esp_ptr_byte_accessible(ptr);
 | 
				
			||||||
        #endif
 | 
					#endif
 | 
				
			||||||
    #endif /* CONFIG_IDF_TARGET_LINUX */
 | 
					#endif /* CONFIG_IDF_TARGET_LINUX */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -27,7 +27,7 @@ We simply allocate the IDLE/Timer tasks memory from the FreeRTOS heap.
 | 
				
			|||||||
#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
 | 
					#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
 | 
				
			||||||
void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
 | 
					void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
 | 
				
			||||||
                                   StackType_t **ppxIdleTaskStackBuffer,
 | 
					                                   StackType_t **ppxIdleTaskStackBuffer,
 | 
				
			||||||
                                   uint32_t *pulIdleTaskStackSize )
 | 
					                                   uint32_t *pulIdleTaskStackSize)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    StaticTask_t *pxTCBBufferTemp;
 | 
					    StaticTask_t *pxTCBBufferTemp;
 | 
				
			||||||
    StackType_t *pxStackBufferTemp;
 | 
					    StackType_t *pxStackBufferTemp;
 | 
				
			||||||
@@ -37,17 +37,17 @@ void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
 | 
				
			|||||||
     * If the stack grows down then allocate the stack then the TCB so the stack
 | 
					     * If the stack grows down then allocate the stack then the TCB so the stack
 | 
				
			||||||
     * does not grow into the TCB.  Likewise if the stack grows up then allocate
 | 
					     * does not grow into the TCB.  Likewise if the stack grows up then allocate
 | 
				
			||||||
     * the TCB then the stack. */
 | 
					     * the TCB then the stack. */
 | 
				
			||||||
    #if (portSTACK_GROWTH > 0)
 | 
					#if (portSTACK_GROWTH > 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        pxTCBBufferTemp = pvPortMalloc(sizeof(StaticTask_t));
 | 
					        pxTCBBufferTemp = pvPortMalloc(sizeof(StaticTask_t));
 | 
				
			||||||
        pxStackBufferTemp = pvPortMalloc(configMINIMAL_STACK_SIZE);
 | 
					        pxStackBufferTemp = pvPortMalloc(configMINIMAL_STACK_SIZE);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    #else /* portSTACK_GROWTH */
 | 
					#else /* portSTACK_GROWTH */
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        pxStackBufferTemp = pvPortMalloc(configMINIMAL_STACK_SIZE);
 | 
					        pxStackBufferTemp = pvPortMalloc(configMINIMAL_STACK_SIZE);
 | 
				
			||||||
        pxTCBBufferTemp = pvPortMalloc(sizeof(StaticTask_t));
 | 
					        pxTCBBufferTemp = pvPortMalloc(sizeof(StaticTask_t));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    #endif /* portSTACK_GROWTH */
 | 
					#endif /* portSTACK_GROWTH */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert(pxTCBBufferTemp != NULL);
 | 
					    assert(pxTCBBufferTemp != NULL);
 | 
				
			||||||
    assert(pxStackBufferTemp != NULL);
 | 
					    assert(pxStackBufferTemp != NULL);
 | 
				
			||||||
@@ -59,7 +59,7 @@ void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,
 | 
					void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,
 | 
				
			||||||
                                    StackType_t **ppxTimerTaskStackBuffer,
 | 
					                                    StackType_t **ppxTimerTaskStackBuffer,
 | 
				
			||||||
                                    uint32_t *pulTimerTaskStackSize )
 | 
					                                    uint32_t *pulTimerTaskStackSize)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    StaticTask_t *pxTCBBufferTemp;
 | 
					    StaticTask_t *pxTCBBufferTemp;
 | 
				
			||||||
    StackType_t *pxStackBufferTemp;
 | 
					    StackType_t *pxStackBufferTemp;
 | 
				
			||||||
@@ -69,17 +69,17 @@ void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,
 | 
				
			|||||||
     * If the stack grows down then allocate the stack then the TCB so the stack
 | 
					     * If the stack grows down then allocate the stack then the TCB so the stack
 | 
				
			||||||
     * does not grow into the TCB.  Likewise if the stack grows up then allocate
 | 
					     * does not grow into the TCB.  Likewise if the stack grows up then allocate
 | 
				
			||||||
     * the TCB then the stack. */
 | 
					     * the TCB then the stack. */
 | 
				
			||||||
    #if (portSTACK_GROWTH > 0)
 | 
					#if (portSTACK_GROWTH > 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        pxTCBBufferTemp = pvPortMalloc(sizeof(StaticTask_t));
 | 
					        pxTCBBufferTemp = pvPortMalloc(sizeof(StaticTask_t));
 | 
				
			||||||
        pxStackBufferTemp = pvPortMalloc(configTIMER_TASK_STACK_DEPTH);
 | 
					        pxStackBufferTemp = pvPortMalloc(configTIMER_TASK_STACK_DEPTH);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    #else /* portSTACK_GROWTH */
 | 
					#else /* portSTACK_GROWTH */
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        pxStackBufferTemp = pvPortMalloc(configTIMER_TASK_STACK_DEPTH);
 | 
					        pxStackBufferTemp = pvPortMalloc(configTIMER_TASK_STACK_DEPTH);
 | 
				
			||||||
        pxTCBBufferTemp = pvPortMalloc(sizeof(StaticTask_t));
 | 
					        pxTCBBufferTemp = pvPortMalloc(sizeof(StaticTask_t));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    #endif /* portSTACK_GROWTH */
 | 
					#endif /* portSTACK_GROWTH */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert(pxTCBBufferTemp != NULL);
 | 
					    assert(pxTCBBufferTemp != NULL);
 | 
				
			||||||
    assert(pxStackBufferTemp != NULL);
 | 
					    assert(pxStackBufferTemp != NULL);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2017-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -10,18 +10,18 @@
 | 
				
			|||||||
#include "FreeRTOS.h"
 | 
					#include "FreeRTOS.h"
 | 
				
			||||||
#include "task.h"
 | 
					#include "task.h"
 | 
				
			||||||
#if ( !CONFIG_FREERTOS_SMP && ( configNUM_CORES > 1 ) )
 | 
					#if ( !CONFIG_FREERTOS_SMP && ( configNUM_CORES > 1 ) )
 | 
				
			||||||
    /* Required for xTaskIncrementTickOtherCores() */
 | 
					/* Required for xTaskIncrementTickOtherCores() */
 | 
				
			||||||
    #include "esp_private/freertos_idf_additions_priv.h"
 | 
					#include "esp_private/freertos_idf_additions_priv.h"
 | 
				
			||||||
#endif /* ( !CONFIG_FREERTOS_SMP && ( configNUM_CORES > 1 ) ) */
 | 
					#endif /* ( !CONFIG_FREERTOS_SMP && ( configNUM_CORES > 1 ) ) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if CONFIG_FREERTOS_SYSTICK_USES_CCOUNT
 | 
					#if CONFIG_FREERTOS_SYSTICK_USES_CCOUNT
 | 
				
			||||||
    #if CONFIG_FREERTOS_CORETIMER_0
 | 
					#if CONFIG_FREERTOS_CORETIMER_0
 | 
				
			||||||
        #define SYSTICK_INTR_ID     (ETS_INTERNAL_TIMER0_INTR_SOURCE + ETS_INTERNAL_INTR_SOURCE_OFF)
 | 
					#define SYSTICK_INTR_ID     (ETS_INTERNAL_TIMER0_INTR_SOURCE + ETS_INTERNAL_INTR_SOURCE_OFF)
 | 
				
			||||||
    #else /* CONFIG_FREERTOS_CORETIMER_1 */
 | 
					#else /* CONFIG_FREERTOS_CORETIMER_1 */
 | 
				
			||||||
        #define SYSTICK_INTR_ID     (ETS_INTERNAL_TIMER1_INTR_SOURCE + ETS_INTERNAL_INTR_SOURCE_OFF)
 | 
					#define SYSTICK_INTR_ID     (ETS_INTERNAL_TIMER1_INTR_SOURCE + ETS_INTERNAL_INTR_SOURCE_OFF)
 | 
				
			||||||
    #endif
 | 
					#endif
 | 
				
			||||||
#else /* CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER */
 | 
					#else /* CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER */
 | 
				
			||||||
        #define SYSTICK_INTR_ID     (ETS_SYSTIMER_TARGET0_INTR_SOURCE)
 | 
					#define SYSTICK_INTR_ID     (ETS_SYSTIMER_TARGET0_INTR_SOURCE)
 | 
				
			||||||
#endif /* CONFIG_FREERTOS_SYSTICK_USES_CCOUNT */
 | 
					#endif /* CONFIG_FREERTOS_SYSTICK_USES_CCOUNT */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BaseType_t xPortSysTickHandler(void);
 | 
					BaseType_t xPortSysTickHandler(void);
 | 
				
			||||||
@@ -168,15 +168,15 @@ void SysTickIsrHandler(void *arg)
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
void vPortSetupTimer(void)
 | 
					void vPortSetupTimer(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    #if CONFIG_FREERTOS_SYSTICK_USES_CCOUNT
 | 
					#if CONFIG_FREERTOS_SYSTICK_USES_CCOUNT
 | 
				
			||||||
        extern void _frxt_tick_timer_init(void);
 | 
					    extern void _frxt_tick_timer_init(void);
 | 
				
			||||||
        extern void _xt_tick_divisor_init(void);
 | 
					    extern void _xt_tick_divisor_init(void);
 | 
				
			||||||
        /* Init the tick divisor value */
 | 
					    /* Init the tick divisor value */
 | 
				
			||||||
        _xt_tick_divisor_init();
 | 
					    _xt_tick_divisor_init();
 | 
				
			||||||
        _frxt_tick_timer_init();
 | 
					    _frxt_tick_timer_init();
 | 
				
			||||||
    #else /* CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER */
 | 
					#else /* CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER */
 | 
				
			||||||
        vSystimerSetup();
 | 
					    vSystimerSetup();
 | 
				
			||||||
    #endif /* CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER */
 | 
					#endif /* CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -200,39 +200,39 @@ BaseType_t xPortSysTickHandler(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Call FreeRTOS Increment tick function
 | 
					    // Call FreeRTOS Increment tick function
 | 
				
			||||||
    BaseType_t xSwitchRequired;
 | 
					    BaseType_t xSwitchRequired;
 | 
				
			||||||
    #if CONFIG_FREERTOS_SMP
 | 
					#if CONFIG_FREERTOS_SMP
 | 
				
			||||||
        // Amazon SMP FreeRTOS requires that only core 0 calls xTaskIncrementTick()
 | 
					    // Amazon SMP FreeRTOS requires that only core 0 calls xTaskIncrementTick()
 | 
				
			||||||
        #if ( configNUM_CORES > 1 )
 | 
					#if ( configNUM_CORES > 1 )
 | 
				
			||||||
            if (portGET_CORE_ID() == 0) {
 | 
					    if (portGET_CORE_ID() == 0) {
 | 
				
			||||||
                xSwitchRequired = xTaskIncrementTick();
 | 
					        xSwitchRequired = xTaskIncrementTick();
 | 
				
			||||||
            } else {
 | 
					    } else {
 | 
				
			||||||
                xSwitchRequired = pdFALSE;
 | 
					        xSwitchRequired = pdFALSE;
 | 
				
			||||||
            }
 | 
					    }
 | 
				
			||||||
        #else /* configNUM_CORES > 1 */
 | 
					#else /* configNUM_CORES > 1 */
 | 
				
			||||||
            xSwitchRequired = xTaskIncrementTick();
 | 
					    xSwitchRequired = xTaskIncrementTick();
 | 
				
			||||||
        #endif /* configNUM_CORES > 1 */
 | 
					#endif /* configNUM_CORES > 1 */
 | 
				
			||||||
    #else /* !CONFIG_FREERTOS_SMP */
 | 
					#else /* !CONFIG_FREERTOS_SMP */
 | 
				
			||||||
        #if ( configNUM_CORES > 1 )
 | 
					#if ( configNUM_CORES > 1 )
 | 
				
			||||||
            /*
 | 
					    /*
 | 
				
			||||||
            Multi-core IDF FreeRTOS requires that...
 | 
					    Multi-core IDF FreeRTOS requires that...
 | 
				
			||||||
                - core 0 calls xTaskIncrementTick()
 | 
					        - core 0 calls xTaskIncrementTick()
 | 
				
			||||||
                - core 1 calls xTaskIncrementTickOtherCores()
 | 
					        - core 1 calls xTaskIncrementTickOtherCores()
 | 
				
			||||||
            */
 | 
					    */
 | 
				
			||||||
            if (xPortGetCoreID() == 0) {
 | 
					    if (xPortGetCoreID() == 0) {
 | 
				
			||||||
                xSwitchRequired = xTaskIncrementTick();
 | 
					        xSwitchRequired = xTaskIncrementTick();
 | 
				
			||||||
            } else {
 | 
					    } else {
 | 
				
			||||||
                xSwitchRequired = xTaskIncrementTickOtherCores();
 | 
					        xSwitchRequired = xTaskIncrementTickOtherCores();
 | 
				
			||||||
            }
 | 
					    }
 | 
				
			||||||
        #else /* configNUM_CORES > 1 */
 | 
					#else /* configNUM_CORES > 1 */
 | 
				
			||||||
            /*
 | 
					    /*
 | 
				
			||||||
            Vanilla (single core) FreeRTOS expects that xTaskIncrementTick() cannot be interrupted (i.e., no nested
 | 
					    Vanilla (single core) FreeRTOS expects that xTaskIncrementTick() cannot be interrupted (i.e., no nested
 | 
				
			||||||
            interrupts). Thus we have to disable interrupts before calling it.
 | 
					    interrupts). Thus we have to disable interrupts before calling it.
 | 
				
			||||||
            */
 | 
					    */
 | 
				
			||||||
            UBaseType_t uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
 | 
					    UBaseType_t uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
 | 
				
			||||||
            xSwitchRequired = xTaskIncrementTick();
 | 
					    xSwitchRequired = xTaskIncrementTick();
 | 
				
			||||||
            portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
 | 
					    portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
 | 
				
			||||||
        #endif /* configNUM_CORES > 1 */
 | 
					#endif /* configNUM_CORES > 1 */
 | 
				
			||||||
    #endif /* !CONFIG_FREERTOS_SMP */
 | 
					#endif /* !CONFIG_FREERTOS_SMP */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Check if yield is required
 | 
					    // Check if yield is required
 | 
				
			||||||
    if (xSwitchRequired != pdFALSE) {
 | 
					    if (xSwitchRequired != pdFALSE) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -35,7 +35,7 @@ static void task_event_group_call_response(void *param)
 | 
				
			|||||||
    for (int i = 0; i < COUNT; i++) {
 | 
					    for (int i = 0; i < COUNT; i++) {
 | 
				
			||||||
        /* Wait until the common "call" bit is set, starts off all tasks
 | 
					        /* Wait until the common "call" bit is set, starts off all tasks
 | 
				
			||||||
           (clear on return) */
 | 
					           (clear on return) */
 | 
				
			||||||
        TEST_ASSERT( xEventGroupWaitBits(eg, BIT_CALL(task_num), true, false, portMAX_DELAY) );
 | 
					        TEST_ASSERT(xEventGroupWaitBits(eg, BIT_CALL(task_num), true, false, portMAX_DELAY));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* Set our individual "response" bit */
 | 
					        /* Set our individual "response" bit */
 | 
				
			||||||
        xEventGroupSetBits(eg, BIT_RESPONSE(task_num));
 | 
					        xEventGroupSetBits(eg, BIT_RESPONSE(task_num));
 | 
				
			||||||
@@ -78,7 +78,7 @@ TEST_CASE("FreeRTOS Event Groups", "[freertos]")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* Ensure all tasks have suspend themselves */
 | 
					    /* Ensure all tasks have suspend themselves */
 | 
				
			||||||
    for (int c = 0; c < NUM_TASKS; c++) {
 | 
					    for (int c = 0; c < NUM_TASKS; c++) {
 | 
				
			||||||
        TEST_ASSERT( xSemaphoreTake(done_sem, 100 / portTICK_PERIOD_MS) );
 | 
					        TEST_ASSERT(xSemaphoreTake(done_sem, 100 / portTICK_PERIOD_MS));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int c = 0; c < NUM_TASKS; c++) {
 | 
					    for (int c = 0; c < NUM_TASKS; c++) {
 | 
				
			||||||
@@ -120,12 +120,12 @@ TEST_CASE("FreeRTOS Event Group Sync", "[freertos]")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    for (int c = 0; c < NUM_TASKS; c++) {
 | 
					    for (int c = 0; c < NUM_TASKS; c++) {
 | 
				
			||||||
        printf("Waiting on %d (0x%08x)\n", c, BIT_RESPONSE(c));
 | 
					        printf("Waiting on %d (0x%08x)\n", c, BIT_RESPONSE(c));
 | 
				
			||||||
        TEST_ASSERT( xEventGroupWaitBits(eg, BIT_RESPONSE(c), false, false, portMAX_DELAY) );
 | 
					        TEST_ASSERT(xEventGroupWaitBits(eg, BIT_RESPONSE(c), false, false, portMAX_DELAY));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Ensure all tasks cleaned up correctly */
 | 
					    /* Ensure all tasks cleaned up correctly */
 | 
				
			||||||
    for (int c = 0; c < NUM_TASKS; c++) {
 | 
					    for (int c = 0; c < NUM_TASKS; c++) {
 | 
				
			||||||
        TEST_ASSERT( xSemaphoreTake(done_sem, 100 / portTICK_PERIOD_MS) );
 | 
					        TEST_ASSERT(xSemaphoreTake(done_sem, 100 / portTICK_PERIOD_MS));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vSemaphoreDelete(done_sem);
 | 
					    vSemaphoreDelete(done_sem);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -10,63 +10,63 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if ( configNUM_CORES > 1 )
 | 
					#if ( configNUM_CORES > 1 )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
        const TestFunction_t pxTestCode;
 | 
					    const TestFunction_t pxTestCode;
 | 
				
			||||||
        void * const pvTestCodeArg;
 | 
					    void * const pvTestCodeArg;
 | 
				
			||||||
        const SemaphoreHandle_t xTaskDoneSem;
 | 
					    const SemaphoreHandle_t xTaskDoneSem;
 | 
				
			||||||
    } TestArgs_t;
 | 
					} TestArgs_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static void test_func_task( void * pvParameters )
 | 
					static void test_func_task(void * pvParameters)
 | 
				
			||||||
    {
 | 
					{
 | 
				
			||||||
        TestArgs_t * pxTestArgs = ( TestArgs_t * ) pvParameters;
 | 
					    TestArgs_t * pxTestArgs = (TestArgs_t *) pvParameters;
 | 
				
			||||||
        /* Call the test function */
 | 
					    /* Call the test function */
 | 
				
			||||||
        pxTestArgs->pxTestCode( pxTestArgs->pvTestCodeArg );
 | 
					    pxTestArgs->pxTestCode(pxTestArgs->pvTestCodeArg);
 | 
				
			||||||
        /* Indicate completion to the creation task and wait to be deleted. */
 | 
					    /* Indicate completion to the creation task and wait to be deleted. */
 | 
				
			||||||
        xSemaphoreGive( pxTestArgs->xTaskDoneSem );
 | 
					    xSemaphoreGive(pxTestArgs->xTaskDoneSem);
 | 
				
			||||||
        vTaskSuspend( NULL );
 | 
					    vTaskSuspend(NULL);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void vTestOnAllCores(TestFunction_t pxTestCode, void * pvTestCodeArg, uint32_t ulStackDepth, UBaseType_t uxPriority)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    SemaphoreHandle_t xTaskDoneSem = xSemaphoreCreateCounting(configNUM_CORES, 0);
 | 
				
			||||||
 | 
					    TaskHandle_t xTaskHandles[ configNUM_CORES ];
 | 
				
			||||||
 | 
					    TestArgs_t xTestArgs = {
 | 
				
			||||||
 | 
					        .pxTestCode = pxTestCode,
 | 
				
			||||||
 | 
					        .pvTestCodeArg = pvTestCodeArg,
 | 
				
			||||||
 | 
					        .xTaskDoneSem = xTaskDoneSem,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Create a separate task on each core to run the test function */
 | 
				
			||||||
 | 
					    for (BaseType_t xCoreID = 0; xCoreID < configNUM_CORES; xCoreID++) {
 | 
				
			||||||
 | 
					#if ( CONFIG_FREERTOS_SMP == 1 )
 | 
				
			||||||
 | 
					        xTaskCreateAffinitySet(test_func_task,
 | 
				
			||||||
 | 
					                               "task",
 | 
				
			||||||
 | 
					                               ulStackDepth,
 | 
				
			||||||
 | 
					                               (void *) &xTestArgs,
 | 
				
			||||||
 | 
					                               uxPriority,
 | 
				
			||||||
 | 
					                               (UBaseType_t)(1 << xCoreID),
 | 
				
			||||||
 | 
					                               &(xTaskHandles[ xCoreID ]));
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        xTaskCreatePinnedToCore(test_func_task,
 | 
				
			||||||
 | 
					                                "task",
 | 
				
			||||||
 | 
					                                ulStackDepth,
 | 
				
			||||||
 | 
					                                (void *) &xTestArgs,
 | 
				
			||||||
 | 
					                                uxPriority,
 | 
				
			||||||
 | 
					                                &(xTaskHandles[ xCoreID ]),
 | 
				
			||||||
 | 
					                                xCoreID);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void vTestOnAllCores( TestFunction_t pxTestCode, void * pvTestCodeArg, uint32_t ulStackDepth, UBaseType_t uxPriority )
 | 
					    /* Wait for each tasks to complete test */
 | 
				
			||||||
    {
 | 
					    for (BaseType_t xCoreID = 0; xCoreID < configNUM_CORES; xCoreID++) {
 | 
				
			||||||
        SemaphoreHandle_t xTaskDoneSem = xSemaphoreCreateCounting( configNUM_CORES, 0 );
 | 
					        xSemaphoreTake(xTaskDoneSem, portMAX_DELAY);
 | 
				
			||||||
        TaskHandle_t xTaskHandles[ configNUM_CORES ];
 | 
					 | 
				
			||||||
        TestArgs_t xTestArgs = {
 | 
					 | 
				
			||||||
            .pxTestCode = pxTestCode,
 | 
					 | 
				
			||||||
            .pvTestCodeArg = pvTestCodeArg,
 | 
					 | 
				
			||||||
            .xTaskDoneSem = xTaskDoneSem,
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /* Create a separate task on each core to run the test function */
 | 
					 | 
				
			||||||
        for( BaseType_t xCoreID = 0; xCoreID < configNUM_CORES; xCoreID++ ) {
 | 
					 | 
				
			||||||
            #if ( CONFIG_FREERTOS_SMP == 1 )
 | 
					 | 
				
			||||||
                xTaskCreateAffinitySet( test_func_task,
 | 
					 | 
				
			||||||
                                        "task",
 | 
					 | 
				
			||||||
                                        ulStackDepth,
 | 
					 | 
				
			||||||
                                        ( void * ) &xTestArgs,
 | 
					 | 
				
			||||||
                                        uxPriority,
 | 
					 | 
				
			||||||
                                        ( UBaseType_t ) ( 1 << xCoreID ),
 | 
					 | 
				
			||||||
                                        &( xTaskHandles[ xCoreID ] ) );
 | 
					 | 
				
			||||||
            #else
 | 
					 | 
				
			||||||
                xTaskCreatePinnedToCore( test_func_task,
 | 
					 | 
				
			||||||
                                         "task",
 | 
					 | 
				
			||||||
                                         ulStackDepth,
 | 
					 | 
				
			||||||
                                         ( void * ) &xTestArgs,
 | 
					 | 
				
			||||||
                                         uxPriority,
 | 
					 | 
				
			||||||
                                         &( xTaskHandles[ xCoreID ] ),
 | 
					 | 
				
			||||||
                                         xCoreID );
 | 
					 | 
				
			||||||
            #endif
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /* Wait for each tasks to complete test */
 | 
					 | 
				
			||||||
        for( BaseType_t xCoreID = 0; xCoreID < configNUM_CORES; xCoreID++ ) {
 | 
					 | 
				
			||||||
            xSemaphoreTake( xTaskDoneSem, portMAX_DELAY );
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /* Cleanup */
 | 
					 | 
				
			||||||
        for( BaseType_t xCoreID = 0; xCoreID < configNUM_CORES; xCoreID++ ) {
 | 
					 | 
				
			||||||
            vTaskDelete( xTaskHandles[ xCoreID ] );
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        vSemaphoreDelete( xTaskDoneSem );
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Cleanup */
 | 
				
			||||||
 | 
					    for (BaseType_t xCoreID = 0; xCoreID < configNUM_CORES; xCoreID++) {
 | 
				
			||||||
 | 
					        vTaskDelete(xTaskHandles[ xCoreID ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    vSemaphoreDelete(xTaskDoneSem);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* ( configNUM_CORES > 1 ) */
 | 
					#endif /* ( configNUM_CORES > 1 ) */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -9,24 +9,24 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if ( configNUM_CORES > 1 )
 | 
					#if ( configNUM_CORES > 1 )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					/**
 | 
				
			||||||
     * @brief Prototype for test function.
 | 
					 * @brief Prototype for test function.
 | 
				
			||||||
     *
 | 
					 *
 | 
				
			||||||
     * A test function can be passed to vTestOnAllCores() which will run the test function from a task on each core.
 | 
					 * A test function can be passed to vTestOnAllCores() which will run the test function from a task on each core.
 | 
				
			||||||
     */
 | 
					 */
 | 
				
			||||||
    typedef void (* TestFunction_t)( void * );
 | 
					typedef void (* TestFunction_t)(void *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					/**
 | 
				
			||||||
     * @brief Run a test function on each core
 | 
					 * @brief Run a test function on each core
 | 
				
			||||||
     *
 | 
					 *
 | 
				
			||||||
     * This function will internally create a task pinned to each core, where each task will call the provided test
 | 
					 * This function will internally create a task pinned to each core, where each task will call the provided test
 | 
				
			||||||
     * function. This function will block until all cores finish executing the test function.
 | 
					 * function. This function will block until all cores finish executing the test function.
 | 
				
			||||||
     *
 | 
					 *
 | 
				
			||||||
     * @param pxTestCode Test function
 | 
					 * @param pxTestCode Test function
 | 
				
			||||||
     * @param pvTestCodeArg Argument provided to test function
 | 
					 * @param pvTestCodeArg Argument provided to test function
 | 
				
			||||||
     * @param ulStackDepth Stack depth of the created tasks
 | 
					 * @param ulStackDepth Stack depth of the created tasks
 | 
				
			||||||
     * @param uxPriority Priority of the created tasks
 | 
					 * @param uxPriority Priority of the created tasks
 | 
				
			||||||
     */
 | 
					 */
 | 
				
			||||||
    void vTestOnAllCores( TestFunction_t pxTestCode, void * pvTestCodeArg, uint32_t ulStackDepth, UBaseType_t uxPriority );
 | 
					void vTestOnAllCores(TestFunction_t pxTestCode, void * pvTestCodeArg, uint32_t ulStackDepth, UBaseType_t uxPriority);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* ( configNUM_CORES > 1 ) */
 | 
					#endif /* ( configNUM_CORES > 1 ) */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -70,7 +70,7 @@ TEST_CASE("Test FreeRTOS backported timer functions", "[freertos]")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    TEST_ASSERT_UINT32_WITHIN(TICK_DELTA, tmr_ideal_exp, xTimerGetExpiryTime(tmr_handle));    //Test xTimerGetExpiryTime()
 | 
					    TEST_ASSERT_UINT32_WITHIN(TICK_DELTA, tmr_ideal_exp, xTimerGetExpiryTime(tmr_handle));    //Test xTimerGetExpiryTime()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vTaskDelay(2*TMR_PERIOD_TICKS);     //Delay until one shot timer has triggered
 | 
					    vTaskDelay(2 * TMR_PERIOD_TICKS);   //Delay until one shot timer has triggered
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdPASS, xTimerDelete(tmr_handle, portMAX_DELAY));     //Clean up
 | 
					    TEST_ASSERT_EQUAL(pdPASS, xTimerDelete(tmr_handle, portMAX_DELAY));     //Clean up
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -90,22 +90,22 @@ TEST_CASE("Test FreeRTOS backported timer functions", "[freertos]")
 | 
				
			|||||||
#define DELAY_TICKS     2
 | 
					#define DELAY_TICKS     2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static StaticQueue_t queue_buffer;       //Queues, Semaphores, and Mutex use the same queue structure
 | 
					static StaticQueue_t queue_buffer;       //Queues, Semaphores, and Mutex use the same queue structure
 | 
				
			||||||
static uint8_t queue_storage_area[(ITEM_SIZE*NO_OF_ITEMS)];    //Queue storage provided in separate buffer to queue struct
 | 
					static uint8_t queue_storage_area[(ITEM_SIZE * NO_OF_ITEMS)];  //Queue storage provided in separate buffer to queue struct
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_CASE("Test FreeRTOS backported Queue and Semphr functions", "[freertos]")
 | 
					TEST_CASE("Test FreeRTOS backported Queue and Semphr functions", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    //Test static queue
 | 
					    //Test static queue
 | 
				
			||||||
    uint8_t queue_item_to_send[ITEM_SIZE];
 | 
					    uint8_t queue_item_to_send[ITEM_SIZE];
 | 
				
			||||||
    uint8_t queue_item_received[ITEM_SIZE];
 | 
					    uint8_t queue_item_received[ITEM_SIZE];
 | 
				
			||||||
    for(int i = 0; i < ITEM_SIZE; i++){
 | 
					    for (int i = 0; i < ITEM_SIZE; i++) {
 | 
				
			||||||
        queue_item_to_send[i] = (0xF << i);
 | 
					        queue_item_to_send[i] = (0xF << i);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    QueueHandle_t handle = xQueueCreateStatic(NO_OF_ITEMS, ITEM_SIZE,(uint8_t*) &queue_storage_area, &queue_buffer);
 | 
					    QueueHandle_t handle = xQueueCreateStatic(NO_OF_ITEMS, ITEM_SIZE, (uint8_t*) &queue_storage_area, &queue_buffer);
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdTRUE, xQueueSendToBack(handle, &queue_item_to_send, DELAY_TICKS));
 | 
					    TEST_ASSERT_EQUAL(pdTRUE, xQueueSendToBack(handle, &queue_item_to_send, DELAY_TICKS));
 | 
				
			||||||
    vTaskDelay(1);
 | 
					    vTaskDelay(1);
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdTRUE, xQueueReceive(handle, queue_item_received, DELAY_TICKS));
 | 
					    TEST_ASSERT_EQUAL(pdTRUE, xQueueReceive(handle, queue_item_received, DELAY_TICKS));
 | 
				
			||||||
    vTaskDelay(1);
 | 
					    vTaskDelay(1);
 | 
				
			||||||
    for(int i = 0; i < ITEM_SIZE; i++){
 | 
					    for (int i = 0; i < ITEM_SIZE; i++) {
 | 
				
			||||||
        TEST_ASSERT_EQUAL(queue_item_to_send[i], queue_item_received[i]);   //Check received contents are correct
 | 
					        TEST_ASSERT_EQUAL(queue_item_to_send[i], queue_item_received[i]);   //Check received contents are correct
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    vQueueDelete(handle);   //Technically not needed as deleting static queue/semphr doesn't clear static memory
 | 
					    vQueueDelete(handle);   //Technically not needed as deleting static queue/semphr doesn't clear static memory
 | 
				
			||||||
@@ -120,12 +120,12 @@ TEST_CASE("Test FreeRTOS backported Queue and Semphr functions", "[freertos]")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    //Test static counting semaphore and uxSemaphoreGetCount()
 | 
					    //Test static counting semaphore and uxSemaphoreGetCount()
 | 
				
			||||||
    handle = xSemaphoreCreateCountingStatic(NO_OF_ITEMS, 0, &queue_buffer);
 | 
					    handle = xSemaphoreCreateCountingStatic(NO_OF_ITEMS, 0, &queue_buffer);
 | 
				
			||||||
    for(int i = 0; i < NO_OF_ITEMS; i++){
 | 
					    for (int i = 0; i < NO_OF_ITEMS; i++) {
 | 
				
			||||||
        TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreGive(handle));
 | 
					        TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreGive(handle));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    vTaskDelay(1);
 | 
					    vTaskDelay(1);
 | 
				
			||||||
    TEST_ASSERT_EQUAL(NO_OF_ITEMS, uxSemaphoreGetCount(handle));    //Test uxSemaphoreGetCount()
 | 
					    TEST_ASSERT_EQUAL(NO_OF_ITEMS, uxSemaphoreGetCount(handle));    //Test uxSemaphoreGetCount()
 | 
				
			||||||
    for(int i = 0; i < NO_OF_ITEMS; i++){
 | 
					    for (int i = 0; i < NO_OF_ITEMS; i++) {
 | 
				
			||||||
        TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreTake(handle, DELAY_TICKS));
 | 
					        TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreTake(handle, DELAY_TICKS));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    vTaskDelay(1);
 | 
					    vTaskDelay(1);
 | 
				
			||||||
@@ -144,12 +144,12 @@ TEST_CASE("Test FreeRTOS backported Queue and Semphr functions", "[freertos]")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    //Test static mutex recursive
 | 
					    //Test static mutex recursive
 | 
				
			||||||
    handle = xSemaphoreCreateRecursiveMutexStatic(&queue_buffer);
 | 
					    handle = xSemaphoreCreateRecursiveMutexStatic(&queue_buffer);
 | 
				
			||||||
    for(int i = 0; i < NO_OF_ITEMS; i++){
 | 
					    for (int i = 0; i < NO_OF_ITEMS; i++) {
 | 
				
			||||||
        TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreTakeRecursive(handle, DELAY_TICKS));
 | 
					        TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreTakeRecursive(handle, DELAY_TICKS));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    vTaskDelay(1);
 | 
					    vTaskDelay(1);
 | 
				
			||||||
    TEST_ASSERT_EQUAL_PTR((void *)xTaskGetCurrentTaskHandle(), xSemaphoreGetMutexHolder(handle));   //Current task should hold mutex
 | 
					    TEST_ASSERT_EQUAL_PTR((void *)xTaskGetCurrentTaskHandle(), xSemaphoreGetMutexHolder(handle));   //Current task should hold mutex
 | 
				
			||||||
    for(int i = 0; i < NO_OF_ITEMS; i++){
 | 
					    for (int i = 0; i < NO_OF_ITEMS; i++) {
 | 
				
			||||||
        TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreGiveRecursive(handle));
 | 
					        TEST_ASSERT_EQUAL(pdTRUE, xSemaphoreGiveRecursive(handle));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    vTaskDelay(1);
 | 
					    vTaskDelay(1);
 | 
				
			||||||
@@ -177,7 +177,7 @@ static void task(void *arg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TEST_CASE("Test FreeRTOS static task allocation", "[freertos]")
 | 
					TEST_CASE("Test FreeRTOS static task allocation", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    for(int core = 0; core < portNUM_PROCESSORS; core++){
 | 
					    for (int core = 0; core < portNUM_PROCESSORS; core++) {
 | 
				
			||||||
        has_run[core] = false;     //Clear has_run flag
 | 
					        has_run[core] = false;     //Clear has_run flag
 | 
				
			||||||
        TaskHandle_t handle = xTaskCreateStaticPinnedToCore(task, "static task", STACK_SIZE, NULL,
 | 
					        TaskHandle_t handle = xTaskCreateStaticPinnedToCore(task, "static task", STACK_SIZE, NULL,
 | 
				
			||||||
                                                            UNITY_FREERTOS_PRIORITY + 1, (StackType_t *)&task_stack,
 | 
					                                                            UNITY_FREERTOS_PRIORITY + 1, (StackType_t *)&task_stack,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -35,22 +35,22 @@ void test_queue_registry_task(void *arg)
 | 
				
			|||||||
    int core = xPortGetCoreID();
 | 
					    int core = xPortGetCoreID();
 | 
				
			||||||
    int offset = core * NO_OF_QUEUES_PER_CORE;
 | 
					    int offset = core * NO_OF_QUEUES_PER_CORE;
 | 
				
			||||||
    //Create queues and accompanying queue names
 | 
					    //Create queues and accompanying queue names
 | 
				
			||||||
    for(int i = 0; i < NO_OF_QUEUES_PER_CORE; i++){
 | 
					    for (int i = 0; i < NO_OF_QUEUES_PER_CORE; i++) {
 | 
				
			||||||
        handles[i + offset] = xQueueCreate(1,1);   //Create queues
 | 
					        handles[i + offset] = xQueueCreate(1, 1);  //Create queues
 | 
				
			||||||
        names[i + offset] = calloc(QUEUE_NAME_MAX_LENGTH, sizeof(char));
 | 
					        names[i + offset] = calloc(QUEUE_NAME_MAX_LENGTH, sizeof(char));
 | 
				
			||||||
        sprintf(names[i + offset], "Queue%d%d", core, i);
 | 
					        sprintf(names[i + offset], "Queue%d%d", core, i);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xSemaphoreTake(start_sem[core], portMAX_DELAY);   //Wait for start vQueueAddToRegistry()
 | 
					    xSemaphoreTake(start_sem[core], portMAX_DELAY);   //Wait for start vQueueAddToRegistry()
 | 
				
			||||||
    for(int i = 0; i < NO_OF_QUEUES_PER_CORE; i++){
 | 
					    for (int i = 0; i < NO_OF_QUEUES_PER_CORE; i++) {
 | 
				
			||||||
        vQueueAddToRegistry(handles[i + offset] , names[i + offset]);   //Register queues to queue registry
 | 
					        vQueueAddToRegistry(handles[i + offset], names[i + offset]);    //Register queues to queue registry
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    xSemaphoreGive(done_sem);   //Signal that vQueueAddToRegistry() has completed
 | 
					    xSemaphoreGive(done_sem);   //Signal that vQueueAddToRegistry() has completed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vTaskDelay(1);
 | 
					    vTaskDelay(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xSemaphoreTake(start_sem[core], portMAX_DELAY);   //Wait to start vQueueUnregisterQueue()
 | 
					    xSemaphoreTake(start_sem[core], portMAX_DELAY);   //Wait to start vQueueUnregisterQueue()
 | 
				
			||||||
    for(int i = 0; i < NO_OF_QUEUES_PER_CORE; i++){
 | 
					    for (int i = 0; i < NO_OF_QUEUES_PER_CORE; i++) {
 | 
				
			||||||
        vQueueDelete(handles[i + offset]);  //Internally calls vQueueUnregisterQueue
 | 
					        vQueueDelete(handles[i + offset]);  //Internally calls vQueueUnregisterQueue
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    xSemaphoreGive(done_sem);   //Signal done
 | 
					    xSemaphoreGive(done_sem);   //Signal done
 | 
				
			||||||
@@ -62,44 +62,44 @@ TEST_CASE("Test FreeRTOS Queue Registry", "[freertos]")
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    //Create synchronization semaphores and tasks to test queue registry
 | 
					    //Create synchronization semaphores and tasks to test queue registry
 | 
				
			||||||
    done_sem = xSemaphoreCreateCounting(portNUM_PROCESSORS, 0);
 | 
					    done_sem = xSemaphoreCreateCounting(portNUM_PROCESSORS, 0);
 | 
				
			||||||
    for(int i = 0; i < portNUM_PROCESSORS; i++){
 | 
					    for (int i = 0; i < portNUM_PROCESSORS; i++) {
 | 
				
			||||||
        start_sem[i] = xSemaphoreCreateBinary();
 | 
					        start_sem[i] = xSemaphoreCreateBinary();
 | 
				
			||||||
        xTaskCreatePinnedToCore(test_queue_registry_task, "testing task", 4096, NULL, UNITY_FREERTOS_PRIORITY+1, NULL, i);
 | 
					        xTaskCreatePinnedToCore(test_queue_registry_task, "testing task", 4096, NULL, UNITY_FREERTOS_PRIORITY + 1, NULL, i);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    portDISABLE_INTERRUPTS();
 | 
					    portDISABLE_INTERRUPTS();
 | 
				
			||||||
    for(int i = 0; i < portNUM_PROCESSORS; i++){
 | 
					    for (int i = 0; i < portNUM_PROCESSORS; i++) {
 | 
				
			||||||
        xSemaphoreGive(start_sem[i]);  //Trigger start
 | 
					        xSemaphoreGive(start_sem[i]);  //Trigger start
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    portENABLE_INTERRUPTS();
 | 
					    portENABLE_INTERRUPTS();
 | 
				
			||||||
    for(int i = 0; i < portNUM_PROCESSORS; i++){
 | 
					    for (int i = 0; i < portNUM_PROCESSORS; i++) {
 | 
				
			||||||
        xSemaphoreTake(done_sem, portMAX_DELAY);    //Wait for tasks to complete vQueueAddToRegistry
 | 
					        xSemaphoreTake(done_sem, portMAX_DELAY);    //Wait for tasks to complete vQueueAddToRegistry
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    for(int i = 0; i < NO_OF_QUEUES_TOTAL; i++){
 | 
					    for (int i = 0; i < NO_OF_QUEUES_TOTAL; i++) {
 | 
				
			||||||
        const char *addr = pcQueueGetName(handles[i]);
 | 
					        const char *addr = pcQueueGetName(handles[i]);
 | 
				
			||||||
        TEST_ASSERT(addr == names[i]);   //Check vQueueAddToRegistry was successful
 | 
					        TEST_ASSERT(addr == names[i]);   //Check vQueueAddToRegistry was successful
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    portDISABLE_INTERRUPTS();
 | 
					    portDISABLE_INTERRUPTS();
 | 
				
			||||||
    for(int i = 0; i < portNUM_PROCESSORS; i++){
 | 
					    for (int i = 0; i < portNUM_PROCESSORS; i++) {
 | 
				
			||||||
        xSemaphoreGive(start_sem[i]);  //Trigger start
 | 
					        xSemaphoreGive(start_sem[i]);  //Trigger start
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    portENABLE_INTERRUPTS();
 | 
					    portENABLE_INTERRUPTS();
 | 
				
			||||||
    for(int i = 0; i < portNUM_PROCESSORS; i++){
 | 
					    for (int i = 0; i < portNUM_PROCESSORS; i++) {
 | 
				
			||||||
        xSemaphoreTake(done_sem, portMAX_DELAY);    //Wait for tasks to complete vQueueUnregisterQueue
 | 
					        xSemaphoreTake(done_sem, portMAX_DELAY);    //Wait for tasks to complete vQueueUnregisterQueue
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    for(int i = 0; i <  NO_OF_QUEUES_TOTAL; i++){
 | 
					    for (int i = 0; i <  NO_OF_QUEUES_TOTAL; i++) {
 | 
				
			||||||
        const char *addr = pcQueueGetName(handles[i]);
 | 
					        const char *addr = pcQueueGetName(handles[i]);
 | 
				
			||||||
        TEST_ASSERT(addr == NULL);   //Check vQueueUnregisterQueue was successful
 | 
					        TEST_ASSERT(addr == NULL);   //Check vQueueUnregisterQueue was successful
 | 
				
			||||||
        handles[i] = NULL;
 | 
					        handles[i] = NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Cleanup
 | 
					    //Cleanup
 | 
				
			||||||
    for(int i = 0; i < NO_OF_QUEUES_TOTAL; i++){
 | 
					    for (int i = 0; i < NO_OF_QUEUES_TOTAL; i++) {
 | 
				
			||||||
        free(names[i]);
 | 
					        free(names[i]);
 | 
				
			||||||
        names[i] = NULL;
 | 
					        names[i] = NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    for(int i = 0; i < portNUM_PROCESSORS; i++){
 | 
					    for (int i = 0; i < portNUM_PROCESSORS; i++) {
 | 
				
			||||||
        vSemaphoreDelete(start_sem[i]);
 | 
					        vSemaphoreDelete(start_sem[i]);
 | 
				
			||||||
        start_sem[i] = NULL;
 | 
					        start_sem[i] = NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -64,11 +64,11 @@ TEST_CASE("Stream Buffer: Send-receive tasks", "[freertos]")
 | 
				
			|||||||
    BaseType_t sender_core_id;
 | 
					    BaseType_t sender_core_id;
 | 
				
			||||||
    BaseType_t receiver_core_id;
 | 
					    BaseType_t receiver_core_id;
 | 
				
			||||||
    sender_core_id = 0;
 | 
					    sender_core_id = 0;
 | 
				
			||||||
    #if CONFIG_FREERTOS_UNICORE
 | 
					#if CONFIG_FREERTOS_UNICORE
 | 
				
			||||||
        receiver_core_id = 0;
 | 
					    receiver_core_id = 0;
 | 
				
			||||||
    #else
 | 
					#else
 | 
				
			||||||
        receiver_core_id = 1;
 | 
					    receiver_core_id = 1;
 | 
				
			||||||
    #endif
 | 
					#endif
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdTRUE, xTaskCreatePinnedToCore(sender_task, "sender", 4096, &test_args, UNITY_FREERTOS_PRIORITY + 2, NULL, sender_core_id));
 | 
					    TEST_ASSERT_EQUAL(pdTRUE, xTaskCreatePinnedToCore(sender_task, "sender", 4096, &test_args, UNITY_FREERTOS_PRIORITY + 2, NULL, sender_core_id));
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdTRUE, xTaskCreatePinnedToCore(receiver_task, "receiver", 4096, &test_args, UNITY_FREERTOS_PRIORITY + 1, NULL, receiver_core_id));
 | 
					    TEST_ASSERT_EQUAL(pdTRUE, xTaskCreatePinnedToCore(receiver_task, "receiver", 4096, &test_args, UNITY_FREERTOS_PRIORITY + 1, NULL, receiver_core_id));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ Expected:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void blocked_task(void *arg)
 | 
					static void blocked_task(void *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    vTaskDelay(portMAX_DELAY-1);
 | 
					    vTaskDelay(portMAX_DELAY - 1);
 | 
				
			||||||
    // Shouldn't need to self delete, but added for extra safety
 | 
					    // Shouldn't need to self delete, but added for extra safety
 | 
				
			||||||
    vTaskDelete(NULL);
 | 
					    vTaskDelete(NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -81,7 +81,7 @@ void vTaskPreDeletionHook(void *pxTCB)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TEST_CASE("static task cleanup hook is called based on config", "[freertos]")
 | 
					TEST_CASE("static task cleanup hook is called based on config", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    for(int i = 0; i < portNUM_PROCESSORS; i++) {
 | 
					    for (int i = 0; i < portNUM_PROCESSORS; i++) {
 | 
				
			||||||
        printf("Creating task CPU %d\n", i);
 | 
					        printf("Creating task CPU %d\n", i);
 | 
				
			||||||
        TaskHandle_t new_task = NULL;
 | 
					        TaskHandle_t new_task = NULL;
 | 
				
			||||||
        deleted_tcb = NULL;
 | 
					        deleted_tcb = NULL;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -33,32 +33,32 @@ static void task_should_never_run(void *arg)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static BaseType_t create_task(TaskFunction_t function,
 | 
					static BaseType_t create_task(TaskFunction_t function,
 | 
				
			||||||
        size_t stack_size,
 | 
					                              size_t stack_size,
 | 
				
			||||||
        void *task_arg,
 | 
					                              void *task_arg,
 | 
				
			||||||
        int core_num,
 | 
					                              int core_num,
 | 
				
			||||||
        UBaseType_t heap_caps,
 | 
					                              UBaseType_t heap_caps,
 | 
				
			||||||
        TaskHandle_t *task_handle)
 | 
					                              TaskHandle_t *task_handle)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if CONFIG_FREERTOS_SMP
 | 
					#if CONFIG_FREERTOS_SMP
 | 
				
			||||||
    UBaseType_t core_affinity_mask = (core_num == -1) ? tskNO_AFFINITY : 1 << core_num;
 | 
					    UBaseType_t core_affinity_mask = (core_num == -1) ? tskNO_AFFINITY : 1 << core_num;
 | 
				
			||||||
    return prvTaskCreateDynamicAffinitySetWithCaps(function,
 | 
					    return prvTaskCreateDynamicAffinitySetWithCaps(function,
 | 
				
			||||||
                "self_delete",
 | 
					                                                   "self_delete",
 | 
				
			||||||
                stack_size,
 | 
					                                                   stack_size,
 | 
				
			||||||
                task_arg,
 | 
					                                                   task_arg,
 | 
				
			||||||
                UNITY_FREERTOS_PRIORITY + 1,
 | 
					                                                   UNITY_FREERTOS_PRIORITY + 1,
 | 
				
			||||||
                core_affinity_mask,
 | 
					                                                   core_affinity_mask,
 | 
				
			||||||
                heap_caps,
 | 
					                                                   heap_caps,
 | 
				
			||||||
                task_handle);
 | 
					                                                   task_handle);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    const BaseType_t task_core_num = (core_num == -1) ? tskNO_AFFINITY : core_num;
 | 
					    const BaseType_t task_core_num = (core_num == -1) ? tskNO_AFFINITY : core_num;
 | 
				
			||||||
    return prvTaskCreateDynamicPinnedToCoreWithCaps(function,
 | 
					    return prvTaskCreateDynamicPinnedToCoreWithCaps(function,
 | 
				
			||||||
                "self_delete",
 | 
					                                                    "self_delete",
 | 
				
			||||||
                stack_size,
 | 
					                                                    stack_size,
 | 
				
			||||||
                task_arg,
 | 
					                                                    task_arg,
 | 
				
			||||||
                UNITY_FREERTOS_PRIORITY + 1,
 | 
					                                                    UNITY_FREERTOS_PRIORITY + 1,
 | 
				
			||||||
                task_core_num,
 | 
					                                                    task_core_num,
 | 
				
			||||||
                heap_caps,
 | 
					                                                    heap_caps,
 | 
				
			||||||
                task_handle);
 | 
					                                                    task_handle);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -69,11 +69,11 @@ TEST_CASE("Out of memory failure", "[freertos][psram]")
 | 
				
			|||||||
    UBaseType_t HEAP_CAPS = (MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
 | 
					    UBaseType_t HEAP_CAPS = (MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    BaseType_t result = create_task(task_should_never_run,
 | 
					    BaseType_t result = create_task(task_should_never_run,
 | 
				
			||||||
                STACK_SIZE,
 | 
					                                    STACK_SIZE,
 | 
				
			||||||
                (void *)xTaskGetCurrentTaskHandle(),
 | 
					                                    (void *)xTaskGetCurrentTaskHandle(),
 | 
				
			||||||
                -1,
 | 
					                                    -1,
 | 
				
			||||||
                HEAP_CAPS,
 | 
					                                    HEAP_CAPS,
 | 
				
			||||||
                &task_handle);
 | 
					                                    &task_handle);
 | 
				
			||||||
    TEST_ASSERT_EQUAL(errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY, result);
 | 
					    TEST_ASSERT_EQUAL(errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY, result);
 | 
				
			||||||
    (void)task_handle;
 | 
					    (void)task_handle;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -85,11 +85,11 @@ TEST_CASE("Task with stack memory in PSRAM", "[freertos][psram]")
 | 
				
			|||||||
    UBaseType_t HEAP_CAPS = (MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
 | 
					    UBaseType_t HEAP_CAPS = (MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    BaseType_t result = create_task(task_delete_itself,
 | 
					    BaseType_t result = create_task(task_delete_itself,
 | 
				
			||||||
                STACK_SIZE,
 | 
					                                    STACK_SIZE,
 | 
				
			||||||
                (void *)xTaskGetCurrentTaskHandle(),
 | 
					                                    (void *)xTaskGetCurrentTaskHandle(),
 | 
				
			||||||
                -1,
 | 
					                                    -1,
 | 
				
			||||||
                HEAP_CAPS,
 | 
					                                    HEAP_CAPS,
 | 
				
			||||||
                &task_handle);
 | 
					                                    &task_handle);
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdPASS, result);
 | 
					    TEST_ASSERT_EQUAL(pdPASS, result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // synchronize with the task to make sure we don't return too early, thus giving it enough time
 | 
					    // synchronize with the task to make sure we don't return too early, thus giving it enough time
 | 
				
			||||||
@@ -126,11 +126,11 @@ TEST_CASE("Task on specific core works", "[freertos][psram]")
 | 
				
			|||||||
        corenum_info.parent_handle = xTaskGetCurrentTaskHandle();
 | 
					        corenum_info.parent_handle = xTaskGetCurrentTaskHandle();
 | 
				
			||||||
        UBaseType_t HEAP_CAPS = (MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
 | 
					        UBaseType_t HEAP_CAPS = (MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
 | 
				
			||||||
        BaseType_t result = create_task(task_report_corenum,
 | 
					        BaseType_t result = create_task(task_report_corenum,
 | 
				
			||||||
                STACK_SIZE,
 | 
					                                        STACK_SIZE,
 | 
				
			||||||
                (void *) &(corenum_info),
 | 
					                                        (void *) & (corenum_info),
 | 
				
			||||||
                corenum,
 | 
					                                        corenum,
 | 
				
			||||||
                HEAP_CAPS,
 | 
					                                        HEAP_CAPS,
 | 
				
			||||||
                &task_handle);
 | 
					                                        &task_handle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        TEST_ASSERT_EQUAL(pdPASS, result);
 | 
					        TEST_ASSERT_EQUAL(pdPASS, result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,7 +70,7 @@ static void spin_task(void *arg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    //Last iteration of the last spin task on this core. Reenable this core's tick interrupt
 | 
					    //Last iteration of the last spin task on this core. Reenable this core's tick interrupt
 | 
				
			||||||
    if (total_iter_count[xPortGetCoreID()] == (NUM_PINNED_SPIN_TASK_PER_CORE * SPIN_TASK_NUM_ITER)) {
 | 
					    if (total_iter_count[xPortGetCoreID()] == (NUM_PINNED_SPIN_TASK_PER_CORE * SPIN_TASK_NUM_ITER)) {
 | 
				
			||||||
        esp_cpu_intr_enable(1 <<TICK_INTR_IDX);
 | 
					        esp_cpu_intr_enable(1 << TICK_INTR_IDX);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    vTaskDelete(NULL);
 | 
					    vTaskDelete(NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -33,8 +33,7 @@
 | 
				
			|||||||
/* Caps of all memory which is allocated from when a task is created */
 | 
					/* Caps of all memory which is allocated from when a task is created */
 | 
				
			||||||
#define HEAP_CAPS   (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT)
 | 
					#define HEAP_CAPS   (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DELAY_US_ITERATIONS	1000
 | 
					#define DELAY_US_ITERATIONS 1000
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void tsk_self_del(void *param)
 | 
					static void tsk_self_del(void *param)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -55,11 +54,11 @@ static void tsk_self_del_us_delay(void *param)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TEST_CASE("FreeRTOS Delete Tasks", "[freertos]")
 | 
					TEST_CASE("FreeRTOS Delete Tasks", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
/* -------------- Test vTaskDelete() on currently running tasks ----------------*/
 | 
					    /* -------------- Test vTaskDelete() on currently running tasks ----------------*/
 | 
				
			||||||
    uint32_t before_count = uxTaskGetNumberOfTasks();
 | 
					    uint32_t before_count = uxTaskGetNumberOfTasks();
 | 
				
			||||||
    uint32_t before_heap = heap_caps_get_free_size(HEAP_CAPS);
 | 
					    uint32_t before_heap = heap_caps_get_free_size(HEAP_CAPS);
 | 
				
			||||||
    for(int i = 0; i < portNUM_PROCESSORS; i++){
 | 
					    for (int i = 0; i < portNUM_PROCESSORS; i++) {
 | 
				
			||||||
        for(int j = 0; j < NO_OF_TSKS; j++){
 | 
					        for (int j = 0; j < NO_OF_TSKS; j++) {
 | 
				
			||||||
            TEST_ASSERT_EQUAL(pdTRUE, xTaskCreatePinnedToCore(tsk_self_del, "tsk_self", 1024, NULL, configMAX_PRIORITIES - 1, NULL, i));
 | 
					            TEST_ASSERT_EQUAL(pdTRUE, xTaskCreatePinnedToCore(tsk_self_del, "tsk_self", 1024, NULL, configMAX_PRIORITIES - 1, NULL, i));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -67,22 +66,22 @@ TEST_CASE("FreeRTOS Delete Tasks", "[freertos]")
 | 
				
			|||||||
    TEST_ASSERT_EQUAL(before_count, uxTaskGetNumberOfTasks());
 | 
					    TEST_ASSERT_EQUAL(before_count, uxTaskGetNumberOfTasks());
 | 
				
			||||||
    TEST_ASSERT_EQUAL(before_heap, heap_caps_get_free_size(HEAP_CAPS));
 | 
					    TEST_ASSERT_EQUAL(before_heap, heap_caps_get_free_size(HEAP_CAPS));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ------------- Test vTaskDelete() on not currently running tasks ------------ */
 | 
					    /* ------------- Test vTaskDelete() on not currently running tasks ------------ */
 | 
				
			||||||
    TaskHandle_t handles[NO_OF_TSKS];
 | 
					    TaskHandle_t handles[NO_OF_TSKS];
 | 
				
			||||||
    before_heap = heap_caps_get_free_size(HEAP_CAPS);
 | 
					    before_heap = heap_caps_get_free_size(HEAP_CAPS);
 | 
				
			||||||
    //Create task pinned to the same core that will not run during task deletion
 | 
					    //Create task pinned to the same core that will not run during task deletion
 | 
				
			||||||
    for(int j = 0 ; j < NO_OF_TSKS; j++){
 | 
					    for (int j = 0 ; j < NO_OF_TSKS; j++) {
 | 
				
			||||||
        TEST_ASSERT_EQUAL(pdTRUE, xTaskCreatePinnedToCore(tsk_extern_del, "tsk_extern", 4096, NULL, configMAX_PRIORITIES - 1, &handles[j], xPortGetCoreID()));
 | 
					        TEST_ASSERT_EQUAL(pdTRUE, xTaskCreatePinnedToCore(tsk_extern_del, "tsk_extern", 4096, NULL, configMAX_PRIORITIES - 1, &handles[j], xPortGetCoreID()));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    TEST_ASSERT_NOT_EQUAL(before_heap, heap_caps_get_free_size(HEAP_CAPS));    //Check tasks have been created
 | 
					    TEST_ASSERT_NOT_EQUAL(before_heap, heap_caps_get_free_size(HEAP_CAPS));    //Check tasks have been created
 | 
				
			||||||
    //Delete the tasks, memory should be freed immediately
 | 
					    //Delete the tasks, memory should be freed immediately
 | 
				
			||||||
    for(int j = 0; j < NO_OF_TSKS; j++){
 | 
					    for (int j = 0; j < NO_OF_TSKS; j++) {
 | 
				
			||||||
        vTaskDelete(handles[j]);
 | 
					        vTaskDelete(handles[j]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    TEST_ASSERT_EQUAL(before_heap, heap_caps_get_free_size(HEAP_CAPS));
 | 
					    TEST_ASSERT_EQUAL(before_heap, heap_caps_get_free_size(HEAP_CAPS));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Test self deleting no affinity task is not removed by idle task of other core before context switch */
 | 
					    /* Test self deleting no affinity task is not removed by idle task of other core before context switch */
 | 
				
			||||||
    for(int i = 0; i < DELAY_US_ITERATIONS; i+= 10){
 | 
					    for (int i = 0; i < DELAY_US_ITERATIONS; i += 10) {
 | 
				
			||||||
        vTaskDelay(1);                          //Sync to next tick interrupt
 | 
					        vTaskDelay(1);                          //Sync to next tick interrupt
 | 
				
			||||||
        xTaskCreatePinnedToCore(tsk_self_del_us_delay, "delay", 1024, (void *)i, UNITY_FREERTOS_PRIORITY - 1, NULL, tskNO_AFFINITY);
 | 
					        xTaskCreatePinnedToCore(tsk_self_del_us_delay, "delay", 1024, (void *)i, UNITY_FREERTOS_PRIORITY - 1, NULL, tskNO_AFFINITY);
 | 
				
			||||||
        esp_rom_delay_us(10);                       //Busy wait to ensure no affinity task runs on opposite core
 | 
					        esp_rom_delay_us(10);                       //Busy wait to ensure no affinity task runs on opposite core
 | 
				
			||||||
@@ -90,7 +89,6 @@ TEST_CASE("FreeRTOS Delete Tasks", "[freertos]")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
    SemaphoreHandle_t sem;
 | 
					    SemaphoreHandle_t sem;
 | 
				
			||||||
    volatile bool deleted; // Check the deleted task doesn't keep running after being deleted
 | 
					    volatile bool deleted; // Check the deleted task doesn't keep running after being deleted
 | 
				
			||||||
@@ -130,10 +128,10 @@ TEST_CASE("FreeRTOS Delete Blocked Tasks", "[freertos]")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
       (1000 iterations takes about 9 seconds on ESP32 dual core)
 | 
					       (1000 iterations takes about 9 seconds on ESP32 dual core)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    for(unsigned iter = 0; iter < 1000; iter++) {
 | 
					    for (unsigned iter = 0; iter < 1000; iter++) {
 | 
				
			||||||
        // Create everything
 | 
					        // Create everything
 | 
				
			||||||
        SemaphoreHandle_t sem = xSemaphoreCreateMutex();
 | 
					        SemaphoreHandle_t sem = xSemaphoreCreateMutex();
 | 
				
			||||||
        for(unsigned i = 0; i < portNUM_PROCESSORS + 1; i++) {
 | 
					        for (unsigned i = 0; i < portNUM_PROCESSORS + 1; i++) {
 | 
				
			||||||
            params[i].deleted = false;
 | 
					            params[i].deleted = false;
 | 
				
			||||||
            params[i].sem = sem;
 | 
					            params[i].sem = sem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -145,7 +143,7 @@ TEST_CASE("FreeRTOS Delete Blocked Tasks", "[freertos]")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        vTaskDelay(5); // Let the tasks juggle the mutex for a bit
 | 
					        vTaskDelay(5); // Let the tasks juggle the mutex for a bit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for(unsigned i = 0; i < portNUM_PROCESSORS + 1; i++) {
 | 
					        for (unsigned i = 0; i < portNUM_PROCESSORS + 1; i++) {
 | 
				
			||||||
            vTaskDelete(blocking_tasks[i]);
 | 
					            vTaskDelete(blocking_tasks[i]);
 | 
				
			||||||
            params[i].deleted = true;
 | 
					            params[i].deleted = true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -62,7 +62,7 @@ void task_test_trace_utilities(void *arg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TEST_CASE("Test freertos trace facility functions", "[freertos]")
 | 
					TEST_CASE("Test freertos trace facility functions", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    for(int i = 0; i < NO_OF_CORES; i++){
 | 
					    for (int i = 0; i < NO_OF_CORES; i++) {
 | 
				
			||||||
        test_queues[i] = xSemaphoreCreateBinary();   //Create a queue as binary semaphore for each core
 | 
					        test_queues[i] = xSemaphoreCreateBinary();   //Create a queue as binary semaphore for each core
 | 
				
			||||||
        xTaskCreatePinnedToCore(task_test_trace_utilities, "Test Task", 4096, (void *)(0x0F << i), TSK_PRIORITY, &task_handles[i], i);
 | 
					        xTaskCreatePinnedToCore(task_test_trace_utilities, "Test Task", 4096, (void *)(0x0F << i), TSK_PRIORITY, &task_handles[i], i);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -70,14 +70,14 @@ TEST_CASE("Test freertos trace facility functions", "[freertos]")
 | 
				
			|||||||
    vTaskDelay(10);
 | 
					    vTaskDelay(10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Start the tasks
 | 
					    //Start the tasks
 | 
				
			||||||
    for(int i = NO_OF_CORES - 1; i >= 0; i--){
 | 
					    for (int i = NO_OF_CORES - 1; i >= 0; i--) {
 | 
				
			||||||
        xSemaphoreGive(test_queues[i]);
 | 
					        xSemaphoreGive(test_queues[i]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vTaskDelay(10); //Small delay to ensure semaphores are taken
 | 
					    vTaskDelay(10); //Small delay to ensure semaphores are taken
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Wait for done
 | 
					    //Wait for done
 | 
				
			||||||
    for(int i = 0; i < NO_OF_CORES; i++){
 | 
					    for (int i = 0; i < NO_OF_CORES; i++) {
 | 
				
			||||||
        xSemaphoreTake(test_queues[i], portMAX_DELAY);
 | 
					        xSemaphoreTake(test_queues[i], portMAX_DELAY);
 | 
				
			||||||
        vSemaphoreDelete(test_queues[i]);
 | 
					        vSemaphoreDelete(test_queues[i]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -85,7 +85,6 @@ TEST_CASE("Test freertos trace facility functions", "[freertos]")
 | 
				
			|||||||
    vTaskDelay(10);     //Give time for idle task to clean up
 | 
					    vTaskDelay(10);     //Give time for idle task to clean up
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
#define MAX_TASKS           15
 | 
					#define MAX_TASKS           15
 | 
				
			||||||
#define TASKS_TO_CREATE     5
 | 
					#define TASKS_TO_CREATE     5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -94,7 +93,7 @@ static TaskStatus_t *tsk_status_array;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void created_task(void* arg)
 | 
					void created_task(void* arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    while(1){
 | 
					    while (1) {
 | 
				
			||||||
        vTaskDelay(100);
 | 
					        vTaskDelay(100);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -102,7 +101,7 @@ void created_task(void* arg)
 | 
				
			|||||||
TEST_CASE("Test freertos uxTaskGetSystemState", "[freertos]")
 | 
					TEST_CASE("Test freertos uxTaskGetSystemState", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    tsk_status_array = calloc(MAX_TASKS, sizeof(TaskStatus_t));
 | 
					    tsk_status_array = calloc(MAX_TASKS, sizeof(TaskStatus_t));
 | 
				
			||||||
    for(int i = 0; i < TASKS_TO_CREATE; i++){
 | 
					    for (int i = 0; i < TASKS_TO_CREATE; i++) {
 | 
				
			||||||
        xTaskCreatePinnedToCore(created_task, "Created Task", 1024, NULL, TSK_PRIORITY, &created_handles[i], 0);
 | 
					        xTaskCreatePinnedToCore(created_task, "Created Task", 1024, NULL, TSK_PRIORITY, &created_handles[i], 0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -112,15 +111,15 @@ TEST_CASE("Test freertos uxTaskGetSystemState", "[freertos]")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    //Check if get system state has got all created tasks
 | 
					    //Check if get system state has got all created tasks
 | 
				
			||||||
    bool not_found = false;
 | 
					    bool not_found = false;
 | 
				
			||||||
    for(int i = 0; i < TASKS_TO_CREATE; i++){
 | 
					    for (int i = 0; i < TASKS_TO_CREATE; i++) {
 | 
				
			||||||
        bool found = false;
 | 
					        bool found = false;
 | 
				
			||||||
        for(int j = 0; j < MAX_TASKS; j++){
 | 
					        for (int j = 0; j < MAX_TASKS; j++) {
 | 
				
			||||||
            if(tsk_status_array[j].xHandle == created_handles[i]){
 | 
					            if (tsk_status_array[j].xHandle == created_handles[i]) {
 | 
				
			||||||
                found = true;
 | 
					                found = true;
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if(!found){
 | 
					        if (!found) {
 | 
				
			||||||
            not_found = true;
 | 
					            not_found = true;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -128,7 +127,7 @@ TEST_CASE("Test freertos uxTaskGetSystemState", "[freertos]")
 | 
				
			|||||||
    TEST_ASSERT(not_found == false);
 | 
					    TEST_ASSERT(not_found == false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Cleanup
 | 
					    //Cleanup
 | 
				
			||||||
    for(int i = 0; i < TASKS_TO_CREATE; i++){
 | 
					    for (int i = 0; i < TASKS_TO_CREATE; i++) {
 | 
				
			||||||
        vTaskDelete(created_handles[i]);
 | 
					        vTaskDelete(created_handles[i]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    free(tsk_status_array);
 | 
					    free(tsk_status_array);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -31,7 +31,6 @@ static volatile bool flag;
 | 
				
			|||||||
#define MAX_YIELD_COUNT 17000
 | 
					#define MAX_YIELD_COUNT 17000
 | 
				
			||||||
#endif // CONFIG_FREERTOS_SMP
 | 
					#endif // CONFIG_FREERTOS_SMP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Task:
 | 
					/* Task:
 | 
				
			||||||
   - Waits for 'trigger' variable to be set
 | 
					   - Waits for 'trigger' variable to be set
 | 
				
			||||||
   - Reads the cycle count on this CPU
 | 
					   - Reads the cycle count on this CPU
 | 
				
			||||||
@@ -43,7 +42,7 @@ static void task_send_to_queue(void *param)
 | 
				
			|||||||
    QueueHandle_t queue = (QueueHandle_t) param;
 | 
					    QueueHandle_t queue = (QueueHandle_t) param;
 | 
				
			||||||
    uint32_t ccount;
 | 
					    uint32_t ccount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while(!trigger) {}
 | 
					    while (!trigger) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ccount = esp_cpu_get_cycle_count();
 | 
					    ccount = esp_cpu_get_cycle_count();
 | 
				
			||||||
    flag = true;
 | 
					    flag = true;
 | 
				
			||||||
@@ -53,7 +52,7 @@ static void task_send_to_queue(void *param)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
       The task runs until terminated by the main task.
 | 
					       The task runs until terminated by the main task.
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
    while(1) {}
 | 
					    while (1) {}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_CASE("Yield from lower priority task, same CPU", "[freertos]")
 | 
					TEST_CASE("Yield from lower priority task, same CPU", "[freertos]")
 | 
				
			||||||
@@ -73,9 +72,9 @@ TEST_CASE("Yield from lower priority task, same CPU", "[freertos]")
 | 
				
			|||||||
        trigger = true;
 | 
					        trigger = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        uint32_t yield_ccount, now_ccount, delta;
 | 
					        uint32_t yield_ccount, now_ccount, delta;
 | 
				
			||||||
        TEST_ASSERT( xQueueReceive(queue, &yield_ccount, 100 / portTICK_PERIOD_MS) );
 | 
					        TEST_ASSERT(xQueueReceive(queue, &yield_ccount, 100 / portTICK_PERIOD_MS));
 | 
				
			||||||
        now_ccount = esp_cpu_get_cycle_count();
 | 
					        now_ccount = esp_cpu_get_cycle_count();
 | 
				
			||||||
        TEST_ASSERT( flag );
 | 
					        TEST_ASSERT(flag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        delta = now_ccount - yield_ccount;
 | 
					        delta = now_ccount - yield_ccount;
 | 
				
			||||||
        printf("Yielding from lower priority task took %"PRIu32" cycles\n", delta);
 | 
					        printf("Yielding from lower priority task took %"PRIu32" cycles\n", delta);
 | 
				
			||||||
@@ -86,7 +85,6 @@ TEST_CASE("Yield from lower priority task, same CPU", "[freertos]")
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
#if (portNUM_PROCESSORS == 2) && !CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
 | 
					#if (portNUM_PROCESSORS == 2) && !CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH
 | 
				
			||||||
TEST_CASE("Yield from lower priority task, other CPU", "[freertos]")
 | 
					TEST_CASE("Yield from lower priority task, other CPU", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -110,9 +108,9 @@ TEST_CASE("Yield from lower priority task, other CPU", "[freertos]")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // yield_ccount is not useful in this test as it's the other core's CCOUNT
 | 
					        // yield_ccount is not useful in this test as it's the other core's CCOUNT
 | 
				
			||||||
        // so we use trigger_ccount instead
 | 
					        // so we use trigger_ccount instead
 | 
				
			||||||
        TEST_ASSERT( xQueueReceive(queue, &yield_ccount, 100 / portTICK_PERIOD_MS) );
 | 
					        TEST_ASSERT(xQueueReceive(queue, &yield_ccount, 100 / portTICK_PERIOD_MS));
 | 
				
			||||||
        now_ccount = esp_cpu_get_cycle_count();
 | 
					        now_ccount = esp_cpu_get_cycle_count();
 | 
				
			||||||
        TEST_ASSERT( flag );
 | 
					        TEST_ASSERT(flag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        delta = now_ccount - trigger_ccount;
 | 
					        delta = now_ccount - trigger_ccount;
 | 
				
			||||||
        printf("Yielding from task on other core took %"PRIu32" cycles\n", delta);
 | 
					        printf("Yielding from task on other core took %"PRIu32" cycles\n", delta);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -64,11 +64,11 @@ static void test_vTaskDelay(void *arg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        /* Check that elapsed ticks and ref clock is accurate. We allow TEST_VTASKDELAY_DELTA_TICKS of error in case
 | 
					        /* Check that elapsed ticks and ref clock is accurate. We allow TEST_VTASKDELAY_DELTA_TICKS of error in case
 | 
				
			||||||
         * vTaskDelay() or portTEST_REF_CLOCK_GET_TIME() last long enough to cross a tick boundary */
 | 
					         * vTaskDelay() or portTEST_REF_CLOCK_GET_TIME() last long enough to cross a tick boundary */
 | 
				
			||||||
        #if ( configUSE_16_BIT_TICKS == 1 )
 | 
					#if ( configUSE_16_BIT_TICKS == 1 )
 | 
				
			||||||
            TEST_ASSERT_UINT16_WITHIN(TEST_VTASKDELAY_DELTA_TICKS, TEST_VTASKDELAY_TICKS, tick_end - tick_start);
 | 
					        TEST_ASSERT_UINT16_WITHIN(TEST_VTASKDELAY_DELTA_TICKS, TEST_VTASKDELAY_TICKS, tick_end - tick_start);
 | 
				
			||||||
        #else
 | 
					#else
 | 
				
			||||||
            TEST_ASSERT_UINT32_WITHIN(TEST_VTASKDELAY_DELTA_TICKS, TEST_VTASKDELAY_TICKS, tick_end - tick_start);
 | 
					        TEST_ASSERT_UINT32_WITHIN(TEST_VTASKDELAY_DELTA_TICKS, TEST_VTASKDELAY_TICKS, tick_end - tick_start);
 | 
				
			||||||
        #endif
 | 
					#endif
 | 
				
			||||||
        TEST_ASSERT_UINT32_WITHIN(portTEST_TICKS_TO_REF_CLOCK(TEST_VTASKDELAY_DELTA_TICKS),
 | 
					        TEST_ASSERT_UINT32_WITHIN(portTEST_TICKS_TO_REF_CLOCK(TEST_VTASKDELAY_DELTA_TICKS),
 | 
				
			||||||
                                  portTEST_TICKS_TO_REF_CLOCK(TEST_VTASKDELAY_TICKS),
 | 
					                                  portTEST_TICKS_TO_REF_CLOCK(TEST_VTASKDELAY_TICKS),
 | 
				
			||||||
                                  ref_clock_end - ref_clock_start);
 | 
					                                  ref_clock_end - ref_clock_start);
 | 
				
			||||||
@@ -79,12 +79,12 @@ TEST_CASE("Tasks: Test vTaskDelay", "[freertos]")
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    portTEST_REF_CLOCK_INIT();
 | 
					    portTEST_REF_CLOCK_INIT();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #if ( configNUM_CORES > 1 )
 | 
					#if ( configNUM_CORES > 1 )
 | 
				
			||||||
        vTestOnAllCores(test_vTaskDelay, NULL, configTEST_DEFAULT_STACK_SIZE, configTEST_UNITY_TASK_PRIORITY - 1);
 | 
					    vTestOnAllCores(test_vTaskDelay, NULL, configTEST_DEFAULT_STACK_SIZE, configTEST_UNITY_TASK_PRIORITY - 1);
 | 
				
			||||||
    #else
 | 
					#else
 | 
				
			||||||
        /* Test vTaskDelay directly on the current core */
 | 
					    /* Test vTaskDelay directly on the current core */
 | 
				
			||||||
        test_vTaskDelay(NULL);
 | 
					    test_vTaskDelay(NULL);
 | 
				
			||||||
    #endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    portTEST_REF_CLOCK_DEINIT();
 | 
					    portTEST_REF_CLOCK_DEINIT();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -144,16 +144,15 @@ static void test_vTaskDelayUntil(void *arg)
 | 
				
			|||||||
        tick_end = xTaskGetTickCount();
 | 
					        tick_end = xTaskGetTickCount();
 | 
				
			||||||
        ref_clock_end = portTEST_REF_CLOCK_GET_TIME();
 | 
					        ref_clock_end = portTEST_REF_CLOCK_GET_TIME();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        /* Check that elapsed ticks and ref clock is accurate. We allow TEST_VTASKDELAYUNTIL_DELTA_TICKS of error in
 | 
					        /* Check that elapsed ticks and ref clock is accurate. We allow TEST_VTASKDELAYUNTIL_DELTA_TICKS of error in
 | 
				
			||||||
         * case vTaskDelayUntil() or portTEST_REF_CLOCK_GET_TIME() last long enough to cross a tick boundary */
 | 
					         * case vTaskDelayUntil() or portTEST_REF_CLOCK_GET_TIME() last long enough to cross a tick boundary */
 | 
				
			||||||
        #if ( configUSE_16_BIT_TICKS == 1 )
 | 
					#if ( configUSE_16_BIT_TICKS == 1 )
 | 
				
			||||||
            TEST_ASSERT_UINT16_WITHIN(TEST_VTASKDELAYUNTIL_DELTA_TICKS, TEST_VTASKDELAYUNTIL_TICKS, tick_end - tick_start);
 | 
					        TEST_ASSERT_UINT16_WITHIN(TEST_VTASKDELAYUNTIL_DELTA_TICKS, TEST_VTASKDELAYUNTIL_TICKS, tick_end - tick_start);
 | 
				
			||||||
            TEST_ASSERT_UINT16_WITHIN(TEST_VTASKDELAYUNTIL_DELTA_TICKS, tick_end, last_wake_tick);
 | 
					        TEST_ASSERT_UINT16_WITHIN(TEST_VTASKDELAYUNTIL_DELTA_TICKS, tick_end, last_wake_tick);
 | 
				
			||||||
        #else
 | 
					#else
 | 
				
			||||||
            TEST_ASSERT_UINT32_WITHIN(TEST_VTASKDELAYUNTIL_DELTA_TICKS, TEST_VTASKDELAYUNTIL_TICKS, tick_end - tick_start);
 | 
					        TEST_ASSERT_UINT32_WITHIN(TEST_VTASKDELAYUNTIL_DELTA_TICKS, TEST_VTASKDELAYUNTIL_TICKS, tick_end - tick_start);
 | 
				
			||||||
            TEST_ASSERT_UINT32_WITHIN(TEST_VTASKDELAYUNTIL_DELTA_TICKS, tick_end, last_wake_tick);
 | 
					        TEST_ASSERT_UINT32_WITHIN(TEST_VTASKDELAYUNTIL_DELTA_TICKS, tick_end, last_wake_tick);
 | 
				
			||||||
        #endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* Check that the elapsed ref clock time is accurate. We allow TEST_VTASKDELAYUNTIL_DELTA_TICKS time worth of
 | 
					        /* Check that the elapsed ref clock time is accurate. We allow TEST_VTASKDELAYUNTIL_DELTA_TICKS time worth of
 | 
				
			||||||
         * error to account for the execution time of the ref clock functions. */
 | 
					         * error to account for the execution time of the ref clock functions. */
 | 
				
			||||||
@@ -167,12 +166,12 @@ TEST_CASE("Tasks: Test vTaskDelayUntil", "[freertos]")
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    portTEST_REF_CLOCK_INIT();
 | 
					    portTEST_REF_CLOCK_INIT();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #if ( configNUM_CORES > 1 )
 | 
					#if ( configNUM_CORES > 1 )
 | 
				
			||||||
        vTestOnAllCores(test_vTaskDelayUntil, NULL, configTEST_DEFAULT_STACK_SIZE, configTEST_UNITY_TASK_PRIORITY - 1);
 | 
					    vTestOnAllCores(test_vTaskDelayUntil, NULL, configTEST_DEFAULT_STACK_SIZE, configTEST_UNITY_TASK_PRIORITY - 1);
 | 
				
			||||||
    #else
 | 
					#else
 | 
				
			||||||
        /* Test vTaskDelay directly on the current core */
 | 
					    /* Test vTaskDelay directly on the current core */
 | 
				
			||||||
        test_vTaskDelayUntil(NULL);
 | 
					    test_vTaskDelayUntil(NULL);
 | 
				
			||||||
    #endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    portTEST_REF_CLOCK_DEINIT();
 | 
					    portTEST_REF_CLOCK_DEINIT();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -17,7 +17,6 @@
 | 
				
			|||||||
#include "unity.h"
 | 
					#include "unity.h"
 | 
				
			||||||
#include "test_utils.h"
 | 
					#include "test_utils.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
static void counter_task(void *param)
 | 
					static void counter_task(void *param)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    volatile uint32_t *counter = (volatile uint32_t *)param;
 | 
					    volatile uint32_t *counter = (volatile uint32_t *)param;
 | 
				
			||||||
@@ -26,7 +25,6 @@ static void counter_task(void *param)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
TEST_CASE("Get/Set Priorities", "[freertos]")
 | 
					TEST_CASE("Get/Set Priorities", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /* Two tasks per processor */
 | 
					    /* Two tasks per processor */
 | 
				
			||||||
@@ -38,7 +36,7 @@ TEST_CASE("Get/Set Priorities", "[freertos]")
 | 
				
			|||||||
    /* create a matrix of counter tasks on each core */
 | 
					    /* create a matrix of counter tasks on each core */
 | 
				
			||||||
    for (int cpu = 0; cpu < portNUM_PROCESSORS; cpu++) {
 | 
					    for (int cpu = 0; cpu < portNUM_PROCESSORS; cpu++) {
 | 
				
			||||||
        for (int task = 0; task < 2; task++) {
 | 
					        for (int task = 0; task < 2; task++) {
 | 
				
			||||||
            xTaskCreatePinnedToCore(counter_task, "count", 2048, (void *)&(counters[cpu][task]), UNITY_FREERTOS_PRIORITY - task, &(tasks[cpu][task]), cpu);
 | 
					            xTaskCreatePinnedToCore(counter_task, "count", 2048, (void *) & (counters[cpu][task]), UNITY_FREERTOS_PRIORITY - task, &(tasks[cpu][task]), cpu);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -65,7 +63,7 @@ TEST_CASE("Get/Set Priorities", "[freertos]")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* check priorities have swapped... */
 | 
					    /* check priorities have swapped... */
 | 
				
			||||||
    for (int cpu = 0; cpu < portNUM_PROCESSORS; cpu++) {
 | 
					    for (int cpu = 0; cpu < portNUM_PROCESSORS; cpu++) {
 | 
				
			||||||
        TEST_ASSERT_EQUAL(UNITY_FREERTOS_PRIORITY -1, uxTaskPriorityGet(tasks[cpu][0]));
 | 
					        TEST_ASSERT_EQUAL(UNITY_FREERTOS_PRIORITY - 1, uxTaskPriorityGet(tasks[cpu][0]));
 | 
				
			||||||
        TEST_ASSERT_EQUAL(UNITY_FREERTOS_PRIORITY, uxTaskPriorityGet(tasks[cpu][1]));
 | 
					        TEST_ASSERT_EQUAL(UNITY_FREERTOS_PRIORITY, uxTaskPriorityGet(tasks[cpu][1]));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,7 +69,6 @@ static void test_suspend_resume(int target_core)
 | 
				
			|||||||
    vTaskDelete(counter_task);
 | 
					    vTaskDelete(counter_task);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
TEST_CASE("Suspend/resume task on same core", "[freertos]")
 | 
					TEST_CASE("Suspend/resume task on same core", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    test_suspend_resume(UNITY_FREERTOS_CPU);
 | 
					    test_suspend_resume(UNITY_FREERTOS_CPU);
 | 
				
			||||||
@@ -119,7 +118,6 @@ TEST_CASE("Suspend the current running task", "[freertos]")
 | 
				
			|||||||
    TEST_ASSERT_TRUE(resumed);
 | 
					    TEST_ASSERT_TRUE(resumed);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
static volatile bool timer_isr_fired;
 | 
					static volatile bool timer_isr_fired;
 | 
				
			||||||
static gptimer_handle_t gptimer = NULL;
 | 
					static gptimer_handle_t gptimer = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -146,7 +144,6 @@ static IRAM_ATTR void task_suspend_self_with_timer(void *vp_resumed)
 | 
				
			|||||||
    vTaskDelete(NULL);
 | 
					    vTaskDelete(NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Create a task which suspends itself, then resume it from a timer
 | 
					/* Create a task which suspends itself, then resume it from a timer
 | 
				
			||||||
 * interrupt. */
 | 
					 * interrupt. */
 | 
				
			||||||
static void test_resume_task_from_isr(int target_core)
 | 
					static void test_resume_task_from_isr(int target_core)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -637,7 +637,6 @@ TEST_CASE("Test xTaskResumeAll resumes pended tasks", "[freertos]")
 | 
				
			|||||||
    vTaskDelay(10);
 | 
					    vTaskDelay(10);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/* ---------------------------------------------------------------------------------------------------------------------
 | 
					/* ---------------------------------------------------------------------------------------------------------------------
 | 
				
			||||||
Test xTaskSuspendAll on both cores pends all tasks and xTaskResumeAll on both cores resumes all tasks
 | 
					Test xTaskSuspendAll on both cores pends all tasks and xTaskResumeAll on both cores resumes all tasks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -790,7 +789,7 @@ void test_blocked_task(void *arg)
 | 
				
			|||||||
    has_run = false;
 | 
					    has_run = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Got to blocked state
 | 
					    // Got to blocked state
 | 
				
			||||||
    vTaskDelay( TEST_BLOCKED_TASK_DELAY_MS / portTICK_PERIOD_MS );
 | 
					    vTaskDelay(TEST_BLOCKED_TASK_DELAY_MS / portTICK_PERIOD_MS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Mark when this task runs
 | 
					    // Mark when this task runs
 | 
				
			||||||
    has_run = true;
 | 
					    has_run = true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -16,7 +16,7 @@
 | 
				
			|||||||
static void timer_callback(TimerHandle_t timer)
 | 
					static void timer_callback(TimerHandle_t timer)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    volatile int *count;
 | 
					    volatile int *count;
 | 
				
			||||||
    count = (volatile int *)pvTimerGetTimerID( timer );
 | 
					    count = (volatile int *)pvTimerGetTimerID(timer);
 | 
				
			||||||
    (*count)++;
 | 
					    (*count)++;
 | 
				
			||||||
    printf("Callback timer %p count %p = %d\n", timer, count, *count);
 | 
					    printf("Callback timer %p count %p = %d\n", timer, count, *count);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -30,7 +30,7 @@ TEST_CASE("Oneshot FreeRTOS timers", "[freertos]")
 | 
				
			|||||||
    TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(oneshot));
 | 
					    TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(oneshot));
 | 
				
			||||||
    TEST_ASSERT_EQUAL(0, count);
 | 
					    TEST_ASSERT_EQUAL(0, count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TEST_ASSERT( xTimerStart(oneshot, 1) );
 | 
					    TEST_ASSERT(xTimerStart(oneshot, 1));
 | 
				
			||||||
    vTaskDelay(2); /* give the timer task a chance to process the message */
 | 
					    vTaskDelay(2); /* give the timer task a chance to process the message */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdTRUE, xTimerIsTimerActive(oneshot));
 | 
					    TEST_ASSERT_EQUAL(pdTRUE, xTimerIsTimerActive(oneshot));
 | 
				
			||||||
@@ -41,20 +41,19 @@ TEST_CASE("Oneshot FreeRTOS timers", "[freertos]")
 | 
				
			|||||||
    TEST_ASSERT_EQUAL(1, count);
 | 
					    TEST_ASSERT_EQUAL(1, count);
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(oneshot));
 | 
					    TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(oneshot));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TEST_ASSERT( xTimerDelete(oneshot, 1) );
 | 
					    TEST_ASSERT(xTimerDelete(oneshot, 1));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
TEST_CASE("Recurring FreeRTOS timers", "[freertos]")
 | 
					TEST_CASE("Recurring FreeRTOS timers", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    volatile int count = 0;
 | 
					    volatile int count = 0;
 | 
				
			||||||
    TimerHandle_t recurring = xTimerCreate("oneshot", 100 / portTICK_PERIOD_MS, pdTRUE,
 | 
					    TimerHandle_t recurring = xTimerCreate("oneshot", 100 / portTICK_PERIOD_MS, pdTRUE,
 | 
				
			||||||
                                          (void *)&count, timer_callback);
 | 
					                                           (void *)&count, timer_callback);
 | 
				
			||||||
    TEST_ASSERT(recurring);
 | 
					    TEST_ASSERT(recurring);
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(recurring));
 | 
					    TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(recurring));
 | 
				
			||||||
    TEST_ASSERT_EQUAL(0, count);
 | 
					    TEST_ASSERT_EQUAL(0, count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TEST_ASSERT( xTimerStart(recurring, 1) );
 | 
					    TEST_ASSERT(xTimerStart(recurring, 1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vTaskDelay(2); // let timer task process the queue
 | 
					    vTaskDelay(2); // let timer task process the queue
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdTRUE, xTimerIsTimerActive(recurring));
 | 
					    TEST_ASSERT_EQUAL(pdTRUE, xTimerIsTimerActive(recurring));
 | 
				
			||||||
@@ -65,7 +64,7 @@ TEST_CASE("Recurring FreeRTOS timers", "[freertos]")
 | 
				
			|||||||
    TEST_ASSERT_EQUAL(2, count);
 | 
					    TEST_ASSERT_EQUAL(2, count);
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdTRUE, xTimerIsTimerActive(recurring));
 | 
					    TEST_ASSERT_EQUAL(pdTRUE, xTimerIsTimerActive(recurring));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TEST_ASSERT( xTimerStop(recurring, 1) );
 | 
					    TEST_ASSERT(xTimerStop(recurring, 1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TEST_ASSERT_EQUAL(2, count);
 | 
					    TEST_ASSERT_EQUAL(2, count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -73,7 +72,7 @@ TEST_CASE("Recurring FreeRTOS timers", "[freertos]")
 | 
				
			|||||||
    TEST_ASSERT_EQUAL(2, count); // hasn't gone up
 | 
					    TEST_ASSERT_EQUAL(2, count); // hasn't gone up
 | 
				
			||||||
    TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(recurring));
 | 
					    TEST_ASSERT_EQUAL(pdFALSE, xTimerIsTimerActive(recurring));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TEST_ASSERT( xTimerDelete(recurring, 1) );
 | 
					    TEST_ASSERT(xTimerDelete(recurring, 1));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_CASE("Static timer creation", "[freertos]")
 | 
					TEST_CASE("Static timer creation", "[freertos]")
 | 
				
			||||||
@@ -83,10 +82,10 @@ TEST_CASE("Static timer creation", "[freertos]")
 | 
				
			|||||||
    volatile int count = 0;
 | 
					    volatile int count = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    created_timer = xTimerCreateStatic("oneshot", 100 / portTICK_PERIOD_MS,
 | 
					    created_timer = xTimerCreateStatic("oneshot", 100 / portTICK_PERIOD_MS,
 | 
				
			||||||
                                    pdTRUE,
 | 
					                                       pdTRUE,
 | 
				
			||||||
                                    (void *)&count,
 | 
					                                       (void *)&count,
 | 
				
			||||||
                                    timer_callback,
 | 
					                                       timer_callback,
 | 
				
			||||||
                                    &static_timer);
 | 
					                                       &static_timer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TEST_ASSERT_NOT_NULL(created_timer);
 | 
					    TEST_ASSERT_NOT_NULL(created_timer);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -202,7 +202,7 @@ static void IRAM_ATTR tick_hook(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void suspend_task(void *arg)
 | 
					static void suspend_task(void *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    TaskHandle_t main_task_hdl = ( TaskHandle_t )arg;
 | 
					    TaskHandle_t main_task_hdl = (TaskHandle_t)arg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Fetch the current core ID */
 | 
					    /* Fetch the current core ID */
 | 
				
			||||||
    BaseType_t xCoreID = portGET_CORE_ID();
 | 
					    BaseType_t xCoreID = portGET_CORE_ID();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,8 +42,6 @@ static void tskTestRand(void *pvParameters)
 | 
				
			|||||||
    vTaskDelete(NULL);
 | 
					    vTaskDelete(NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// TODO: split this thing into separate orthogonal tests
 | 
					// TODO: split this thing into separate orthogonal tests
 | 
				
			||||||
TEST_CASE("Test for per-task non-reentrant tasks", "[freertos]")
 | 
					TEST_CASE("Test for per-task non-reentrant tasks", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -25,10 +25,11 @@ typedef struct {
 | 
				
			|||||||
    TaskHandle_t t1_handle;
 | 
					    TaskHandle_t t1_handle;
 | 
				
			||||||
} test_context_t;
 | 
					} test_context_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_task_1(void *arg) {
 | 
					static void test_task_1(void *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
    test_context_t *context = (test_context_t *)arg;
 | 
					    test_context_t *context = (test_context_t *)arg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for( ;; ) {
 | 
					    for (;;) {
 | 
				
			||||||
        context->before_sched = esp_cpu_get_cycle_count();
 | 
					        context->before_sched = esp_cpu_get_cycle_count();
 | 
				
			||||||
        vPortYield();
 | 
					        vPortYield();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -36,7 +37,8 @@ static void test_task_1(void *arg) {
 | 
				
			|||||||
    vTaskDelete(NULL);
 | 
					    vTaskDelete(NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_task_2(void *arg) {
 | 
					static void test_task_2(void *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
    test_context_t *context = (test_context_t *)arg;
 | 
					    test_context_t *context = (test_context_t *)arg;
 | 
				
			||||||
    uint64_t accumulator = 0;
 | 
					    uint64_t accumulator = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,7 +46,7 @@ static void test_task_2(void *arg) {
 | 
				
			|||||||
    vTaskPrioritySet(context->t1_handle, CONFIG_UNITY_FREERTOS_PRIORITY + 1);
 | 
					    vTaskPrioritySet(context->t1_handle, CONFIG_UNITY_FREERTOS_PRIORITY + 1);
 | 
				
			||||||
    vPortYield();
 | 
					    vPortYield();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
 | 
					    for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
 | 
				
			||||||
        accumulator += (esp_cpu_get_cycle_count() - context->before_sched);
 | 
					        accumulator += (esp_cpu_get_cycle_count() - context->before_sched);
 | 
				
			||||||
        vPortYield();
 | 
					        vPortYield();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -63,14 +65,14 @@ TEST_CASE("scheduling time test", "[freertos]")
 | 
				
			|||||||
    TEST_ASSERT(context.end_sema != NULL);
 | 
					    TEST_ASSERT(context.end_sema != NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !CONFIG_FREERTOS_UNICORE
 | 
					#if !CONFIG_FREERTOS_UNICORE
 | 
				
			||||||
    xTaskCreatePinnedToCore(test_task_1, "test1" , 4096, &context, 1, &context.t1_handle,1);
 | 
					    xTaskCreatePinnedToCore(test_task_1, "test1", 4096, &context, 1, &context.t1_handle, 1);
 | 
				
			||||||
    xTaskCreatePinnedToCore(test_task_2, "test2" , 4096, &context, 1, NULL,1);
 | 
					    xTaskCreatePinnedToCore(test_task_2, "test2", 4096, &context, 1, NULL, 1);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    xTaskCreatePinnedToCore(test_task_1, "test1" , 4096, &context, CONFIG_UNITY_FREERTOS_PRIORITY - 1, &context.t1_handle,0);
 | 
					    xTaskCreatePinnedToCore(test_task_1, "test1", 4096, &context, CONFIG_UNITY_FREERTOS_PRIORITY - 1, &context.t1_handle, 0);
 | 
				
			||||||
    xTaskCreatePinnedToCore(test_task_2, "test2" , 4096, &context, CONFIG_UNITY_FREERTOS_PRIORITY - 1, NULL,0);
 | 
					    xTaskCreatePinnedToCore(test_task_2, "test2", 4096, &context, CONFIG_UNITY_FREERTOS_PRIORITY - 1, NULL, 0);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    BaseType_t result = xSemaphoreTake(context.end_sema, portMAX_DELAY);
 | 
					    BaseType_t result = xSemaphoreTake(context.end_sema, portMAX_DELAY);
 | 
				
			||||||
    TEST_ASSERT_EQUAL_HEX32(pdTRUE, result);
 | 
					    TEST_ASSERT_EQUAL_HEX32(pdTRUE, result);
 | 
				
			||||||
    TEST_PERFORMANCE_LESS_THAN(SCHEDULING_TIME , "%"PRIu32" cycles" ,context.cycles_to_sched);
 | 
					    TEST_PERFORMANCE_LESS_THAN(SCHEDULING_TIME, "%"PRIu32" cycles", context.cycles_to_sched);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -38,7 +38,8 @@ static uint32_t cycle_before_exit;
 | 
				
			|||||||
static uint32_t delta_enter_cycles = 0;
 | 
					static uint32_t delta_enter_cycles = 0;
 | 
				
			||||||
static uint32_t delta_exit_cycles = 0;
 | 
					static uint32_t delta_exit_cycles = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void software_isr_using_parameter_vportyield(void *arg) {
 | 
					static void software_isr_using_parameter_vportyield(void *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
    (void)arg;
 | 
					    (void)arg;
 | 
				
			||||||
    BaseType_t yield;
 | 
					    BaseType_t yield;
 | 
				
			||||||
    delta_enter_cycles += esp_cpu_get_cycle_count() - cycle_before_trigger;
 | 
					    delta_enter_cycles += esp_cpu_get_cycle_count() - cycle_before_trigger;
 | 
				
			||||||
@@ -50,7 +51,8 @@ static void software_isr_using_parameter_vportyield(void *arg) {
 | 
				
			|||||||
    cycle_before_exit = esp_cpu_get_cycle_count();
 | 
					    cycle_before_exit = esp_cpu_get_cycle_count();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void software_isr_using_no_argument_vportyield(void *arg) {
 | 
					static void software_isr_using_no_argument_vportyield(void *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
    (void)arg;
 | 
					    (void)arg;
 | 
				
			||||||
    BaseType_t yield;
 | 
					    BaseType_t yield;
 | 
				
			||||||
    delta_enter_cycles += esp_cpu_get_cycle_count() - cycle_before_trigger;
 | 
					    delta_enter_cycles += esp_cpu_get_cycle_count() - cycle_before_trigger;
 | 
				
			||||||
@@ -58,16 +60,17 @@ static void software_isr_using_no_argument_vportyield(void *arg) {
 | 
				
			|||||||
    TEST_CLR_INT_MASK(1 << SW_ISR_LEVEL_1);
 | 
					    TEST_CLR_INT_MASK(1 << SW_ISR_LEVEL_1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xSemaphoreGiveFromISR(sync, &yield);
 | 
					    xSemaphoreGiveFromISR(sync, &yield);
 | 
				
			||||||
    if(yield) {
 | 
					    if (yield) {
 | 
				
			||||||
        portYIELD_FROM_ISR();
 | 
					        portYIELD_FROM_ISR();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    cycle_before_exit = esp_cpu_get_cycle_count();
 | 
					    cycle_before_exit = esp_cpu_get_cycle_count();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void test_task(void *arg) {
 | 
					static void test_task(void *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
    (void) arg;
 | 
					    (void) arg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(int i = 0;i < 10000; i++) {
 | 
					    for (int i = 0; i < 10000; i++) {
 | 
				
			||||||
        cycle_before_trigger = esp_cpu_get_cycle_count();
 | 
					        cycle_before_trigger = esp_cpu_get_cycle_count();
 | 
				
			||||||
        TEST_SET_INT_MASK(1 << SW_ISR_LEVEL_1);
 | 
					        TEST_SET_INT_MASK(1 << SW_ISR_LEVEL_1);
 | 
				
			||||||
        xSemaphoreTake(sync, portMAX_DELAY);
 | 
					        xSemaphoreTake(sync, portMAX_DELAY);
 | 
				
			||||||
@@ -91,12 +94,12 @@ TEST_CASE("isr latency test vport-yield-from-isr with no parameter", "[freertos]
 | 
				
			|||||||
    TEST_ASSERT(sync != NULL);
 | 
					    TEST_ASSERT(sync != NULL);
 | 
				
			||||||
    end_sema = xSemaphoreCreateBinary();
 | 
					    end_sema = xSemaphoreCreateBinary();
 | 
				
			||||||
    TEST_ASSERT(end_sema != NULL);
 | 
					    TEST_ASSERT(end_sema != NULL);
 | 
				
			||||||
    xTaskCreatePinnedToCore(test_task, "tst" , 4096, NULL, configMAX_PRIORITIES - 1, NULL, 0);
 | 
					    xTaskCreatePinnedToCore(test_task, "tst", 4096, NULL, configMAX_PRIORITIES - 1, NULL, 0);
 | 
				
			||||||
    vTaskDelay(100);
 | 
					    vTaskDelay(100);
 | 
				
			||||||
    BaseType_t result = xSemaphoreTake(end_sema, portMAX_DELAY);
 | 
					    BaseType_t result = xSemaphoreTake(end_sema, portMAX_DELAY);
 | 
				
			||||||
    TEST_ASSERT_EQUAL_HEX32(pdTRUE, result);
 | 
					    TEST_ASSERT_EQUAL_HEX32(pdTRUE, result);
 | 
				
			||||||
    TEST_PERFORMANCE_LESS_THAN(ISR_ENTER_CYCLES, "%"PRIu32" cycles" ,delta_enter_cycles);
 | 
					    TEST_PERFORMANCE_LESS_THAN(ISR_ENTER_CYCLES, "%"PRIu32" cycles", delta_enter_cycles);
 | 
				
			||||||
    TEST_PERFORMANCE_LESS_THAN(ISR_EXIT_CYCLES, "%"PRIu32" cycles" ,delta_exit_cycles);
 | 
					    TEST_PERFORMANCE_LESS_THAN(ISR_EXIT_CYCLES, "%"PRIu32" cycles", delta_exit_cycles);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    esp_intr_free(handle);
 | 
					    esp_intr_free(handle);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -111,11 +114,11 @@ TEST_CASE("isr latency test vport-yield-from-isr with parameter", "[freertos][ig
 | 
				
			|||||||
    TEST_ASSERT(sync != NULL);
 | 
					    TEST_ASSERT(sync != NULL);
 | 
				
			||||||
    end_sema = xSemaphoreCreateBinary();
 | 
					    end_sema = xSemaphoreCreateBinary();
 | 
				
			||||||
    TEST_ASSERT(end_sema != NULL);
 | 
					    TEST_ASSERT(end_sema != NULL);
 | 
				
			||||||
    xTaskCreatePinnedToCore(test_task, "tst" , 4096, NULL, configMAX_PRIORITIES - 1, NULL, 0);
 | 
					    xTaskCreatePinnedToCore(test_task, "tst", 4096, NULL, configMAX_PRIORITIES - 1, NULL, 0);
 | 
				
			||||||
    BaseType_t result = xSemaphoreTake(end_sema, portMAX_DELAY);
 | 
					    BaseType_t result = xSemaphoreTake(end_sema, portMAX_DELAY);
 | 
				
			||||||
    TEST_ASSERT_EQUAL_HEX32(pdTRUE, result);
 | 
					    TEST_ASSERT_EQUAL_HEX32(pdTRUE, result);
 | 
				
			||||||
    TEST_PERFORMANCE_LESS_THAN(ISR_ENTER_CYCLES, "%"PRIu32" cycles" ,delta_enter_cycles);
 | 
					    TEST_PERFORMANCE_LESS_THAN(ISR_ENTER_CYCLES, "%"PRIu32" cycles", delta_enter_cycles);
 | 
				
			||||||
    TEST_PERFORMANCE_LESS_THAN(ISR_EXIT_CYCLES, "%"PRIu32" cycles" ,delta_exit_cycles);
 | 
					    TEST_PERFORMANCE_LESS_THAN(ISR_EXIT_CYCLES, "%"PRIu32" cycles", delta_exit_cycles);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    esp_intr_free(handle);
 | 
					    esp_intr_free(handle);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,6 @@
 | 
				
			|||||||
 * when the recursive function returns.
 | 
					 * when the recursive function returns.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/* See test_context_save_clober_func.S */
 | 
					/* See test_context_save_clober_func.S */
 | 
				
			||||||
extern void test_context_save_clober_func(void);
 | 
					extern void test_context_save_clober_func(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -194,7 +194,6 @@ typedef struct {
 | 
				
			|||||||
    TaskHandle_t main;
 | 
					    TaskHandle_t main;
 | 
				
			||||||
} ParamsFPU;
 | 
					} ParamsFPU;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @brief Function performing some simple calculation using several FPU registers.
 | 
					 * @brief Function performing some simple calculation using several FPU registers.
 | 
				
			||||||
 *        The goal is to be preempted by a task that also uses the FPU on the same core.
 | 
					 *        The goal is to be preempted by a task that also uses the FPU on the same core.
 | 
				
			||||||
@@ -206,8 +205,7 @@ void fpu_calculation(void* arg)
 | 
				
			|||||||
    const float init = negative ? -1.f : 1.f;
 | 
					    const float init = negative ? -1.f : 1.f;
 | 
				
			||||||
    float f = init;
 | 
					    float f = init;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(int i = 0; i < 10; i++)
 | 
					    for (int i = 0; i < 10; i++) {
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        /* The following calculation doesn't really have any meaning, we try to use several FPU registers and operations */
 | 
					        /* The following calculation doesn't really have any meaning, we try to use several FPU registers and operations */
 | 
				
			||||||
        float delta = negative ? -1.1f : 1.1f;
 | 
					        float delta = negative ? -1.1f : 1.1f;
 | 
				
			||||||
        for (int i = 0; i < 1000; i++) {
 | 
					        for (int i = 0; i < 1000; i++) {
 | 
				
			||||||
@@ -222,7 +220,7 @@ void fpu_calculation(void* arg)
 | 
				
			|||||||
         * It'll have the sign of the other tasks' `f` value.
 | 
					         * It'll have the sign of the other tasks' `f` value.
 | 
				
			||||||
         * Use assert to make sure the sign is correct. Using TEST_ASSERT_TRUE triggers a stack overflow.
 | 
					         * Use assert to make sure the sign is correct. Using TEST_ASSERT_TRUE triggers a stack overflow.
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        assert( (negative && f < 0.0f) || (!negative && f > 0.0f) );
 | 
					        assert((negative && f < 0.0f) || (!negative && f > 0.0f));
 | 
				
			||||||
        f = init;
 | 
					        f = init;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* Give the hand back to FreeRTOS to avoid any watchdog */
 | 
					        /* Give the hand back to FreeRTOS to avoid any watchdog */
 | 
				
			||||||
@@ -233,8 +231,6 @@ void fpu_calculation(void* arg)
 | 
				
			|||||||
    vTaskDelete(NULL);
 | 
					    vTaskDelete(NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TEST_CASE("FPU: Unsolicited context switch between tasks using FPU", "[freertos]")
 | 
					TEST_CASE("FPU: Unsolicited context switch between tasks using FPU", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /* Create two tasks that are on the same core and use the same FPU */
 | 
					    /* Create two tasks that are on the same core and use the same FPU */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,6 @@ static void other_task(void* arg)
 | 
				
			|||||||
    vTaskDelete(NULL);
 | 
					    vTaskDelete(NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
TEST_CASE("FPU: Context save does not affect stack watermark", "[freertos]")
 | 
					TEST_CASE("FPU: Context save does not affect stack watermark", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    TaskHandle_t pvCreatedTask;
 | 
					    TaskHandle_t pvCreatedTask;
 | 
				
			||||||
@@ -56,13 +55,13 @@ TEST_CASE("FPU: Context save does not affect stack watermark", "[freertos]")
 | 
				
			|||||||
    /* Use the FPU unit, the context will NOT be flushed until another task starts using it */
 | 
					    /* Use the FPU unit, the context will NOT be flushed until another task starts using it */
 | 
				
			||||||
    add_floats(s_float, s_float);
 | 
					    add_floats(s_float, s_float);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xTaskCreatePinnedToCore( other_task,
 | 
					    xTaskCreatePinnedToCore(other_task,
 | 
				
			||||||
                             "OtherTask",
 | 
					                            "OtherTask",
 | 
				
			||||||
                             2048,
 | 
					                            2048,
 | 
				
			||||||
                             (void*) current_handle,
 | 
					                            (void*) current_handle,
 | 
				
			||||||
                             CONFIG_UNITY_FREERTOS_PRIORITY - 1,
 | 
					                            CONFIG_UNITY_FREERTOS_PRIORITY - 1,
 | 
				
			||||||
                             &pvCreatedTask,
 | 
					                            &pvCreatedTask,
 | 
				
			||||||
                             core_id);
 | 
					                            core_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vTaskDelay(10);
 | 
					    vTaskDelay(10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static volatile int in_int_context, int_handled;
 | 
					static volatile int in_int_context, int_handled;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
static void testint(void)
 | 
					static void testint(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    esp_rom_printf("INT!\n");
 | 
					    esp_rom_printf("INT!\n");
 | 
				
			||||||
@@ -34,7 +33,6 @@ static void testint(void)
 | 
				
			|||||||
    int_handled++;
 | 
					    int_handled++;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
static void testthread(void *arg)
 | 
					static void testthread(void *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    in_int_context = 0;
 | 
					    in_int_context = 0;
 | 
				
			||||||
@@ -49,7 +47,6 @@ static void testthread(void *arg)
 | 
				
			|||||||
    vTaskDelete(NULL);
 | 
					    vTaskDelete(NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
TEST_CASE("xPortInIsrContext test", "[freertos]")
 | 
					TEST_CASE("xPortInIsrContext test", "[freertos]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    xTaskCreatePinnedToCore(testthread, "tst", 4096, NULL, 3, NULL, 0);
 | 
					    xTaskCreatePinnedToCore(testthread, "tst", 4096, NULL, 3, NULL, 0);
 | 
				
			||||||
@@ -60,5 +57,4 @@ TEST_CASE("xPortInIsrContext test", "[freertos]")
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -50,12 +50,12 @@ TEST_CASE("portMUX spinlocks (no contention)", "[freertos]")
 | 
				
			|||||||
    BENCHMARK_END("no contention lock");
 | 
					    BENCHMARK_END("no contention lock");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_FREERTOS_UNICORE
 | 
					#ifdef CONFIG_FREERTOS_UNICORE
 | 
				
			||||||
    TEST_PERFORMANCE_LESS_THAN(FREERTOS_SPINLOCK_CYCLES_PER_OP_UNICORE, "%"PRIu32" cycles/op", ((end - start)/REPEAT_OPS));
 | 
					    TEST_PERFORMANCE_LESS_THAN(FREERTOS_SPINLOCK_CYCLES_PER_OP_UNICORE, "%"PRIu32" cycles/op", ((end - start) / REPEAT_OPS));
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#if CONFIG_SPIRAM
 | 
					#if CONFIG_SPIRAM
 | 
				
			||||||
    TEST_PERFORMANCE_LESS_THAN(FREERTOS_SPINLOCK_CYCLES_PER_OP_PSRAM, "%"PRIu32" cycles/op", ((end - start)/REPEAT_OPS));
 | 
					    TEST_PERFORMANCE_LESS_THAN(FREERTOS_SPINLOCK_CYCLES_PER_OP_PSRAM, "%"PRIu32" cycles/op", ((end - start) / REPEAT_OPS));
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    TEST_PERFORMANCE_LESS_THAN(FREERTOS_SPINLOCK_CYCLES_PER_OP, "%"PRIu32" cycles/op", ((end - start)/REPEAT_OPS));
 | 
					    TEST_PERFORMANCE_LESS_THAN(FREERTOS_SPINLOCK_CYCLES_PER_OP, "%"PRIu32" cycles/op", ((end - start) / REPEAT_OPS));
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -107,8 +107,8 @@ TEST_CASE("portMUX cross-core locking", "[freertos]")
 | 
				
			|||||||
    xTaskCreatePinnedToCore(task_shared_value_increment, "INC0", 2048, NULL, UNITY_FREERTOS_PRIORITY + 1, NULL, UNITY_FREERTOS_CPU ? 0 : 1);
 | 
					    xTaskCreatePinnedToCore(task_shared_value_increment, "INC0", 2048, NULL, UNITY_FREERTOS_PRIORITY + 1, NULL, UNITY_FREERTOS_CPU ? 0 : 1);
 | 
				
			||||||
    xTaskCreatePinnedToCore(task_shared_value_increment, "INC1", 2048, NULL, UNITY_FREERTOS_PRIORITY + 1, NULL, UNITY_FREERTOS_CPU);
 | 
					    xTaskCreatePinnedToCore(task_shared_value_increment, "INC1", 2048, NULL, UNITY_FREERTOS_PRIORITY + 1, NULL, UNITY_FREERTOS_CPU);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(int i = 0; i < 2; i++) {
 | 
					    for (int i = 0; i < 2; i++) {
 | 
				
			||||||
        if(!xSemaphoreTake(done_sem, 10000/portTICK_PERIOD_MS)) {
 | 
					        if (!xSemaphoreTake(done_sem, 10000 / portTICK_PERIOD_MS)) {
 | 
				
			||||||
            TEST_FAIL_MESSAGE("done_sem not released by test task");
 | 
					            TEST_FAIL_MESSAGE("done_sem not released by test task");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -139,8 +139,8 @@ void portmux_high_contention_test(uint32_t lock_malloc_caps)
 | 
				
			|||||||
        xTaskCreatePinnedToCore(task_shared_value_increment, "INC1", 2048, NULL, tskIDLE_PRIORITY + 1 + i, NULL, UNITY_FREERTOS_CPU);
 | 
					        xTaskCreatePinnedToCore(task_shared_value_increment, "INC1", 2048, NULL, tskIDLE_PRIORITY + 1 + i, NULL, UNITY_FREERTOS_CPU);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(int i = 0; i < TOTAL_TASKS; i++) {
 | 
					    for (int i = 0; i < TOTAL_TASKS; i++) {
 | 
				
			||||||
        if(!xSemaphoreTake(done_sem, 10000/portTICK_PERIOD_MS)) {
 | 
					        if (!xSemaphoreTake(done_sem, 10000 / portTICK_PERIOD_MS)) {
 | 
				
			||||||
            TEST_FAIL_MESSAGE("done_sem not released by test task");
 | 
					            TEST_FAIL_MESSAGE("done_sem not released by test task");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,6 @@
 | 
				
			|||||||
#define GET_THREADPTR(tp_dest)  do { register uint32_t _tp asm("tp"); tp_dest = _tp; } while(0)
 | 
					#define GET_THREADPTR(tp_dest)  do { register uint32_t _tp asm("tp"); tp_dest = _tp; } while(0)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
static __thread int tl_test_var1;
 | 
					static __thread int tl_test_var1;
 | 
				
			||||||
static __thread uint8_t tl_test_var2 = 55;
 | 
					static __thread uint8_t tl_test_var2 = 55;
 | 
				
			||||||
static __thread uint16_t tl_test_var3 = 44;
 | 
					static __thread uint16_t tl_test_var3 = 44;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
 | 
					 * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * SPDX-License-Identifier: Apache-2.0
 | 
					 * SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -55,28 +55,28 @@ TEST_CASE("LoadStore Exception handler", "[freertos]")
 | 
				
			|||||||
        offset32 = offset8 / 4;
 | 
					        offset32 = offset8 / 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        arr8[offset8] = val8_0;
 | 
					        arr8[offset8] = val8_0;
 | 
				
			||||||
        arr8[offset8+1] = val8_1;
 | 
					        arr8[offset8 + 1] = val8_1;
 | 
				
			||||||
        arr8[offset8+2] = val8_2;
 | 
					        arr8[offset8 + 2] = val8_2;
 | 
				
			||||||
        arr8[offset8+3] = val8_3;
 | 
					        arr8[offset8 + 3] = val8_3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Just to make sure compiler doesn't read stale data
 | 
					        // Just to make sure compiler doesn't read stale data
 | 
				
			||||||
        asm volatile("memw\n");
 | 
					        asm volatile("memw\n");
 | 
				
			||||||
        TEST_ASSERT_EQUAL(val8_0, arr8[offset8]);
 | 
					        TEST_ASSERT_EQUAL(val8_0, arr8[offset8]);
 | 
				
			||||||
        TEST_ASSERT_EQUAL(val8_1, arr8[offset8+1]);
 | 
					        TEST_ASSERT_EQUAL(val8_1, arr8[offset8 + 1]);
 | 
				
			||||||
        TEST_ASSERT_EQUAL(val8_2, arr8[offset8+2]);
 | 
					        TEST_ASSERT_EQUAL(val8_2, arr8[offset8 + 2]);
 | 
				
			||||||
        TEST_ASSERT_EQUAL(val8_3, arr8[offset8+3]);
 | 
					        TEST_ASSERT_EQUAL(val8_3, arr8[offset8 + 3]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        arr16[offset16] = val16_0;
 | 
					        arr16[offset16] = val16_0;
 | 
				
			||||||
        arr16[offset16+1] = val16_1;
 | 
					        arr16[offset16 + 1] = val16_1;
 | 
				
			||||||
        arr16[offset16+2] = val16_2;
 | 
					        arr16[offset16 + 2] = val16_2;
 | 
				
			||||||
        arr16[offset16+3] = val16_3;
 | 
					        arr16[offset16 + 3] = val16_3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Just to make sure compiler doesn't read stale data
 | 
					        // Just to make sure compiler doesn't read stale data
 | 
				
			||||||
        asm volatile("memw\n");
 | 
					        asm volatile("memw\n");
 | 
				
			||||||
        TEST_ASSERT_EQUAL(val16_0, arr16[offset16]);
 | 
					        TEST_ASSERT_EQUAL(val16_0, arr16[offset16]);
 | 
				
			||||||
        TEST_ASSERT_EQUAL(val16_1, arr16[offset16+1]);
 | 
					        TEST_ASSERT_EQUAL(val16_1, arr16[offset16 + 1]);
 | 
				
			||||||
        TEST_ASSERT_EQUAL(val16_2, arr16[offset16+2]);
 | 
					        TEST_ASSERT_EQUAL(val16_2, arr16[offset16 + 2]);
 | 
				
			||||||
        TEST_ASSERT_EQUAL(val16_3, arr16[offset16+3]);
 | 
					        TEST_ASSERT_EQUAL(val16_3, arr16[offset16 + 3]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // LoadStoreAlignement Error
 | 
					        // LoadStoreAlignement Error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -112,7 +112,7 @@ TEST_CASE("LoadStore Exception handler", "[freertos]")
 | 
				
			|||||||
        *ptr32_2 = val2;
 | 
					        *ptr32_2 = val2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Just to make sure compiler doesn't read stale data
 | 
					        // Just to make sure compiler doesn't read stale data
 | 
				
			||||||
        asm volatile ("memw");
 | 
					        asm volatile("memw");
 | 
				
			||||||
        TEST_ASSERT_EQUAL(0x73, *ptr8_0);
 | 
					        TEST_ASSERT_EQUAL(0x73, *ptr8_0);
 | 
				
			||||||
        TEST_ASSERT_EQUAL(val0, *ptr32_0);
 | 
					        TEST_ASSERT_EQUAL(val0, *ptr32_0);
 | 
				
			||||||
        TEST_ASSERT_EQUAL(0x73, *ptr8_1);
 | 
					        TEST_ASSERT_EQUAL(0x73, *ptr8_1);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,8 @@ components_not_formatted_temporary:
 | 
				
			|||||||
  #    To reformat the files:
 | 
					  #    To reformat the files:
 | 
				
			||||||
  #    - Remove the directory from this exclude list
 | 
					  #    - Remove the directory from this exclude list
 | 
				
			||||||
  #    - Run 'git add .astyle-rules.yml'
 | 
					  #    - Run 'git add .astyle-rules.yml'
 | 
				
			||||||
  #    - Run 'pre-commit run --all-files'
 | 
					  #    - Run 'pre-commit run --all-files' to run all pre-commit hooks
 | 
				
			||||||
 | 
					  #    - Run 'pre-commit run astyle_py --all-files' to run only the astyle_py hook
 | 
				
			||||||
  # 2. If no, move it to 'components_not_formatted_permanent' section below.
 | 
					  # 2. If no, move it to 'components_not_formatted_permanent' section below.
 | 
				
			||||||
  check: false
 | 
					  check: false
 | 
				
			||||||
  include:
 | 
					  include:
 | 
				
			||||||
@@ -74,7 +75,6 @@ components_not_formatted_temporary:
 | 
				
			|||||||
    - "/components/espcoredump/"
 | 
					    - "/components/espcoredump/"
 | 
				
			||||||
    - "/components/esptool_py/"
 | 
					    - "/components/esptool_py/"
 | 
				
			||||||
    - "/components/fatfs/"
 | 
					    - "/components/fatfs/"
 | 
				
			||||||
    - "/components/freertos/"
 | 
					 | 
				
			||||||
    - "/components/hal/"
 | 
					    - "/components/hal/"
 | 
				
			||||||
    - "/components/heap/"
 | 
					    - "/components/heap/"
 | 
				
			||||||
    - "/components/idf_test/"
 | 
					    - "/components/idf_test/"
 | 
				
			||||||
@@ -152,10 +152,13 @@ components_not_formatted_permanent:
 | 
				
			|||||||
    - "/components/console/linenoise/"
 | 
					    - "/components/console/linenoise/"
 | 
				
			||||||
    # Catch (upstream source code)
 | 
					    # Catch (upstream source code)
 | 
				
			||||||
    - "/tools/catch/catch.hpp"
 | 
					    - "/tools/catch/catch.hpp"
 | 
				
			||||||
    # FreeRTOS kernel files (upstream source code).
 | 
					    # FreeRTOS kernel files (upstream source code)
 | 
				
			||||||
    - "/components/freertos/FreeRTOS-Kernel/"
 | 
					    - "/components/freertos/FreeRTOS-Kernel/"
 | 
				
			||||||
    - "/components/freertos/FreeRTOS-Kernel-SMP/"
 | 
					    - "/components/freertos/FreeRTOS-Kernel-SMP/"
 | 
				
			||||||
    - "/components/freertos/FreeRTOS-Kernel-V10.5.1/"
 | 
					    # FreeRTOS additions to the upstream source code
 | 
				
			||||||
 | 
					    - "/components/freertos/esp_additions/"
 | 
				
			||||||
 | 
					    # FreeRTOS config files maintained in upstream format
 | 
				
			||||||
 | 
					    - "/components/freertos/config/"
 | 
				
			||||||
    # Segger SystemView (upstream source code).
 | 
					    # Segger SystemView (upstream source code).
 | 
				
			||||||
    # Could also try to find suitable astyle options, instead.
 | 
					    # Could also try to find suitable astyle options, instead.
 | 
				
			||||||
    - "/components/app_trace/sys_view/Config/"
 | 
					    - "/components/app_trace/sys_view/Config/"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user