From abb03b8dc44f510c7e2f85ebc1a61c4b156a9e48 Mon Sep 17 00:00:00 2001 From: Armando Date: Tue, 21 Mar 2023 16:15:13 +0800 Subject: [PATCH] doc: added memory management programming guides --- components/esp_mm/include/esp_cache.h | 6 +- components/esp_mm/include/esp_mmu_map.h | 4 +- docs/_static/diagrams/mmu/enclosed.png | Bin 0 -> 14663 bytes docs/_static/diagrams/mmu/identical.png | Bin 0 -> 14613 bytes .../diagrams/mmu/inversed_enclosed.png | Bin 0 -> 21220 bytes docs/_static/diagrams/mmu/mem_pool.png | Bin 0 -> 12108 bytes docs/_static/diagrams/mmu/overlapped.png | Bin 0 -> 16221 bytes docs/doxygen/Doxyfile | 2 + docs/en/api-reference/system/index.rst | 1 + docs/en/api-reference/system/mm.rst | 177 ++++++++++++++++++ docs/zh_CN/api-reference/system/index.rst | 1 + docs/zh_CN/api-reference/system/mm.rst | 1 + 12 files changed, 187 insertions(+), 5 deletions(-) create mode 100644 docs/_static/diagrams/mmu/enclosed.png create mode 100644 docs/_static/diagrams/mmu/identical.png create mode 100644 docs/_static/diagrams/mmu/inversed_enclosed.png create mode 100644 docs/_static/diagrams/mmu/mem_pool.png create mode 100644 docs/_static/diagrams/mmu/overlapped.png create mode 100644 docs/en/api-reference/system/mm.rst create mode 100644 docs/zh_CN/api-reference/system/mm.rst diff --git a/components/esp_mm/include/esp_cache.h b/components/esp_mm/include/esp_cache.h index 800e886569..af51a18ed7 100644 --- a/components/esp_mm/include/esp_cache.h +++ b/components/esp_mm/include/esp_cache.h @@ -41,9 +41,9 @@ extern "C" { * @note You should not call this during any Flash operations (e.g. esp_flash APIs, nvs and some other APIs that are based on esp_flash APIs) * @note If XIP_From_PSRAM is enabled (by enabling both CONFIG_SPIRAM_FETCH_INSTRUCTIONS and CONFIG_SPIRAM_RODATA), you can call this API during Flash operations * - * @param[in] Starting address to do the msync - * @param[in] Size to do the msync - * @param[in] Flags, see `ESP_CACHE_MSYNC_FLAG_x` + * @param[in] addr Starting address to do the msync + * @param[in] size Size to do the msync + * @param[in] flags Flags, see `ESP_CACHE_MSYNC_FLAG_x` * * @return * - ESP_OK: diff --git a/components/esp_mm/include/esp_mmu_map.h b/components/esp_mm/include/esp_mmu_map.h index 33d3396441..75f37f4040 100644 --- a/components/esp_mm/include/esp_mmu_map.h +++ b/components/esp_mm/include/esp_mmu_map.h @@ -47,7 +47,7 @@ extern "C" { * - the to-be-mapped paddr block is overlapped with an already mapped paddr block. * - the to-be-mapped paddr block encloses an already mapped paddr block. * 2. If the to-be-mapped paddr block is enclosed by an already mapped paddr block, no new mapping will happen, return ESP_ERR_INVALID_STATE. The out pointer will be the already mapped paddr corresponding vaddr. - * 3. If the to-be-mapped paddr block is totally the same as an already mapped paddr block, no new mapping will happen, return ESP_ERR_INVALID_STATE. The out pointer will be the corresponding vaddr. + * 3. If the to-be-mapped paddr block is identical with an already mapped paddr block, no new mapping will happen, return ESP_ERR_INVALID_STATE. The out pointer will be the corresponding vaddr. * * - If this flag isn't set, overlapped, enclosed or same to-be-mapped paddr block will lead to ESP_ERR_INVALID_ARG. */ @@ -77,7 +77,7 @@ typedef uint32_t esp_paddr_t; * - ESP_ERR_NOT_FOUND: No enough size free block to use * - ESP_ERR_NO_MEM: Out of memory, this API will allocate some heap memory for internal usage * - ESP_ERR_INVALID_STATE: Paddr is mapped already, this API will return corresponding vaddr_start of the previously mapped block. - * Only to-be-mapped paddr block is totally enclosed by a previously mapped block will lead to this error: + * Only to-be-mapped paddr block is totally enclosed by a previously mapped block will lead to this error. (Identical scenario will behave similarly) * new_block_start new_block_end * |-------- New Block --------| * |--------------- Block ---------------| diff --git a/docs/_static/diagrams/mmu/enclosed.png b/docs/_static/diagrams/mmu/enclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..b1d5563b705755b0f46ee165a33645948e3a93f8 GIT binary patch literal 14663 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 G2~7Z^tottj literal 0 HcmV?d00001 diff --git a/docs/_static/diagrams/mmu/inversed_enclosed.png b/docs/_static/diagrams/mmu/inversed_enclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8f0ff228c7bb6454f678797f8cb48883792a12 GIT binary patch literal 21220 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 Az5oCK literal 0 HcmV?d00001 diff --git a/docs/_static/diagrams/mmu/mem_pool.png b/docs/_static/diagrams/mmu/mem_pool.png new file mode 100644 index 0000000000000000000000000000000000000000..876a6f98a88c3329be69a1be4d462e865c9abf23 GIT binary patch literal 12108 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 HDWM4fC*`F_ literal 0 HcmV?d00001 diff --git a/docs/_static/diagrams/mmu/overlapped.png b/docs/_static/diagrams/mmu/overlapped.png new file mode 100644 index 0000000000000000000000000000000000000000..e1d6ba3302cb49999b84377d603e54f053c41c3e GIT binary patch literal 16221 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 tx{CKq4-UrJbnN$IWnf^y+;RKiKVzw^_sNG@+)