ATmega8 × Rust × NixOS:モダンな環境でLチカ備忘録


はじめに

ATmega8をRustで動かした時の記録です。 NixOSユーザーとして、環境構築からデプロイまでを flake.nix で管理し、型安全なLチカを実現します。

1. 開発環境の自動化 (flake.nix)

AVR向けのツールチェーン管理は flake.nix にお任せします。nix develop で環境が整います。

{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
rust-overlay.url = "github:oxalica/rust-overlay";
};

outputs = { self, nixpkgs, rust-overlay }:
let
system = "x86_64-linux";
pkgs = import nixpkgs {
inherit system;
overlays = [ (import rust-overlay) ];
};
rustToolchain = pkgs.rust-bin.nightly.latest.default.override {
targets = [ "avr-atmel-sys" ];
extensions = [ "rust-src" ];
};
in
{
devShells.${system}.default = pkgs.mkShell {
buildInputs = with pkgs; [
rustToolchain
pkgs.avrdude
pkgs.avrgcc
pkgs.ravedude
];
};
};
}

2. プロジェクト設定 (Cargo.toml)

ATmega8のFlash(8KB)に収めるため、リリースプロファイルの最適化が必須です。

[package]
name = "atmega8-blink"
version = "0.1.0"
edition = "2021"

[dependencies]
panic-halt = "0.2.0"
atmega-hal = { git = "[https://github.com/rahix/avr-hal](https://github.com/rahix/avr-hal)", features = ["atmega8"] }

[profile.release]
panic = "abort"
lto = true
opt-level = "z"