diff --git a/examples/bare0.rs b/examples/bare0.rs index fbd8cea31a1c0d5435f01ff6301592b5c1cb96cf..29ff386af66788e50c45729ff07946dde4c6a253 100644 --- a/examples/bare0.rs +++ b/examples/bare0.rs @@ -15,19 +15,15 @@ // no standard main, we declare main using [entry] #![no_main] -// Minimal runtime / startup for Cortex-M microcontrollers -//extern crate cortex_m_rt as rt; // Panic handler, for textual output using semihosting -extern crate panic_semihosting; -// Panic handler, infinite loop on panic -// extern crate panic_halt; +use panic_semihosting as _; // import entry point use cortex_m_rt::entry; // a constant (cannot be changed at run-time) const X_INIT: u32 = 10; -//const X_INIT: u32 = core::u32::MAX; +// const X_INIT: u32 = core::u32::MAX; // global mutable variables (changed using unsafe code) static mut X: u32 = X_INIT; @@ -50,10 +46,10 @@ fn main() -> ! { // Here we assume you are using `vscode` with `cortex-debug`. // -// 0. Compile/build the example in debug (dev) mode. +// 0. Compile/build and run the example in debug (dev) mode. // -// > cargo build --example bare0 -// (or use the vscode build task) +// > cargo run --example bare0 +// (or use vscode) // // 1. Run the program in the debugger, let the program run for a while and // then press pause. diff --git a/examples/bare1.rs b/examples/bare1.rs index acd55f503ad2c9baaaf2fe255cd237a4d67b363e..3c76d7c6f7a48c54a8ddcaf34d7c37c60b3628cf 100644 --- a/examples/bare1.rs +++ b/examples/bare1.rs @@ -10,7 +10,7 @@ #![no_main] #![no_std] -extern crate panic_itm; +use panic_itm as _; use cortex_m_rt::entry; @@ -49,14 +49,14 @@ fn main() -> ! { // // 1. Build and run the application // -// > cargo build --example bare1 -// (or use the vscode build task) +// > cargo run --example bare1 +// (or use the `itm fifo (debug)` or the `itm internal (debug)` launch configuration.) // -// Make sure you have followed the instructions for fifo `ITM` tracing. -// Debug using the `itm fifo (debug)` launch configuration. +// Make sure you have followed the instructions for fifo `ITM` tracing accordingly. // // When debugging the application it should hit the `bkpt` instruction. // What happens when you continue (second iteration of the loop)? +// (passing 3 breakpoints) // // ** your answer here ** // @@ -91,7 +91,7 @@ fn main() -> ! { // Rebuild `bare1.rs` in release (optimized mode). // // > cargo build --example bare1 --release -// (or using the vscode build task) +// (or using the vscode) // // Compare the generated assembly for the loop // between the dev (un-optimized) and release (optimized) build. @@ -109,6 +109,11 @@ fn main() -> ! { // // ** your answer here ** // +// Is there now any reference to the panic handler? +// If not, why is that the case? +// +// ** your answer here ** +// // commit your answers (bare1_3) // // Discussion: @@ -131,7 +136,32 @@ fn main() -> ! { // Later we will demonstrate how we can get guarantees of panic free execution. // This is very important to improve reliability. // -// 4. *Optional +// 4. Now comment out the `read_volatile`. +// +// > cargo build --example bare1 --release +// (or using the vscode) +// +// Compare the generated assembly for the loop +// between the dev (un-optimized) and release (optimized) build. +// +// What is the output of: +// > disassemble +// +// ** your answer here ** +// +// How many instructions are in between the two `bkpt` instructions. +// +// ** your answer here ** +// +// Where is the local variable stored? +// What happened, and why is Rust + LLVM allowed to do that? +// +// ** your answer here ** +// +// commit your answers (bare1_4) +// +// +// 5. *Optional // You can pass additional flags to the Rust `rustc` compiler. // // `-Z force-overflow-checks=off` @@ -144,11 +174,11 @@ fn main() -> ! { // // ** your answer here ** // -// commit your answers (bare1_4) +// commit your answers (bare1_5) // // Now restore the `.cargo/config` to its original state. // -// 5. *Optional +// 6. *Optional // There is another way to conveniently use wrapping arithmetics // without passing flags to the compiler. // @@ -164,7 +194,7 @@ fn main() -> ! { // // ** your answer here ** // -// commit your answers (bare1_5) +// commit your answers (bare1_6) // // Final discussion: //