/* * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 *//* ... */#include"sdkconfig.h"/* This file implements the heap related functions that are called by FreeRTOS. * ESP-IDF provides its own heap containing memory with different capabilities * (see esp_heap_caps.h). Thus, this file maps a subset of the ESP-IDF heap to * act as the FreeRTOS heap. * * All dynamic allocation done by FreeRTOS should be placed in internal 8-bit * accessible RAM (i.e., using the MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT flags). * This is due to the fact that FreeRTOS objects (e.g., task stacks, TCBs, * queues etc) must be accessible even if the cache is disabled. Therefore, the * heap that is made available to FreeRTOS for dynamic allocation is a subset of * the ESP-IDF heap (where all MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT memory is * made available to FreeRTOS for dynamic allocation). *//* ... *//* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining * all the API functions to use the MPU wrappers. That should only be done when * task.h is included from an application file. *//* ... */#defineMPU_WRAPPERS_INCLUDED_FROM_API_FILE#include"FreeRTOS.h"#undefMPU_WRAPPERS_INCLUDED_FROM_API_FILE#if(configSUPPORT_DYNAMIC_ALLOCATION==0)#errorThisfilemustnotbeusedifconfigSUPPORT_DYNAMIC_ALLOCATIONis0#endif#include"esp_heap_caps.h"#if!CONFIG_IDF_TARGET_LINUX/* Memory util functions are not implemented in the Linux simulator */#include"esp_memory_utils.h"/* ... */#endif/* CONFIG_IDF_TARGET_LINUX */#defineportFREERTOS_HEAP_CAPS(MALLOC_CAP_INTERNAL|MALLOC_CAP_8BIT)/*-----------------------------------------------------------*/void*pvPortMalloc(size_txWantedSize){void*pvReturn=NULL;/* All dynamic allocation done by FreeRTOS goes through this function. If * users need to allocate FreeRTOS objects into external RAM, they should * use the "static" equivalents of FreeRTOS API to create FreeRTOS objects * (e.g., queues). *//* ... */pvReturn=heap_caps_malloc(xWantedSize,portFREERTOS_HEAP_CAPS);returnpvReturn;}{ ... }/*-----------------------------------------------------------*/voidvPortFree(void*pv){heap_caps_free(pv);}{ ... }/*-----------------------------------------------------------*/size_txPortGetFreeHeapSize(void){returnheap_caps_get_free_size(portFREERTOS_HEAP_CAPS);}{ ... }/*-----------------------------------------------------------*/size_txPortGetMinimumEverFreeHeapSize(void){returnheap_caps_get_minimum_free_size(portFREERTOS_HEAP_CAPS);}{ ... }/*-----------------------------------------------------------*/boolxPortCheckValidListMem(constvoid*ptr){#ifCONFIG_IDF_TARGET_LINUXreturntrue;#else/* CONFIG_IDF_TARGET_LINUX */returnesp_ptr_internal(ptr)&&esp_ptr_byte_accessible(ptr);#endif/* CONFIG_IDF_TARGET_LINUX */}{ ... }boolxPortCheckValidTCBMem(constvoid*ptr){#ifCONFIG_IDF_TARGET_LINUXreturntrue;#else/* CONFIG_IDF_TARGET_LINUX */returnesp_ptr_internal(ptr)&&esp_ptr_byte_accessible(ptr);#endif/* CONFIG_IDF_TARGET_LINUX */}{ ... }boolxPortcheckValidStackMem(constvoid*ptr){#ifCONFIG_IDF_TARGET_LINUXreturntrue;#else/* CONFIG_IDF_TARGET_LINUX */#ifdefCONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEMreturnesp_ptr_byte_accessible(ptr);#elsereturnesp_ptr_internal(ptr)&&esp_ptr_byte_accessible(ptr);#endif/* ... */#endif/* CONFIG_IDF_TARGET_LINUX */}{ ... }
Details
Show: from
Types: Columns:
All items filtered out
All items filtered out
This file uses the notable symbols shown below. Click anywhere in the file to view more details.