//! main.rs #![deny(unsafe_code)] #![deny(warnings)] #![no_main] #![no_std] // use panic_halt as _; use panic_rtt_target as _; use rtt_target::{rprintln, rtt_init_print}; use stm32f4; #[rtic::app(device = stm32f4)] const APP: () = { #[init] fn init(_cx: init::Context) { rtt_init_print!(); rprintln!("init"); } #[idle] fn idle(_cx: idle::Context) -> ! { rprintln!("idle"); // panic!("panic"); loop { continue; } } }; // A) A Simple Trace // > cargo run // cargo run // Compiling app v0.1.0 (/home/pln/courses/d7020e/rtic_f4xx_nucleo) // Finished dev [unoptimized + debuginfo] target(s) in 0.18s // Running `probe-run --chip STM32F411RETx target/thumbv7em-none-eabi/debug/app` // (HOST) INFO flashing program (15.06 KiB) // (HOST) INFO success! // ──────────────────────────────────────────────────────────────────────────────── // init // idle // // B) Breaking // Now press Ctrl-C // ^Cstack backtrace: // 0: app::idle // at src/main.rs:25 // 1: main // at src/main.rs:13 // 2: Reset // at /home/pln/.cargo/registry/src/github.com-1ecc6299db9ec823/cortex-m-rt-0.6.13/src/lib.rs:526 // // Make sure you got the expected output // // C) Panic tracing // Rust is designed for reliability, with the aim to deliver memory safety // and defined behavior at all times. // Recoverable errors (in libraries and user code) should use the `Result<T,E>` type, // while unrecoverable errors should `panic`. // // Let's introduce a `panic` (uncomment line 24). // > cargo run // // What is the output? // // [Your answer here] // // D) Panic halt // Tracing is nice during development, but requires a debugger attached // and a host listening. For a deployed product, other `panic` behavior // should be adopted (e.g. storing to flash, for later post-mortem debugging) // or just reset:ing the device. In this example we chose just to `halt` // // Enable `panic_halt` (line 8). // > cargo run // // What is the output? // // [Your answer here] // // Now press Ctrl-C // // What is the output? // // [Your answer here] // // E) Find the source // Figure out how to find the source of `panic_halt`, and look at the implementation. // // - `cargo doc --open` (you need to disable the rtt-panic handler in `Cargo.toml`). // - `crates.io` // // Paste the implementation here // [Your answer here]