Module cortex_m_quickstart::examples::_1_itm [] [src]

Sends "Hello, world!" through the ITM port 0

IMPORTANT Not all Cortex-M chips support ITM. You'll have to connect the microcontroller's SWO pin to the SWD interface. Note that some development boards don't provide this option.

ITM is much faster than semihosting. Like 4 orders of magnitude or so.

You'll need itmdump to receive the message on the host plus you'll need to uncomment OpenOCD's ITM support in .gdbinit.

 
#![feature(used)]
#![no_std]
 
#[macro_use]
extern crate cortex_m;
extern crate cortex_m_rt;
 
use cortex_m::{asm, interrupt, peripheral};
 
fn main() {
    interrupt::free(
        |cs| {
            let itm = peripheral::ITM.borrow(&cs);
 
            iprintln!(&itm.stim[0], "Hello, world!");
        },
    );
}
 
// As we are not using interrupts, we just register a dummy catch all handler
#[allow(dead_code)]
#[used]
#[link_section = ".rodata.interrupts"]
static INTERRUPTS: [extern "C" fn(); 240] = [default_handler; 240];
 
extern "C" fn default_handler() {
    asm::bkpt();
}