embedded-trainings-2020/advanced/firmware/src/bin/stack_overflow.rs

35 lines
713 B
Rust
Raw Normal View History

2021-01-22 09:29:21 +00:00
#![no_main]
#![no_std]
use cortex_m::asm;
use cortex_m_rt::entry;
use panic_log as _; // panic handler
#[entry]
fn main() -> ! {
// board initialization
dk::init().unwrap();
2021-01-22 11:40:17 +00:00
log::info!("provoking stack overflow...");
2021-01-22 14:59:13 +00:00
spam(0);
2021-01-22 09:29:21 +00:00
loop {
asm::bkpt();
}
}
#[inline(never)]
2021-01-22 14:59:13 +00:00
fn spam(n: u32) {
2021-01-22 14:21:47 +00:00
// allocate and initialize 4 kilobytes of stack memory to provoke stack overflow
2021-01-22 14:59:13 +00:00
let use_stack = [n; 1024];
2021-01-22 09:29:21 +00:00
2021-01-22 14:18:18 +00:00
log::info!(
2021-01-22 14:59:13 +00:00
"address of current `use_stack` at recursion depth {:?}: {:?}",
use_stack[1023], // "use" use_stack to prevent it from being optimized out
2021-01-22 14:18:18 +00:00
&use_stack as *const u32
);
2021-01-22 11:40:17 +00:00
2021-01-22 14:59:13 +00:00
let next = n + 1;
spam(next); // infinite recursion
2021-01-22 09:29:21 +00:00
}