このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
前回の記事では、Rustを使用したHello, Worldについて紹介しました。今回も同じ題材を使用して、Rustで低レイヤプログラミングを行うための細かなテクニックについて紹介します。
実は、そんな時のために、Rustではインラインアセンブリが書けるようになっています。
<span class="macro" style="box-sizing: border-box; color: #3e999f;">asm</span><span class="macro" style="box-sizing: border-box; color: #3e999f;">!</span>(<span class="ident" style="box-sizing: border-box;">assembly</span> <span class="ident" style="box-sizing: border-box;">template</span>
: <span class="ident" style="box-sizing: border-box;">output</span> <span class="ident" style="box-sizing: border-box;">operands</span>
: <span class="ident" style="box-sizing: border-box;">input</span> <span class="ident" style="box-sizing: border-box;">operands</span>
: <span class="ident" style="box-sizing: border-box;">clobbers</span>
: <span class="ident" style="box-sizing: border-box;">options</span>
);
assembly templateにアセンブリを文字列リテラルで書きます。output/input operandsは、コード中の変数とのインタフェースになります。clobbersには破壊されるレジスタを指定します。optionsには必要であれば”volatile”や”intel”のようなオプションを渡すことが出来ます。
<span class="attribute" style="box-sizing: border-box; color: #c82829;">#[link_section="foo"]</span>
<span class="kw" style="box-sizing: border-box; color: #8959a8;">fn <span class="ident" style="box-sizing: border-box;">foo</span>() {
<span class="comment" style="box-sizing: border-box; color: #8e908c;"><...snip...></span>
}
rustc –target=arm-unknown-linux-gnueabi -C target-cpu=cortex-a9 -C no-stack-check -o hello.o hello.rs
arm-none-eabi-ld -T linker.ld -o hello.elf hello.o
続く?
keisuke.kimura in Livox Mid-360をROS1/ROS2で動かしてみた
Sorry for the delay in replying. I have done SLAM (FAST_LIO) with Livox MID360, but for various reasons I have not be...
Miya in ウエハースケールエンジン向けSimulated Annealingを複数タイルによる並列化で実装しました
作成されたプロファイラがとても良さそうです :) ぜひ詳細を書いていただきたいです!...
Deivaprakash in Livox Mid-360をROS1/ROS2で動かしてみた
Hey guys myself deiva from India currently i am working in this Livox MID360 and eager to knwo whether you have done the...
岩崎システム設計 岩崎 満 in Alveo U50で10G Ethernetを試してみる
仕事の都合で、検索を行い、御社サイトにたどりつきました。 内容は大変参考になりま...
Prabuddhi Wariyapperuma in Livox Mid-360をROS1/ROS2で動かしてみた
This issue was sorted....