mirror of
https://github.com/esphome/esphome.git
synced 2026-02-06 01:22:47 +08:00
[qr_code] Allocate and free memory for QR code buffer (#13161)
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: J. Nick Koston <nick@home-assistant.io> Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
committed by
Jonathan Swoboda
parent
3f6412ba07
commit
f88cf1b83a
@@ -27,7 +27,16 @@ void QrCode::set_ecc(qrcodegen_Ecc ecc) {
|
||||
|
||||
void QrCode::generate_qr_code() {
|
||||
ESP_LOGV(TAG, "Generating QR code");
|
||||
|
||||
#ifdef USE_ESP32
|
||||
// ESP32 has 8KB stack, safe to allocate ~4KB buffer on stack
|
||||
uint8_t tempbuffer[qrcodegen_BUFFER_LEN_MAX];
|
||||
#else
|
||||
// Other platforms (ESP8266: 4KB, RP2040: 2KB, LibreTiny: ~4KB) have smaller stacks
|
||||
// Allocate buffer on heap to avoid stack overflow
|
||||
auto tempbuffer_owner = std::make_unique<uint8_t[]>(qrcodegen_BUFFER_LEN_MAX);
|
||||
uint8_t *tempbuffer = tempbuffer_owner.get();
|
||||
#endif
|
||||
|
||||
if (!qrcodegen_encodeText(this->value_.c_str(), tempbuffer, this->qr_, this->ecc_, qrcodegen_VERSION_MIN,
|
||||
qrcodegen_VERSION_MAX, qrcodegen_Mask_AUTO, true)) {
|
||||
|
||||
Reference in New Issue
Block a user