1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[備忘録] Rust で Arduino Uno の L チカをするまで

Posted at

ファームウェアの実装

ruduino SDK を使えばファームウェアはシュッと書ける
https://github.com/avr-rust/ruduino

Arduino Uno は atmega328p なのでそのファイルを参照する。
https://github.com/avr-rust/ruduino/blob/master/src/cores/atmega328p.rs

Pin Mapping は以下のページにある。例えば digital pin の 5 番は PD5 なのでファイル内でそれを探せば良い。
https://www.arduino.cc/en/Hacking/PinMapping168

ビルド環境の準備

AVR-Rust というものを使う。これで cargo コマンドで AVR のビルド環境が構築できる。
https://www.avr-rust.com/

インストールは以下を参照
https://book.avr-rust.com/002.1-installing-required-third-party-tools.html

AVR 向けの tool chain は nightly にしかないので以下のようにして nightly ビルドの環境を整える必要がある。

$ rustup update
$ rustup toolchain install nightly
$ rustup component add rust-src --toolchain nightly
$ rustup override set nightly

Arduino Uno (atmega328p) はビルトインのターゲットに存在しないので avr-atmega328p.json という名前でファイルを作りカスタムターゲットを用意する。

{
  "arch": "avr",
  "cpu": "atmega328p",
  "data-layout": "e-P1-p:16:8-i8:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8-a:8",
  "env": "",
  "executables": true,
  "linker": "avr-gcc",
  "linker-flavor": "gcc",
  "linker-is-gnu": true,
  "llvm-target": "avr-unknown-unknown",
  "no-compiler-rt": true,
  "os": "unknown",
  "position-independent-executables": false,
  "exe-suffix": ".elf",
  "eh-frame-header": false,
  "pre-link-args": {
    "gcc": ["-mmcu=atmega328p"]
  },
  "late-link-args": {
    "gcc": ["-lgcc", "-lc"]
  },
  "target-c-int-width": "16",
  "target-endian": "little",
  "target-pointer-width": "16",
  "vendor": "unknown"
}

ここまで進めると以下のようにビルドができるようになる。 target/avr-atmega328p/release/{Cargo.toml の name}.elf に実行ファイルが生成される。

$ export AVR_CPU_FREQUENCY_HZ=16000000
$ cargo build -Z build-std=core --target avr-atmega328p.json --release

ファームウェアの書き込みは以下のコマンドでできる。

$ sudo avrdude -p m328p -c arduino -P {Arduino が接続されているポート} -U flash:w:{実行ファイルへのパス}:e
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?