Firmware won't run when using embedded_graphics

Hi!
I'm trying to get into embedded programming. I got myself ESP32-C3-DevKit-RUST-1, and completed a couple of tutorials, the board is working fine.
However, when I tried using embedded-graphics, the firmware didn't even start execution. Here's the MRE:

use std::{thread, time::Duration};

use embedded_graphics::{
    geometry::Point,
    primitives::{Line, PrimitiveStyle, StyledDrawable},
};
use epd_waveshare::{color::Color, epd7in5_v2::Display7in5};

use log::info;

fn main() -> anyhow::Result<()> {
    esp_idf_svc::sys::link_patches();
    esp_idf_svc::log::EspLogger::initialize_default();
    info!("Init complete");
    let mut display = Display7in5::default();
    Line::new(Point::new(0, 0), Point::new(1, 1))
        .draw_styled(&PrimitiveStyle::with_stroke(Color::Black, 3), &mut display)?;
    loop {
        info!("Done!");
        thread::sleep(Duration::from_secs(1));
    }
}

If I just comment out the .draw_styled() call, it runs! Otherwise, I don't even see the Init complete message. The issue happens with any draw calls.

In the terminal, I get:

I (314) main_task: Calling app_main()
ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0x8 (TG1WDT_SYS_RST),boot:0xc (SPI_FAST_FLASH_BOOT)
Saved PC:0x40380000
0x40380000 - _vector_table
    at ??:??
SPIWP:0xee
mode:DIO, clock div:2
load:0x3fcd5820,len:0x171c
0x3fcd5820 - _ZN12_GLOBAL__N_12mxE
    at ??:??
load:0x403cc710,len:0x968
0x403cc710 - spi_flash_chip_winbond_page_program
    at ??:??
load:0x403ce710,len:0x2f68
0x403ce710 - spi_flash_chip_winbond_page_program
    at ??:??
SHA-256 comparison failed:
Calculated: 1d06b938c0222bf626e0bdf46178b1b37ab24d03f0360fc8fcf7153c2571deaf
Expected: 68d7bdf643ba446b8ed7ae8423241d442fd052b2bc77091100ba06fd65dcf8d5
Attempting to boot anyway...
entry 0x403cc710
0x403cc710 - spi_flash_chip_winbond_page_program
    at ??:??

I'm not sure what's happening, since to my understanding, the call should just fill the buffer, there are no side effects, since I'm not even sending the buffer to a display.

Any help is greatly appreciated :pray:

If you're still needing help you may want to try the #embedded channel in the Rust community discord server. Here is an invite link to the server.

The solution was to allocate the display buffer on heap, not on stack.

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.