我正在尝试使用
libwebp
解码动画图像并将其显示在由 Adafruit MatrixPortal 驱动的 RGB LED 矩阵上。我的开发环境如下:
board=adafruit_matrix_portal_m4
lib_deps
libwebp
作为子模块包含在 lib
目录中lib/assets
lib 结构是根据 tidbyt/hdk 固件建模的,并且直接从那里提取 webp 资源。
我已经能够成功编译和上传我的
main.cpp
并在我的LED矩阵上显示基本文本图形,所以我对我的整体架构感觉非常好。
当我添加单行以使用
libwebp
的 WebPAnimDecoderNew
初始化解码器时,上传失败约 50%,并显示消息 SAM-BA operation failed
。以下是我的工作main.cpp
,问题行已注释掉。
#include <Arduino.h>
#include <Adafruit_Protomatter.h>
#include <webp/demux.h>
#include <assets.h>
uint8_t rgbCount = 1;
uint8_t rgbPins[] = {7, 8, 9, 10, 11, 12};
uint8_t addrCount = 4;
uint8_t addrPins[] = {17, 18, 19, 20};
uint8_t clockPin = 14;
uint8_t latchPin = 15;
uint8_t oePin = 16;
uint8_t bitDepth = 6; // 5;
Adafruit_Protomatter matrix(
128, bitDepth, rgbCount, rgbPins, addrCount, addrPins, clockPin, latchPin, oePin, false);
WebPData webPData;
void setup()
{
Serial.begin(9600);
delay(2000);
ProtomatterStatus status = matrix.begin();
Serial.print("Protomatter begin() status: ");
Serial.println((int)status);
if (status != PROTOMATTER_OK)
{
for (;;)
;
}
}
void loop()
{
Serial.print("Refresh FPS = ~");
Serial.println(matrix.getFrameCount());
drawTestGraphic();
drawWebP();
delay(1000);
}
void drawTestGraphic()
{
for (int x = 0; x < matrix.width(); x++)
{
uint8_t level = x * 256 / matrix.width();
matrix.drawPixel(x, matrix.height() - 4, matrix.color565(level, 0, 0));
matrix.drawPixel(x, matrix.height() - 3, matrix.color565(0, level, 0));
matrix.drawPixel(x, matrix.height() - 2, matrix.color565(0, 0, level));
matrix.drawPixel(x, matrix.height() - 1, matrix.color565(level, level, level));
}
matrix.show();
}
void drawWebP()
{
WebPDataClear(&webPData);
webPData.size = ASSET_NOAPPS_WEBP_LEN;
webPData.bytes = (uint8_t *)malloc(ASSET_NOAPPS_WEBP_LEN);
memcpy((void *)webPData.bytes, ASSET_NOAPPS_WEBP, ASSET_NOAPPS_WEBP_LEN);
// Where I want to start decoding...
// WebPAnimDecoder *decoder = WebPAnimDecoderNew(&webPData, NULL);
free((void *)webPData.bytes);
}
有人曾经经历过这种情况吗
libwebp
?对于具体是什么原因导致该行出现此问题,有什么建议吗?
正如@TimRoberts所指出的,这是由于MatrixPortal M4的内存有限。令人困惑的是,M4 同时具有 ATSAMD51J19 Cortex M4 处理器和 ESP32 WiFi 协处理器。即使有协处理器,固件可访问的 RAM 也仅限于 kb。
我关注的大多数项目都使用 ESP32-S3,它具有更多的内存 (8MB)。
巧合的是,Adafruit 刚刚发布了使用 ESP32S3 的 Matrixportal S3。我将尝试将此项目迁移到其中之一或 Raspberry Pi。