diff --git a/arch/xtensa/src/esp32/Kconfig b/arch/xtensa/src/esp32/Kconfig index ddcb46d44e9..29e0f980f2b 100644 --- a/arch/xtensa/src/esp32/Kconfig +++ b/arch/xtensa/src/esp32/Kconfig @@ -233,6 +233,12 @@ config ESP32_RUN_IRAM config ESP32_RTC_HEAP bool "Use the RTC memory as a separate heap" + select ARCH_HAVE_EXTRA_HEAPS + default n + +config ESP32_IRAM_HEAP + bool "Use the rest of IRAM as a separate heap" + select ARCH_HAVE_EXTRA_HEAPS default n menu "ESP32 Peripheral Selection" diff --git a/arch/xtensa/src/esp32/Make.defs b/arch/xtensa/src/esp32/Make.defs index 7c31b94cdaa..89ac4fa68de 100644 --- a/arch/xtensa/src/esp32/Make.defs +++ b/arch/xtensa/src/esp32/Make.defs @@ -97,10 +97,6 @@ ifeq ($(CONFIG_XTENSA_IMEM_USE_SEPARATE_HEAP),y) CHIP_CSRCS += esp32_imm.c endif -ifeq ($(CONFIG_ESP32_RTC_HEAP),y) -CHIP_CSRCS += esp32_rtcheap.c -endif - ifeq ($(CONFIG_ESP32_I2C),y) CHIP_CSRCS += esp32_i2c.c endif @@ -184,8 +180,19 @@ CHIP_CSRCS += esp32_wdt_lowerhalf.c endif endif -ifeq ($(CONFIG_ARCH_USE_TEXT_HEAP),y) +ifeq ($(CONFIG_ARCH_HAVE_EXTRA_HEAPS),y) +CHIP_CSRCS += esp32_extraheaps.c +endif + +ifeq ($(CONFIG_ESP32_RTC_HEAP),y) +CHIP_CSRCS += esp32_rtcheap.c +endif + +ifeq ($(CONFIG_ESP32_IRAM_HEAP),y) CHIP_CSRCS += esp32_iramheap.c +endif + +ifeq ($(CONFIG_ARCH_USE_TEXT_HEAP),y) CHIP_CSRCS += esp32_textheap.c CMN_ASRCS += xtensa_loadstore.S endif diff --git a/arch/xtensa/src/esp32/esp32_extraheaps.c b/arch/xtensa/src/esp32/esp32_extraheaps.c new file mode 100644 index 00000000000..9b0caac9576 --- /dev/null +++ b/arch/xtensa/src/esp32/esp32_extraheaps.c @@ -0,0 +1,65 @@ +/**************************************************************************** + * arch/xtensa/src/esp32/esp32_extraheaps.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include + +#include +#include + +#include "hardware/esp32_soc.h" + +#ifdef CONFIG_ESP32_IRAM_HEAP +#include "esp32_iramheap.h" +#endif + +#ifdef CONFIG_ESP32_RTC_HEAP +#include "esp32_rtcheap.h" +#endif + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: up_extraheaps_init + * + * Description: + * Initialize any extra heap. + * + ****************************************************************************/ + +void up_extraheaps_init(void) +{ +#ifdef CONFIG_ESP32_RTC_HEAP + esp32_rtcheap_initialize(); +#endif + +#ifdef CONFIG_ESP32_IRAM_HEAP + esp32_iramheap_initialize(); +#endif +} + diff --git a/arch/xtensa/src/esp32/esp32_textheap.c b/arch/xtensa/src/esp32/esp32_textheap.c index 8f7a497fa82..7e29c2f3617 100644 --- a/arch/xtensa/src/esp32/esp32_textheap.c +++ b/arch/xtensa/src/esp32/esp32_textheap.c @@ -32,31 +32,25 @@ #include "hardware/esp32_soc.h" +#ifdef CONFIG_ESP32_IRAM_HEAP #include "esp32_iramheap.h" +#endif + #ifdef CONFIG_ESP32_RTC_HEAP #include "esp32_rtcheap.h" #endif /**************************************************************************** - * Public Functions + * Pre-processor Definitions ****************************************************************************/ -/**************************************************************************** - * Name: up_textheap_init - * - * Description: - * Initialize the text heap. - * - ****************************************************************************/ - -void up_textheap_init() -{ -#ifdef CONFIG_ESP32_RTC_HEAP - esp32_rtcheap_initialize(); +#if !defined(CONFIG_ESP32_IRAM_HEAP) && !defined(CONFIG_ESP32_RTC_HEAP) +#error "No suitable heap available. Enable ESP32_IRAM_HEAP or ESP32_RTC_HEAP" #endif - esp32_iramheap_initialize(); -} +/**************************************************************************** + * Public Functions + ****************************************************************************/ /**************************************************************************** * Name: up_textheap_memalign