Rust

Rustのプロジェクトの中でCを使う

この記事ではRustのビルドシステムであるCargoを使って、Cのコードをビルドし、それをRustのコードから呼び出す方法について紹介します。 ※記事作成時のRustのバージョンはrustc 1.33.0です。 この記事で取り扱うRustの知識とクレートは次の通りです。 build…

Rustでプラットフォーム依存の処理を書く

#[cfg(...)] Attribute Rustでは #[cfg(...)] アトリビュートを使うことによって、OSやCPUに応じた条件コンパイルを行うことができる。 Conditional Compilation cfgは複数条件指定可能(OR, AND, NOT) #[cfg(any(unix, windows))] #[cfg(all(unix, target_…

RustのRange指定

RustのRange .. は[start..end)の半開区間だが、 ..= を使うことで、[start..=end]の閉区間にすることができる。 for i in 0..5 { print!("{},", i); } // => 0,1,2,3,4 for i in 0..=5 { print!("{},", i); } // => 0,1,2,3,4,5 また、matchに使われる ... …

Rust: Xargoとarm-binutils無しでCortex-Mターゲットのファームウェアをビルドする

2018年4月、Rustでの組み込みプログラミング環境に2つの大きなニュースが舞い込んできた。 Xargo と arm-none-eabi-lld 無しでCortex-M向けのビルドが可能に PSA: You no longer need Xargo to do ARM Cortex-M development#rustlanghttps://t.co/C6VhbyM0t…

Rustの構造体メモリレイアウト

Rustの構造体のメモリレイアウトについてのメモ。 Rustで次のような構造体を定義したときに、構造体のメモリレイアウトはどうなるか? struct Layout { b1: u8, s1: u16, b2: u8, w1: u32, b3: u8, w2: u32, s2: u16, s3: u16, } 検証時のRustのバージョンは…

RustでのIOストリーム処理

Go言語のio.Reader, io.Writer interfaceを使ったio.Cooyのような処理をRustで行うためには、std::io::Read traitとstd::io::Write traitを使って各ストリームを扱えばいい。 標準入力から標準出力へデータをコピーするサンプルコードを次に書く。 copy関数…

Rustでクロスコンパイル

x86_64-unknown-linux-gnuのホスト環境上で、CHIP向けのバイナリをRustでクロスコンパイルすることを目的とする。 概要 rustup target add ${target_triple} でターゲットのツールチェインを追加 ターゲットのリンカをインストール Cargoのconfigファイルに…