女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ESP32內存泄露

jf_78858299 ? 來源:紛紜雜談 ? 作者:CY_CHEN ? 2023-05-22 16:18 ? 次閱讀

使用ESP32時如果懷疑存在內存泄漏,第一步是找出程序的哪個部分正在泄漏內存。使用xPortGetFreeHeapSize()、heap_caps_get_free_size()或相關函數來跟蹤應用程序生命周期內的內存使用情況。嘗試將泄漏縮小到單個函數或函數序列,在這些函數中,可用內存總是減少并且永遠不會恢復。

一旦確定了正在泄漏的代碼:

·在項目配置菜單中,導航到Component settings -> Heap Memory Debugging -> Heap tracing,選擇Standalone選項。

圖片

·在程序運行前調用heap_trace_init_standalone() 注冊一個可用于記錄內存跟蹤的緩沖區。

·調用 heap_trace_start()開始記錄系統中的所有malloc/free。在你懷疑正在泄漏內存的代碼段之前立即調用此方法。

·調用heap_trace_stop()在懷疑代碼段完成執行后停止跟蹤。

·調用 heap_trace_dump()轉儲堆跟蹤的結果。

示例代碼:

#include "esp_heap_trace.h"


#define NUM_RECORDS 100
static heap_trace_record_t trace_record[NUM_RECORDS]; // This buffer must be in internal RAM


...


void app_main()
{
    ...
    ESP_ERROR_CHECK( heap_trace_init_standalone(trace_record, NUM_RECORDS) );
    ...
}


void some_function()
{
    ESP_ERROR_CHECK( heap_trace_start(HEAP_TRACE_LEAKS) );


    do_something_you_suspect_is_leaking();


    ESP_ERROR_CHECK( heap_trace_stop() );
    heap_trace_dump();
    ...
}

堆跟蹤的輸出大概這樣:

2 allocations trace (100 entry buffer)
32 bytes (@ 0x3ffaf214) allocated CPU 0 ccount 0x2e9b7384 caller 0x400d276d:0x400d27c1
0x400d276d: leak_some_memory at /path/to/idf/examples/get-started/blink/main/./blink.c:27


0x400d27c1: blink_task at /path/to/idf/examples/get-started/blink/main/./blink.c:52


8 bytes (@ 0x3ffaf804) allocated CPU 0 ccount 0x2e9b79c0 caller 0x400d2776:0x400d27c1
0x400d2776: leak_some_memory at /path/to/idf/examples/get-started/blink/main/./blink.c:29


0x400d27c1: blink_task at /path/to/idf/examples/get-started/blink/main/./blink.c:52


40 bytes 'leaked' in trace (2 allocations)
total allocations 2 total frees 0

上面的示例輸出是使用IDF監視器自動解碼PC地址到它們的源文件和行號。

第一行表示與緩沖區的總大小相比,緩沖區中有多少分配項。

在HEAP_TRACE_LEAKS模式下,對于每個尚未釋放的跟蹤內存分配,打印一行:

  • XXbytes 為已分配的字節數
  • @0x... 是從malloc/calloc返回的堆地址。
  • InternalPSRAM 是分配內存的一般位置。
  • CPUx CPU x是分配時正在運行的CPU(0或1)。
  • ccount0x... 是分配模式時的CCOUNT (CPU周期計數)寄存器值。不同于CPU 0和CPU 1。
  • caller0x... 給出調用malloc()/free()的調用堆棧,作為PC地址列表。可以將它們解碼為源文件和行號。

可以在項目配置菜單中Heap Memory Debugging -> Enable heap tracing -> Heap tracing stack depth配置為每個跟蹤項記錄的調用堆棧的深度。每個分配最多可以記錄10個堆棧幀(默認為2個)。每增加一個堆棧幀,每個heap_trace_record_t記錄的內存使用都會增加8個字節。

最后,打印內存泄漏字節的總數(在運行跟蹤時已分配但未釋放的字節),以及它所表示的總分配數。如果跟蹤緩沖區的大小不足以容納發生的所有分配,則將打印警告。如果看到此警告,應該縮短跟蹤周期或增加跟蹤緩沖區中的記錄數量。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4371

    瀏覽量

    64210
  • 內存泄漏
    +關注

    關注

    0

    文章

    40

    瀏覽量

    9351
  • ESP32
    +關注

    關注

    20

    文章

    1007

    瀏覽量

    18845
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    [esp32教程] 4、LEDC使用

    基于Ubuntu下,利用esp-idf進行esp32開發的教程
    的頭像 發表于 06-03 09:39 ?5257次閱讀
    [<b class='flag-5'>esp32</b>教程] 4、LEDC使用

    [esp32教程] 5、UART使用

    基于Ubuntu下,利用esp-idf進行esp32開發的教程
    的頭像 發表于 06-13 09:04 ?7879次閱讀
    [<b class='flag-5'>esp32</b>教程] 5、UART使用

    ESP32硬件設計指南

    不同的物聯網應用場景使用。相較上一代芯片 ESP8266,ESP32 有更多的內存空間供用戶使用,且有更多的 I/O 口可供開發。ESP32可以直接傳送視頻數據,功耗也相對要低一些,還
    的頭像 發表于 03-08 14:52 ?1.1w次閱讀

    ESP32硬件設計指南

    不同的物聯網應用場景使用。相較上一代芯片 ESP8266,ESP32 有更多的內存空間供用戶使用,且有更多的 I/O 口可供開發。ESP32可以直接傳送視頻數據,功耗也相對要低一些,還
    的頭像 發表于 12-27 22:27 ?2979次閱讀
    <b class='flag-5'>ESP32</b>硬件設計指南

    ESP32模組的主要特性

    WT-ESP32-DevKitC V4是一款基于ESP32的小型開發板,集WIFI+藍牙方案于一體,板上模組絕大部分管腳均已引出,開發人員可根據實際需求,輕松通過跳線連接多種外圍器件,或將開發板直接
    發表于 11-04 14:54 ?4398次閱讀

    ESP32開發套件 ESP32-DevKitC

    今天推出的一款套件是來自全球創客屆大名鼎鼎的樂鑫科技官方提供的經典ESP32開發套件 -?ESP32-DevKitC。 它基于樂鑫ESP32控制器(32-bit MCU 2.4 GHz Wi-Fi
    的頭像 發表于 01-06 16:55 ?8972次閱讀

    ESP32-WROOM-32E和ESP32-WROOM-32UE模組的區別

    ESP32-WROOM系列模組基于 ESP32-D0WD 雙核芯片設計,適用于基于 Wi-Fi 和藍牙連接的應用場景,具備強大的雙核性能。而其中的ESP32
    發表于 06-01 16:41 ?2.1w次閱讀
    <b class='flag-5'>ESP32</b>-WROOM-32E和<b class='flag-5'>ESP32</b>-WROOM-32UE模組的區別

    esp32和arduino的區別,esp32能否替代arduino

    很多創客愛好者甚至有些技術工程師在理解esp32和arduino的時候總是問一句這兩塊板子哪個更好用?他們可能潛意識中就覺得arduino和esp32是競品的關系,但實際是這樣嗎?今天我們就深入
    發表于 06-24 17:11 ?2.8w次閱讀

    ESP32-C6的特性介紹

    說到ESP32-C3,大家耳熟能詳,其實ESP32-C6 的 CPU、內存和安全性能與 ESP32-C3 相似。它搭載 RISC-V 32 位單核處理器,時鐘頻率高達 160 MHz,
    發表于 06-29 14:53 ?2775次閱讀

    ESP32 開發之旅② Arduino For ESP32說明

    文章目錄1. Arduino Core For ESP32是什么?2.Arduino core for ESP32庫3.與ESP8266庫類比3.1 WiFi —— ESP
    發表于 11-13 19:51 ?33次下載
    <b class='flag-5'>ESP32</b> 開發之旅② Arduino For <b class='flag-5'>ESP32</b>說明

    ESP32 SDIO 使用教程

    ESP32 SDIO 使用教程本文旨在說明如何使用標準的 ESP32-WROOM-32D 開發板進行 SDIO 的通信。本文檔適用于所有需要與 ESP32 SDIO slave 通信的方案
    發表于 11-23 17:51 ?241次下載
    <b class='flag-5'>ESP32</b> SDIO 使用教程

    ESP32系列芯片的規格

    ESP32是一款2.4GHz Wi-Fi和藍牙組合芯片,采用TSMC超低功耗40nm設計技術它旨在實現最佳功率和射頻性能,顯示出魯棒性、多功能性和靈活性在各種應用和電源場景中的可靠性。ESP32系列芯片包括ESP32-D0WDQ
    發表于 04-25 16:21 ?7次下載

    ESP32樂鑫開發板

    C2是一個芯片采用4毫米x 4毫米封裝,與272 kB內存。它運行框架,例如ESP-Jumpstart和ESP造雨者,同時它也運行ESP-IDF。E
    的頭像 發表于 12-05 16:00 ?1754次閱讀

    ESP32ESP32通過Internet進行通信

    電子發燒友網站提供《ESP32ESP32通過Internet進行通信.zip》資料免費下載
    發表于 06-15 09:58 ?5次下載
    <b class='flag-5'>ESP32</b>到<b class='flag-5'>ESP32</b>通過Internet進行通信

    esp8266和esp32區別是什么

    Xtensa? 32-bit LX6 CPU,主頻可達240MHz,具有更強大的處理能力。 內存ESP8266 :通常有64KB到512KB的RAM,以及1MB到4MB的閃存。 ESP32 :提供更大
    的頭像 發表于 08-19 18:16 ?6956次閱讀