各位大佬,我自己绘制了一个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();来添加这段内存,需要提前进行初始化? 如果是这个原因,我该怎么做? 还请各位大佬解答,如果成功解决可以有小额的感谢。
|