1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
//! How to use the heap and a dynamic memory allocator //! //! This example depends on the alloc-cortex-m crate so you'll have to add it to your Cargo.toml: //! //! ``` text //! # or edit the Cargo.toml file manually //! $ cargo add alloc-cortex-m //! ``` //! //! --- //! //! ``` //! //! #![feature(alloc)] //! #![feature(global_allocator)] //! #![feature(lang_items)] //! #![no_main] //! #![no_std] //! //! // This is the allocator crate; you can use a different one //! extern crate alloc_cortex_m; //! #[macro_use] //! extern crate alloc; //! extern crate cortex_m; //! #[macro_use] //! extern crate cortex_m_rt as rt; //! extern crate cortex_m_semihosting as sh; //! extern crate panic_semihosting; //! //! use core::fmt::Write; //! //! use alloc_cortex_m::CortexMHeap; //! use cortex_m::asm; //! use rt::ExceptionFrame; //! use sh::hio; //! //! // this is the allocator the application will use //! #[global_allocator] //! static ALLOCATOR: CortexMHeap = CortexMHeap::empty(); //! //! const HEAP_SIZE: usize = 1024; // in bytes //! //! entry!(main); //! //! fn main() -> ! { //! // Initialize the allocator BEFORE you use it //! unsafe { ALLOCATOR.init(rt::heap_start() as usize, HEAP_SIZE) } //! //! // Growable array allocated on the heap //! let xs = vec![0, 1, 2]; //! //! let mut stdout = hio::hstdout().unwrap(); //! writeln!(stdout, "{:?}", xs).unwrap(); //! //! loop {} //! } //! //! // define what happens in an Out Of Memory (OOM) condition //! #[lang = "oom"] //! #[no_mangle] //! pub fn rust_oom() -> ! { //! asm::bkpt(); //! //! loop {} //! } //! //! exception!(HardFault, hard_fault); //! //! fn hard_fault(ef: &ExceptionFrame) -> ! { //! panic!("HardFault at {:#?}", ef); //! } //! //! exception!(*, default_handler); //! //! fn default_handler(irqn: i16) { //! panic!("Unhandled exception (IRQn = {})", irqn); //! } //! ``` // Auto-generated. Do not modify.