PSRAM exploring
This commit is contained in:
parent
4a9160904a
commit
99c2c569ef
2 changed files with 18 additions and 5 deletions
|
@ -13,11 +13,16 @@ static const char* TAG = "MatrixPanel";
|
|||
bool MatrixPanel_I2S_DMA::allocateDMAmemory()
|
||||
{
|
||||
|
||||
ESP_LOGI(TAG, "Free heap: %d", ESP.getFreeHeap());
|
||||
ESP_LOGI(TAG, "Free SPIRAM: %d", ESP.getFreePsram());
|
||||
|
||||
|
||||
// Alright, theoretically we should be OK, so let us do this, so
|
||||
// lets allocate a chunk of memory for each row (a row could span multiple panels if chaining is in place)
|
||||
dma_buff.rowBits.reserve(ROWS_PER_FRAME);
|
||||
|
||||
// iterate through number of rows
|
||||
// iterate through number of rows, allocate memory for each
|
||||
size_t allocated_fb_memory = 0;
|
||||
for (int malloc_num =0; malloc_num < ROWS_PER_FRAME; ++malloc_num)
|
||||
{
|
||||
auto ptr = std::make_shared<rowBitStruct>(PIXELS_PER_ROW, PIXEL_COLOUR_DEPTH_BITS, m_cfg.double_buff);
|
||||
|
@ -29,9 +34,11 @@ bool MatrixPanel_I2S_DMA::allocateDMAmemory()
|
|||
// TODO: should we release all previous rowBitStructs here???
|
||||
}
|
||||
|
||||
allocated_fb_memory += ptr->size();
|
||||
dma_buff.rowBits.emplace_back(ptr); // save new rowBitStruct into rows vector
|
||||
++dma_buff.rows;
|
||||
}
|
||||
ESP_LOGI(TAG, "Allocating %d bytes memory for DMA BCM framebuffer(s).", allocated_fb_memory);
|
||||
|
||||
// calculate the lowest LSBMSB_TRANSITION_BIT value that will fit in memory that will meet or exceed the configured refresh rate
|
||||
#if !defined(FORCE_COLOUR_DEPTH)
|
||||
|
|
|
@ -167,11 +167,17 @@ struct rowBitStruct {
|
|||
// constructor - allocates DMA-capable memory to hold the struct data
|
||||
rowBitStruct(const size_t _width, const uint8_t _depth, const bool _dbuff) : width(_width), colour_depth(_depth), double_buff(_dbuff) {
|
||||
|
||||
#if defined(SPIRAM_FRAMEBUFFER)
|
||||
#if defined(SPIRAM_FRAMEBUFFER) && defined (CONFIG_IDF_TARGET_ESP32S3)
|
||||
#pragma message "Enabling PSRAM / SPIRAM for frame buffer."
|
||||
data = (ESP32_I2S_DMA_STORAGE_TYPE *)heap_caps_malloc( size()+size()*double_buff, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
|
||||
data = (ESP32_I2S_DMA_STORAGE_TYPE *)heap_caps_malloc( size()+size()*double_buff, MALLOC_CAP_SPIRAM);
|
||||
/*
|
||||
if (!psramFound())
|
||||
{
|
||||
ESP_LOGE("rowBitStruct", "Requested to use PSRAM / SPIRAM for framebuffer, but it was not detected.");
|
||||
}
|
||||
*/
|
||||
#else
|
||||
data = (ESP32_I2S_DMA_STORAGE_TYPE *)heap_caps_malloc( size()+size()*double_buff, MALLOC_CAP_DMA);
|
||||
data = (ESP32_I2S_DMA_STORAGE_TYPE *)heap_caps_malloc( size()+size()*double_buff, MALLOC_CAP_INTERNAL | MALLOC_CAP_DMA);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue