コンテンツにスキップ
PR

組込み・低レイヤーで使う言語

マイコンやOS寄りはC/C++が基本です。新規の安全性重視ではRustも候補になります。

  • C
  • C++
  • Rust
  • Bash
目的見るポイント
早く作る公式ドキュメント、サンプル、既存資産
長く保守する型、テスト、パッケージ管理、採用しやすさ
学習する最初の成功体験、教材、開発環境

追加調査で押さえる実務ポイント

組込み・低レイヤーで使う言語は、CPU、memory、interrupt、register、device、realtime制約へどこまで直接触れるかで選びます。「低級言語」は単に難しい言語を指すのではなく、hardware表現へ近く、runtime抽象化が小さい言語・assemblyを指す文脈があります。MCU、Linux SoC、safety、battery、memory量、vendor SDKを先に決めて、C、C++、Rust、Ada、Zig、assembly等を比較します。

目的から選ぶ

条件候補
小型MCU・vendor SDKC
C++ library・RTOSC++
memory safetyRust
safety-criticalAda、SPARK
C置換を試すC3、Zig
register直接制御Assembly / C
TinyGo ecosystemTinyGo
Linux SBCC、C++、Rust、Go

「低級言語」の整理

用語意味
machine codeCPU instructionのbinary
assemblymnemonicによるCPU命令
low-level languagehardware抽象が小さい
system languageOS・runtime・driver向け
embedded language組込み用途で使われる言語

Cはassemblyより高水準ですが、一般にsystem programming languageとして扱われます。

選定軸

  1. CPU architecture。
  2. RAM/flash。
  3. realtime。
  4. interrupt。
  5. vendor SDK。
  6. compiler。
  7. debugger。
  8. certification。
  9. power。
  10. update。

最小例: memory-mapped register

#define GPIO_OUT (*(volatile unsigned int *)0x40020014u)

int main(void) {
    GPIO_OUT = 1u;
    for (;;) {
    }
}

addressは架空例です。実機ではdatasheetとvendor headerを使います。

CとRust

Cはvendor SDKと既存codeが豊富です。Rustはownershipとtype systemでmemory errorを減らせますが、target support、HAL、debugger、unsafe boundaryを確認します。

Ada/SPARK

Adaはstrong typing、tasking、range checkを備え、SPARKはformal verificationを追加します。certification toolchainとruntime profileを確認します。

RTOSとの関係

languageとRTOSは別です。FreeRTOS、Zephyr、NuttX等がscheduler、driver、network stackを提供し、その上でCやRust等を使います。

Bare metalとLinux

環境主な制約
bare metalstartup、interrupt、linker
RTOStask、priority、stack
embedded Linuxprocess、MMU、driver
FPGA softcoretoolchain、custom peripheral

採用を保留する条件

  • target未対応
  • vendor driverなし
  • debuggerなし
  • safety evidence不足
  • binary size超過
  • interrupt latency不明
  • OTA/rollback未設計

次に読む

参考リンク