Select Git revision
rtic_bare6.rs
Forked from
Per Lindgren / e7020e_2021
Source project has a limited visibility.
bare3.rs 2.06 KiB
//! bare3.rs
//! Simple bare metal application
//!
#![feature(used)]
#![no_std]
extern crate cortex_m;
extern crate cortex_m_rt;
use core::str;
#[macro_use]
extern crate cortex_m_debug;
fn main() {
let s = "ABCD";
let bs = s.as_bytes();
ipln!("s = {}", s);
ipln!("bs = {:?}", bs);
ipln!("iterate over slice");
for c in bs {
ip!("{},", c)
}
let mut a = [65u8; 4];
//let mut a = [0u8; 4];
ipln!();
ipln!("iterate iterate using (raw) indexing");
for i in 0..s.len() {
ip!("{},", bs[i]);
}
ipln!();
ipln!("a = {}", str::from_utf8(&a).unwrap());
loop {}
}
// 1. build and run the application (debug build)
// start ITM tracing to console *version 0.1.1*
// > itmdump /tmp/itm.log
// or alternatively *version 0.2.0*
// > mkfifo /tmp/itm.log
// > itmdump -f /tmp/itm.log -F
//
// start openocd (in my case...)
// > openocd -f interface/stlink.cfg -f target/stm32f4x.cfg
//
// what is the output in the ITM console
// ** your answer here **
//
// what is the type of `s`
// ** your answer here **
//
// what is the type of `bs`
// ** your answer here **
//
// what is the type of `c`
// ** your answer here **
//
// what is the type of `a`
// ** your answer here **
//
// what is the type of `i`
// ** your answer here **
//
// commit your answers (bare3_1)
//
// 2. make types of `s`, `bs`, `c`, `a`, `i` explicit
//
// commit your answers (bare3_2)
//
// 3. uncomment line 28 (let mut a = [0u8; 4];)
// what happens and why
// ** your answer here **
//
// commit your answers (bare3_3)
//
// 4. alter the program so that the data from `bs` is copied byte by byte into `a`
// implement your solution
//
// commit your answers (bare3_4)
//
// 5. look for a way to make this copy done without a loop
// implement your solution
//
// commit your answers (bare3_5)
// As we are not using interrupts, we just register a dummy catch all handler
#[link_section = ".vector_table.interrupts"]
#[used]
static INTERRUPTS: [extern "C" fn(); 240] = [default_handler; 240];
extern "C" fn default_handler() {
cortex_m::asm::bkpt();
}