Crate cortex_m_quickstart [] [src]

A template for building applications for ARM Cortex-M microcontrollers

Usage

  • Clone this crate
$ cargo clone cortex-m-quickstart && cd $_
  • Change the crate name, author and version
$ edit Cargo.toml && head $_
[package]
authors = ["Jorge Aparicio <jorge@japaric.io>"]
name = "demo"
version = "0.1.0"
  • Specify the memory layout of the target device
$ edit memory.x && cat $_
MEMORY
{
  /* NOTE K = KiBi = 1024 bytes */
  FLASH : ORIGIN = 0x08000000, LENGTH = 256K
  RAM : ORIGIN = 0x20000000, LENGTH = 40K
}
  • Optionally, set a default build target
$ cat >>.cargo/config <<'EOF'
[build]
target = "thumbv7em-none-eabihf"
EOF
  • Very likely, depend on a device or a BSP (Board Support Package) crate.
# add a device crate, or
$ cargo add stm32f30x

# add a BSP crate
$ cargo add f3
  • Write the application or start from one of the examples
$ rm -r src/* && cp examples/hello.rs src/main.rs
  • Build the application
# if not installed
$ cargo install xargo

# NOTE this command requires `arm-none-eabi-ld` to be in $PATH
$ xargo build --release

$ arm-none-eabi-readelf -A target/thumbv7em-none-eabihf/release/demo
Attribute Section: aeabi
File Attributes
  Tag_conformance: "2.09"
  Tag_CPU_arch: v7E-M
  Tag_CPU_arch_profile: Microcontroller
  Tag_THUMB_ISA_use: Thumb-2
  Tag_FP_arch: VFPv4-D16
  Tag_ABI_PCS_GOT_use: direct
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_HardFP_use: SP only
  Tag_ABI_VFP_args: VFP registers
  Tag_ABI_optimization_goals: Aggressive Speed
  Tag_CPU_unaligned_access: v6
  Tag_FP_HP_extension: Allowed
  Tag_ABI_FP_16bit_format: IEEE 754

Examples

Check the examples module

Modules

examples

Examples