mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-04 05:04:33 +02:00
esp_common: Correctly disable ".bss segment placed in external memory" for ESP32-S2 & ESP32-S3
Support for this feature is still pending. As reported by https://github.com/espressif/esp-idf/issues/6162
This commit is contained in:
@@ -92,7 +92,7 @@ config SPIRAM_MALLOC_RESERVE_INTERNAL
|
|||||||
config SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY
|
config SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY
|
||||||
bool "Allow .bss segment placed in external memory"
|
bool "Allow .bss segment placed in external memory"
|
||||||
default n
|
default n
|
||||||
depends on SPIRAM
|
depends on SPIRAM && IDF_TARGET_ESP32 # TODO ESP32-S2 IDFGH-4320, ESP32-S3 IDF-1974
|
||||||
select ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY
|
select ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY
|
||||||
help
|
help
|
||||||
If enabled, variables with EXT_RAM_ATTR attribute will be placed in SPIRAM instead of internal DRAM.
|
If enabled, variables with EXT_RAM_ATTR attribute will be placed in SPIRAM instead of internal DRAM.
|
||||||
|
@@ -31,10 +31,12 @@ Configuring External RAM
|
|||||||
|
|
||||||
ESP-IDF fully supports the use of external memory in applications. Once the external RAM is initialized at startup, ESP-IDF can be configured to handle it in several ways:
|
ESP-IDF fully supports the use of external memory in applications. Once the external RAM is initialized at startup, ESP-IDF can be configured to handle it in several ways:
|
||||||
|
|
||||||
|
.. list::
|
||||||
|
|
||||||
* :ref:`external_ram_config_memory_map`
|
* :ref:`external_ram_config_memory_map`
|
||||||
* :ref:`external_ram_config_capability_allocator`
|
* :ref:`external_ram_config_capability_allocator`
|
||||||
* :ref:`external_ram_config_malloc` (default)
|
* :ref:`external_ram_config_malloc` (default)
|
||||||
* :ref:`external_ram_config_bss`
|
:esp32: * :ref:`external_ram_config_bss`
|
||||||
|
|
||||||
.. _external_ram_config_memory_map:
|
.. _external_ram_config_memory_map:
|
||||||
|
|
||||||
@@ -83,8 +85,9 @@ If a suitable block of preferred internal/external memory is not available, the
|
|||||||
|
|
||||||
Because some buffers can only be allocated in internal memory, a second configuration item :ref:`CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL` defines a pool of internal memory which is reserved for *only* explicitly internal allocations (such as memory for DMA use). Regular ``malloc()`` will not allocate from this pool. The :ref:`MALLOC_CAP_DMA <dma-capable-memory>` and ``MALLOC_CAP_INTERNAL`` flags can be used to allocate memory from this pool.
|
Because some buffers can only be allocated in internal memory, a second configuration item :ref:`CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL` defines a pool of internal memory which is reserved for *only* explicitly internal allocations (such as memory for DMA use). Regular ``malloc()`` will not allocate from this pool. The :ref:`MALLOC_CAP_DMA <dma-capable-memory>` and ``MALLOC_CAP_INTERNAL`` flags can be used to allocate memory from this pool.
|
||||||
|
|
||||||
.. _external_ram_config_bss:
|
.. only:: esp32
|
||||||
|
|
||||||
|
.. _external_ram_config_bss:
|
||||||
|
|
||||||
Allow .bss segment placed in external memory
|
Allow .bss segment placed in external memory
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
|
@@ -31,10 +31,12 @@
|
|||||||
|
|
||||||
ESP-IDF 完全支持将外部存储器集成到您的应用程序中。在启动并完成片外 RAM 初始化后,可以将 ESP-IDF 配置为以多种方式处理片外 RAM:
|
ESP-IDF 完全支持将外部存储器集成到您的应用程序中。在启动并完成片外 RAM 初始化后,可以将 ESP-IDF 配置为以多种方式处理片外 RAM:
|
||||||
|
|
||||||
|
.. list::
|
||||||
|
|
||||||
* :ref:`external_ram_config_memory_map`
|
* :ref:`external_ram_config_memory_map`
|
||||||
* :ref:`external_ram_config_capability_allocator`
|
* :ref:`external_ram_config_capability_allocator`
|
||||||
* :ref:`external_ram_config_malloc` (默认)
|
* :ref:`external_ram_config_malloc` (默认)
|
||||||
* :ref:`external_ram_config_bss`
|
:esp32: * :ref:`external_ram_config_bss`
|
||||||
|
|
||||||
.. _external_ram_config_memory_map:
|
.. _external_ram_config_memory_map:
|
||||||
|
|
||||||
@@ -83,6 +85,8 @@ ESP-IDF 启动过程中,片外 RAM 被映射到以 0x3F800000 起始的数据
|
|||||||
|
|
||||||
由于有些 Buffer 仅可在内部存储器中分配,因此需要使用第二个配置项 :ref:`CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL` 定义一个内部存储池,仅限显式的内部存储器分配使用(例如用于 DMA 的存储器)。常规 ``malloc()`` 将不会从该池中分配,但可以使用 :ref:`MALLOC_CAP_DMA <dma-capable-memory>` 和 ``MALLOC_CAP_INTERNAL`` 旗标从该池中分配存储器。
|
由于有些 Buffer 仅可在内部存储器中分配,因此需要使用第二个配置项 :ref:`CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL` 定义一个内部存储池,仅限显式的内部存储器分配使用(例如用于 DMA 的存储器)。常规 ``malloc()`` 将不会从该池中分配,但可以使用 :ref:`MALLOC_CAP_DMA <dma-capable-memory>` 和 ``MALLOC_CAP_INTERNAL`` 旗标从该池中分配存储器。
|
||||||
|
|
||||||
|
.. only:: esp32
|
||||||
|
|
||||||
.. _external_ram_config_bss:
|
.. _external_ram_config_bss:
|
||||||
|
|
||||||
|
|
||||||
@@ -114,8 +118,11 @@ ESP-IDF 启动过程中,片外 RAM 被映射到以 0x3F800000 起始的数据
|
|||||||
|
|
||||||
* 片外 RAM 不可用作任务堆栈存储器。因此 :cpp:func:`xTaskCreate` 及类似函数将始终为堆栈和任务 TCB 分配片上储存器,而 :cpp:func:`xTaskCreateStatic` 类型的函数将检查传递的 Buffer 是否属于片上存储器。
|
* 片外 RAM 不可用作任务堆栈存储器。因此 :cpp:func:`xTaskCreate` 及类似函数将始终为堆栈和任务 TCB 分配片上储存器,而 :cpp:func:`xTaskCreateStatic` 类型的函数将检查传递的 Buffer 是否属于片上存储器。
|
||||||
|
|
||||||
* 默认情况下,片外 RAM 初始化失败将终止 ESP-IDF 启动。如果想禁用此功能,可启用 :ref:`CONFIG_SPIRAM_IGNORE_NOTFOUND` 配置选项。如果启用 :ref:`CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY`,:ref:`CONFIG_SPIRAM_IGNORE_NOTFOUND` 选项将不能使用,这是因为在链接时,链接器已经向片外 RAM 分配符号。
|
* 默认情况下,片外 RAM 初始化失败将终止 ESP-IDF 启动。如果想禁用此功能,可启用 :ref:`CONFIG_SPIRAM_IGNORE_NOTFOUND` 配置选项。
|
||||||
|
|
||||||
|
.. only:: esp32
|
||||||
|
|
||||||
|
如果启用 :ref:`CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY`,:ref:`CONFIG_SPIRAM_IGNORE_NOTFOUND` 选项将不能使用,这是因为在链接时,链接器已经向片外 RAM 分配符号。
|
||||||
|
|
||||||
.. only:: esp32
|
.. only:: esp32
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user