none - The rustc book (original) (raw)
The rustc book
avr-none
Series of microcontrollers from Atmel: ATmega8, ATmega328p etc.
Tier: 3
Target maintainers
Requirements
This target is only cross-compiled; x86-64 Linux, x86-64 macOS and aarch64 macOS hosts are confirmed to work, but in principle any machine able to run rustc and avr-gcc should be good.
Compiling for this target requires avr-gcc
installed, because a couple of intrinsics (like 32-bit multiplication) rely on libgccand can't be provided through compiler-builtins
yet. This is a limitation thatwe hope to lift in the future.
You'll also need to setup the .cargo/config
file - see below for details.
Building the target
Rust comes with AVR support enabled, you don't have to rebuild the compiler.
Building Rust programs
Install avr-gcc
:
# Ubuntu:
$ sudo apt-get install gcc-avr
# Mac:
$ brew tap osx-cross/avr && brew install avr-gcc
# NixOS (takes a couple of minutes, since it's not provided through Hydra):
$ nix shell nixpkgs#pkgsCross.avr.buildPackages.gcc11
... setup .cargo/config
for your project:
[build]
target = "avr-none"
rustflags = ["-C", "target-cpu=atmega328p"]
[unstable]
build-std = ["core"]
... and then simply run:
$ cargo build --release
The final binary will be placed into./target/avr-none/release/your-project.elf
.
Note that since AVRs have rather small amounts of registers, ROM and RAM, it's recommended to always use --release
to avoid running out of space.
Also, please note that specifying -C target-cpu
is required - here's a list of the possible variants:
Testing
You can use simavr to emulate the resulting firmware on your machine:
$ simavr -m atmega328p ./target/avr-none/release/your-project.elf
Alternatively, if you want to write a couple of actual #[test]
s, you can useavr-tester.