各位大佬,我自己繪制了一個pcb電路板,使用的是esp32-S做核心片,因為內存不夠,我在上面載入了一片樂鑫psram64h。
我一年前曾貼片過一篇pcb,我個人的開發環境是vscode搭配platform IO;一年前的這塊pcb,不需要做任何設置,做任何初始化,直接使用
mySerial.printf("PSRAM free size: %d\n", heap_caps_get_free_size(MALLOC_CAP_SPIRAM));
mySerial.printf("Internal free size: %d\n", heap_caps_get_free_size(MALLOC_CAP_8BIT));
即可在串口助手上看到我板載的psram64h的8M內存,分別分配了4M到psram與默認堆中。
但是我前陣子新貼了一批板子(未更換pcb、原理圖),燒錄同樣的代碼,
mySerial.printf("PSRAM free size: %d\n", heap_caps_get_free_size(MALLOC_CAP_SPIRAM));
mySerial.printf("Internal free size: %d\n", heap_caps_get_free_size(MALLOC_CAP_8BIT));
這兩句函數并不能讀到我的psram,串口助手中可分配的psram為0,默認堆大小也只有200k;
但是使用 int psram_size = esp_spiram_get_size();
mySerial.printf("PSRAM size: %d bytes\n", psram_size);
能夠讀到具有8M的空間,只是未分配至堆中,
于是我個人手動添加 esp_spiram_add_to_heapalloc();至setup中;
發現可用psram成功分配至可用堆大小中,但是在實際使用過程中,這段內存似乎是亂的,因為之前我這個設備調用攝像模塊,拍攝600*800的jpeg想服務器上傳時,長度大概是30000個字節,但是如果將攝像頭的緩沖區初始化在psram中,上傳的長度是80000個字節,并且上傳至服務拼接后并不能顯示出圖片。
我個人懷疑 是否是這段內存的編址有問題? 或者說 我并不能直接使用 esp_spiram_add_to_heapalloc();來添加這段內存,需要提前進行初始化? 如果是這個原因,我該怎么做? 還請各位大佬解答,如果成功解決可以有小額的感謝。
|