mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
79 lines
2.5 KiB
C
79 lines
2.5 KiB
C
|
/*
|
||
|
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
||
|
*
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* This file contains the implementation for some the functions in
|
||
|
* idf_additions.h
|
||
|
*
|
||
|
* event group functions are split into a separate file due to the dependency chain
|
||
|
* xEventGroupCreateWithCaps->xEventGroupCreateStatic->event_groups.c->xTimerPendFunctionCallFromISR->timers.c
|
||
|
*
|
||
|
* In some cases this results in the weak timer task function getting overridden and
|
||
|
* used even if the event group functions were discarded due to not being used.
|
||
|
*
|
||
|
* Putting the event groups function in a separate file avoids this issue unless the users himself calls
|
||
|
* event group functions
|
||
|
*/
|
||
|
|
||
|
#include "sdkconfig.h"
|
||
|
#include "freertos/FreeRTOS.h"
|
||
|
#include "freertos/event_groups.h"
|
||
|
#include "freertos/idf_additions.h"
|
||
|
#include "esp_heap_caps.h"
|
||
|
|
||
|
/* ------------------------------ Event Groups ------------------------------ */
|
||
|
|
||
|
#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||
|
|
||
|
EventGroupHandle_t xEventGroupCreateWithCaps( UBaseType_t uxMemoryCaps )
|
||
|
{
|
||
|
EventGroupHandle_t xEventGroup;
|
||
|
StaticEventGroup_t * pxEventGroupBuffer;
|
||
|
|
||
|
/* Allocate memory for the event group using the provided memory caps */
|
||
|
pxEventGroupBuffer = heap_caps_malloc( sizeof( StaticEventGroup_t ), uxMemoryCaps );
|
||
|
|
||
|
if( pxEventGroupBuffer == NULL )
|
||
|
{
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
/* Create the event group using static creation API */
|
||
|
xEventGroup = xEventGroupCreateStatic( pxEventGroupBuffer );
|
||
|
|
||
|
if( xEventGroup == NULL )
|
||
|
{
|
||
|
heap_caps_free( pxEventGroupBuffer );
|
||
|
}
|
||
|
|
||
|
return xEventGroup;
|
||
|
}
|
||
|
|
||
|
#endif /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */
|
||
|
/*----------------------------------------------------------*/
|
||
|
|
||
|
#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||
|
|
||
|
void vEventGroupDeleteWithCaps( EventGroupHandle_t xEventGroup )
|
||
|
{
|
||
|
BaseType_t xResult;
|
||
|
StaticEventGroup_t * pxEventGroupBuffer;
|
||
|
|
||
|
/* Retrieve the buffer used to create the event group before deleting it
|
||
|
* */
|
||
|
xResult = xEventGroupGetStaticBuffer( xEventGroup, &pxEventGroupBuffer );
|
||
|
configASSERT( xResult == pdTRUE );
|
||
|
|
||
|
/* Delete the event group */
|
||
|
vEventGroupDelete( xEventGroup );
|
||
|
|
||
|
/* Free the memory buffer */
|
||
|
heap_caps_free( pxEventGroupBuffer );
|
||
|
}
|
||
|
|
||
|
#endif /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */
|
||
|
/*----------------------------------------------------------*/
|