初心者が組み込みRustやってみる - その2

初心者が組み込みRustやってみる - その1 - kanno's blog
のつづき。

5. LEDルーレット

github.com

こちらのリポジトリからテンプレートをクローンしてきて実行する。

5.1 ビルド

以下のコマンドがうまくいかず。

cargo readobj --target thumbv7em-none-eabihf --bin led-roulette -- -file-headers

github.com

のIssueを参考に cargo-binutils のバージョンを0.3.0に上げてみたところ、うまくいった。

5.5 課題

8つのLEDを順番に点灯、消灯させる課題が与えられる。

以下のような実装で実現できた。

#![deny(unsafe_code)]
#![no_main]
#![no_std]

use aux5::{entry, prelude::*, Delay, Leds};

#[entry]
fn main() -> ! {
    let (mut delay, mut leds): (Delay, Leds) = aux5::init();

    let half_period = 50_u16;

    let mut prev = 0;
    let mut curr = 1;
    loop {
        leds[curr].on();
        delay.delay_ms(half_period);

        leds[prev].off();
        delay.delay_ms(half_period);

        prev = curr;
        curr = (curr + 1) % 8;
    }
}