I'm using `embedded-alloc` for my heap and it is setup here https://github.com/bsodmike/arduino-giga-r1-wifi-stm32h747xi-async-quickstart/blob/master/src/mem/mod.rs#L1-L5 and the FMC (aka SDRAM) is setup here https://github.com/bsodmike/arduino-giga-r1-wifi-stm32h747xi-async-quickstart/blob/master/src/main.rs#L107-L249. Notice how I take a `ptr` to just a slice of data within the SDRAM https://github.com/bsodmike/arduino-giga-r1-wifi-stm32h747xi-async-quickstart/blob/master/src/main.rs#L241-L249. This is my log, notice I can step through the main loop once. However, ``` 0.000000 INFO Booting up... └─ stm32h747_async_quickstart::____embassy_main_task::{async_fn#0} @ src/main.rs:89 0.000000 INFO ADC frequency set to 25000000 Hz └─ embassy_stm32::adc::_version::{impl#7}::new @ /Users/mdesilva/.cargo/git/checkouts/embassy-9312dcb0ed774b29/4c7ed5e/embassy-stm32/src/fmt.rs:143 0.017211 INFO Got RTC! 1589538615 └─ stm32h747_async_quickstart::____embassy_main_task::{async_fn#0} @ src/main.rs:104 0.017272 INFO SDRAM Memory Size 0x18 └─ stm32h747_async_quickstart::____embassy_main_task::{async_fn#0}::log2minus1 @ src/main.rs:162 0.017517 INFO RAM contents before writing: [2000000, 0, 3, 4, 0, 0, 0, 0, 0, 0] └─ stm32h747_async_quickstart::____embassy_main_task::{async_fn#0}::log2minus1 @ src/main.rs:254 0.017517 INFO RAM contents after writing: [1, 2, 3, 4, 0, 0, 0, 0, 0, 0] └─ stm32h747_async_quickstart::____embassy_main_task::{async_fn#0}::log2minus1 @ src/main.rs:261 0.017517 INFO Assertions succeeded. └─ stm32h747_async_quickstart::____embassy_main_task::{async_fn#0}::log2minus1 @ src/main.rs:268 1.742309 INFO high └─ stm32h747_async_quickstart::____embassy_main_task::{async_fn#0}::log2minus1 @ src/main.rs:271 4.042327 INFO low └─ stm32h747_async_quickstart::____embassy_main_task::{async_fn#0}::log2minus1 @ src/main.rs:275 4.342346 INFO vrefint: 24575 └─ stm32h747_async_quickstart::____embassy_main_task::{async_fn#0}::log2minus1 @ src/main.rs:280 4.342346 INFO measured: 14974 └─ stm32h747_async_quickstart::____embassy_main_task::{async_fn#0}::log2minus1 @ src/main.rs:282 4.842346 INFO loop: Got RTC! Fri, 15 May 2020 10:30:19 +0000 └─ stm32h747_async_quickstart::____embassy_main_task::{async_fn#0}::log2minus1 @ src/main.rs:291 // This ends up in a HardFault. ``` Notice the code here: ```rust let now: NaiveDateTime = rtc.now().unwrap().into(); let dt_opt = chrono::DateTime::::from_timestamp(now.timestamp() as i64, 0); if let Some(dt) = dt_opt { // NOTE: this only works due to alloc. It works though as we can see it in the first `loop()` iteration of `main()`. let dt_rfc2822 = dt.to_rfc2822(); let now = dt_rfc2822.as_str(); // let now = dt.timestamp(); info!("loop: Got RTC! {=str}", now); // <---- This is where the drop takes place } ``` The call to `dealloc` gets handled here: https://github.com/rust-embedded/embedded-alloc/blob/master/src/llff.rs#L82 The dealloc tries to enter a critical section. The call to `unsafe { f(CriticalSection::new()) }` proceeds into a [HardFault](https://github.com/rust-embedded/cortex-m/blob/6df9a38585a9552970523c26ea5c7f3eccfe2742/cortex-m-rt/src/lib.rs#L1053). See: https://github.com/rust-embedded/critical-section/blob/main/src/lib.rs#L239 Any ideas re. the dealloc here?