組み込みのRTOS事情2026〜Zephyr・FreeRTOS・組み込みLinux、いつどれを選ぶ?〜
RTOSとは何か、ベアメタルや組み込みLinuxと何が違うのか。Zephyr 4.4.0とFreeRTOS 11.3.0をQEMUで動かし、同じ仕事を3通りで書いて比べました。焼かれるサイズは31倍に増えるのに、手で書く行数は180→207→46と山になります。「重い処理に周期を壊される」のはRTOSの有無ではなく置き場所の問題で、ベアメタルでも12バイトで直りました。
プログラミングや3DCGで何か作りたいと思っているエンジニアがいます
RTOSとは何か、ベアメタルや組み込みLinuxと何が違うのか。Zephyr 4.4.0とFreeRTOS 11.3.0をQEMUで動かし、同じ仕事を3通りで書いて比べました。焼かれるサイズは31倍に増えるのに、手で書く行数は180→207→46と山になります。「重い処理に周期を壊される」のはRTOSの有無ではなく置き場所の問題で、ベアメタルでも12バイトで直りました。
DLLとは何か、なぜDLLにするのか、何の言語で作れるのか。小さなDLLを実際に作って確かめました。★C++とRustは1つのDLLに同居できます。ただし「公開する関数を明示しない」ときの壊れ方がmacOSとWindowsで正反対でした(macOSは1,688個も漏れる/Windowsは5個しか出ず使えない)。理由は逆なのに、対処は同じです。
拡張子を並べても違いは分かりません。同じライブラリを静的・動的の両方で作り、macOSとWindowsで実測しました。軸は「いつ名前が解決されるか」の1つだけ。★静的リンクは関数ではなくオブジェクトファイル単位で取り込むため、呼んでいない関数が16KiB付いてきます。★.dylibを.soに改名しても読めるので、決めているのは拡張子ではなく中身の形式でした。
FlutterからネイティブへC++で架けた橋を、そのままRustで架け替えて比べました。生のC ABIならRust 0.0089µs・C++ 0.0091µsで一致し、橋の材質は速度に関係ないと分かります。一方 flutter_rust_bridge は既定で1,442倍。さらにWindowsでは「渡った先が支配的」という前提が崩れ、Smart App Controlに阻まれてビルドすらできませんでした。
組み込み開発でRustはどこまで実用になったのかを、①書けるか ②安全認証を通せるか ③現場が乗り換えるか の3層に分けて整理しました。Cortex-M3向けに「素のベアメタル」「cortex-m-rt」「Embassy」の3つの書き方で同じプログラムを作り、QEMUで動かして実測。短く書けるほど焼かれるサイズが大きくなる関係や、Ferroceneの認証、AUTOSAR互換RTOSが無い問題まで、目的別の判断表にまとめています。
ボードを1枚も買わずに、OSの無い世界のプログラムをMacで動かしました。QEMUとクロスコンパイラをHomebrewで入れて、スタートアップ・リンカスクリプト・UARTだけの最小構成でARMを起動(text 1,242バイト)。同じものをRISC-V(886バイト)とRustのno_std(870バイト)でも書いて比較。GDBでレジスタとメモリを覗く手順、そして「QEMUでは動くのに実機では一文字も出ない」UART未初期化のつまずきまで、全コードと実測ログ付きで記録します。
組み込み系エンジニアがRustに入門!AndroidカーネルやWindowsへの採用で注目のRustを、C言語使いの目線で解説。所有権・借用・ライフタイムの概念からC言語との文法比較まで。
C言語の開発環境の用意からHello World、変数・条件分岐・繰り返し・関数・配列、そして最大の関門であるポインタ、文字列操作、ファイル入出力、関数マクロ、ビット演算、動的メモリ確保、構造体までを1本にまとめました。ポインタは図で仕組みから説明し、配列の範囲外アクセスやmalloc/freeの対応など、つまずきやすい点も添えています。