jpskill.com
🛠️ 開発・MCP コミュニティ

embedded-systems

RTOSや組み込みLinux、ベアメタルプログラミングに精通し、高信頼性ファームウェア開発をRustで実現するSkill。

📜 元の英語説明(参考)

Expert in RTOS, bare-metal programming, and embedded Linux. Specializes in Rust for Embedded and high-reliability firmware.

🇯🇵 日本人クリエイター向け解説

一言でいうと

RTOSや組み込みLinux、ベアメタルプログラミングに精通し、高信頼性ファームウェア開発をRustで実現するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-17
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

組み込みシステムエンジニア

目的

RTOS、ベアメタルファームウェア、Embedded Linuxに特化した組み込みソフトウェア開発の専門知識を提供します。マイクロコントローラー(STM32、ESP32)およびEmbedded Linuxシステム向けのセーフティクリティカルなコード、電力最適化、ハードウェア抽象化に重点を置いています。

使用する場面

  • マイクロコントローラー(STM32、NXP、ESP32)のファームウェアを作成する場合
  • リアルタイムオペレーティングシステム(Zephyr、FreeRTOS)を設定する場合
  • センサー/周辺機器(I2C、SPI、UART)のドライバーを開発する場合
  • Embedded Linuxシステム(Yocto、Buildroot)を構築する場合
  • OTA(Over-The-Air)アップデートメカニズムを実装する場合
  • クラッシュダンプを分析したり、ハードウェア障害(JTAG/SWD)をデバッグしたりする場合


2. 意思決定フレームワーク

OSの選択

What is the hardware capability?
│
├─ **Microcontroller (MCU) - < 1MB RAM**
│  ├─ Hard Real-Time? → **Zephyr / FreeRTOS** (Preemptive scheduler)
│  ├─ Safety Critical? → **SafeRTOS / Rust (Bare Metal)**
│  └─ Simple Loop? → **Bare Metal (Superloop)**
│
└─ **Microprocessor (MPU) - > 64MB RAM**
   ├─ Complex UI / Networking? → **Embedded Linux (Yocto/Buildroot)**
   └─ Hard Real-Time? → **RT-Linux (PREEMPT_RT)** or **Dual Core (Linux + MCU)**

言語の選択(2026年標準)

言語 ユースケース 推奨事項
C (C11/C17) レガシー / HALs いまだ主流です。厳格な静的解析(MISRA)を使用してください。
C++ (C++20) 複雑なロジック 組み込み向けには noexceptno-rtti を使用してください。ゼロコスト抽象化を活用します。
Rust 新規プロジェクト 強く推奨します。 GCなしでメモリ安全性を実現します。embedded-hal を使用します。
MicroPython プロトタイピング 迅速なテストには適していますが、本番のリアルタイム処理には不向きです。

アップデート戦略(OTA)

  1. デュアルバンク(A/B): 安全ですが、フラッシュが2倍必要です。
  2. 圧縮イメージ: フラッシュを節約しますが、解凍のためにRAMが必要です。
  3. 差分アップデート: 最小限の帯域幅で済みますが、パッチ適用ロジックが複雑です。

危険信号 → security-engineer にエスカレートしてください:

  • 生産ユニットでJTAGポートが開放されたままになっている
  • セキュアブートキーがプレーンテキストコードで保存されている
  • ファームウェアアップデートが署名されていない(整合性チェックのみで、認証がない)
  • Cコードで strcpy や境界のないバッファを使用している


ワークフロー 2: Zephyr RTOSアプリケーション

目標: I2C経由でセンサーを読み取り、コンソールに出力します。

手順:

  1. デバイスツリー (app.overlay)

    &i2c1 {
        status = "okay";
        bme280@76 {
            compatible = "bosch,bme280";
            reg = <0x76>;
            label = "BME280";
        };
    };
  2. 設定 (prj.conf)

    CONFIG_I2C=y
    CONFIG_SENSOR=y
    CONFIG_CBPRINTF_FP_SUPPORT=y
  3. コード (main.c)

    #include <zephyr/kernel.h>
    #include <zephyr/device.h>
    #include <zephyr/drivers/sensor.h>
    
    void main(void) {
        const struct device *dev = DEVICE_DT_GET_ANY(bosch_bme280);
    
        while (1) {
            sensor_sample_fetch(dev);
            struct sensor_value temp;
            sensor_channel_get(dev, SENSOR_CHAN_AMBIENT_TEMP, &temp);
            printk("Temp: %d.%06d C\n", temp.val1, temp.val2);
            k_sleep(K_SECONDS(1));
        }
    }


4. パターンとテンプレート

パターン 1: ステートマシン(ベアメタル)

ユースケース: OSなしで複雑なデバイスロジックを処理する場合。

typedef enum { STATE_IDLE, STATE_READING, STATE_SENDING, STATE_ERROR } SystemState;

void loop() {
    static SystemState state = STATE_IDLE;

    switch(state) {
        case STATE_IDLE:
            if (timerExpired()) state = STATE_READING;
            break;
        case STATE_READING:
            if (readSensor()) state = STATE_SENDING;
            else state = STATE_ERROR;
            break;
        case STATE_SENDING:
            sendData();
            state = STATE_IDLE;
            break;
        // ...
    }
}

パターン 2: 割り込み遅延処理

ユースケース: ISR(割り込みサービスルーチン)を短く保つ場合。

  • ISR: フラグを設定するか、リングバッファにデータをプッシュします。すぐに戻ります。
  • メインループ / タスク: バッファ/フラグをチェックし、データを処理します(例:GPS NMEA文字列の解析)。
  • なぜか? 長いISRは他の割り込みをブロックし、システムをクラッシュさせます。

パターン 3: ウォッチドッグフィーダー

ユースケース: システムがフリーズした場合に自動リセットする場合。

void watchdog_task(void *pvParameters) {
    while(1) {
        // Only kick if critical flags are set
        if (check_system_health()) {
            wdt_feed();
        }
        vTaskDelay(1000);
    }
}


6. 統合パターン

iot-engineer:

  • 引き渡し: 組み込みエンジニアがドライバー(I2C)を作成 → IoTエンジニアがMQTTロジックを作成します。
  • 共同作業: 電力バジェット(無線を起動する頻度)。
  • ツール: Power Profiler。

mobile-app-developer:

  • 引き渡し: 組み込みエンジニアがBLE GATTサーバーを実装 → モバイル開発者がクライアントを実装します。
  • 共同作業: GATTサービス/キャラクタリスティックUUIDの定義。
  • ツール: nRF Connect。

cloud-architect:

  • 引き渡し: 組み込みエンジニアがOTAエージェントを実装 → クラウドアーキテクトがアップデートサーバー(S3/署名付きURL)を実装します。
  • 共同作業: セキュリティトークン形式(JWT/X.509)。
  • ツール: AWS IoT Jobs。

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Embedded Systems Engineer

Purpose

Provides embedded software development expertise specializing in RTOS, bare-metal firmware, and Embedded Linux. Focuses on safety-critical code, power optimization, and hardware abstraction for microcontrollers (STM32, ESP32) and embedded Linux systems.

When to Use

  • Writing firmware for microcontrollers (STM32, NXP, ESP32)
  • Configuring Real-Time Operating Systems (Zephyr, FreeRTOS)
  • Developing drivers for sensors/peripherals (I2C, SPI, UART)
  • Building Embedded Linux systems (Yocto, Buildroot)
  • Implementing OTA (Over-The-Air) update mechanisms
  • Analyzing crash dumps or debugging hardware faults (JTAG/SWD)


2. Decision Framework

OS Selection

What is the hardware capability?
│
├─ **Microcontroller (MCU) - < 1MB RAM**
│  ├─ Hard Real-Time? → **Zephyr / FreeRTOS** (Preemptive scheduler)
│  ├─ Safety Critical? → **SafeRTOS / Rust (Bare Metal)**
│  └─ Simple Loop? → **Bare Metal (Superloop)**
│
└─ **Microprocessor (MPU) - > 64MB RAM**
   ├─ Complex UI / Networking? → **Embedded Linux (Yocto/Buildroot)**
   └─ Hard Real-Time? → **RT-Linux (PREEMPT_RT)** or **Dual Core (Linux + MCU)**

Language Choice (2026 Standards)

Language Use Case Recommendation
C (C11/C17) Legacy / HALs Still dominant. Use strict static analysis (MISRA).
C++ (C++20) Complex Logic Use noexcept, no-rtti for embedded. Zero-cost abstractions.
Rust New Projects Highly Recommended. Memory safety without GC. embedded-hal.
MicroPython Prototyping Good for rapid testing, bad for production real-time.

Update Strategy (OTA)

  1. Dual Bank (A/B): Safe but requires 2x Flash.
  2. Compressed Image: Saves Flash, requires RAM for decompression.
  3. Delta Updates: Minimal bandwidth, complex patching logic.

Red Flags → Escalate to security-engineer:

  • JTAG port left open in production units
  • Secure Boot keys stored in plain text code
  • Firmware updates not signed (integrity check only, no authenticity)
  • Using strcpy or unbounded buffers in C code


Workflow 2: Zephyr RTOS Application

Goal: Read sensor via I2C and print to console.

Steps:

  1. Device Tree (app.overlay)

    &i2c1 {
        status = "okay";
        bme280@76 {
            compatible = "bosch,bme280";
            reg = <0x76>;
            label = "BME280";
        };
    };
  2. Configuration (prj.conf)

    CONFIG_I2C=y
    CONFIG_SENSOR=y
    CONFIG_CBPRINTF_FP_SUPPORT=y
  3. Code (main.c)

    #include <zephyr/kernel.h>
    #include <zephyr/device.h>
    #include <zephyr/drivers/sensor.h>
    
    void main(void) {
        const struct device *dev = DEVICE_DT_GET_ANY(bosch_bme280);
    
        while (1) {
            sensor_sample_fetch(dev);
            struct sensor_value temp;
            sensor_channel_get(dev, SENSOR_CHAN_AMBIENT_TEMP, &temp);
            printk("Temp: %d.%06d C\n", temp.val1, temp.val2);
            k_sleep(K_SECONDS(1));
        }
    }


4. Patterns & Templates

Pattern 1: State Machine (Bare Metal)

Use case: Handling complex device logic without an OS.

typedef enum { STATE_IDLE, STATE_READING, STATE_SENDING, STATE_ERROR } SystemState;

void loop() {
    static SystemState state = STATE_IDLE;

    switch(state) {
        case STATE_IDLE:
            if (timerExpired()) state = STATE_READING;
            break;
        case STATE_READING:
            if (readSensor()) state = STATE_SENDING;
            else state = STATE_ERROR;
            break;
        case STATE_SENDING:
            sendData();
            state = STATE_IDLE;
            break;
        // ...
    }
}

Pattern 2: Interrupt Deferred Processing

Use case: Keeping ISRs (Interrupt Service Routines) short.

  • ISR: Set a flag or push data to a ring buffer. Return immediately.
  • Main Loop / Task: Check buffer/flag and process data (e.g., parse GPS NMEA string).
  • Why? Long ISRs block other interrupts and crash the system.

Pattern 3: Watchdog Feeder

Use case: Auto-reset if the system freezes.

void watchdog_task(void *pvParameters) {
    while(1) {
        // Only kick if critical flags are set
        if (check_system_health()) {
            wdt_feed();
        }
        vTaskDelay(1000);
    }
}


6. Integration Patterns

iot-engineer:

  • Handoff: Embedded Eng writes the driver (I2C) → IoT Eng writes the MQTT logic.
  • Collaboration: Power budget (how often to wake up radio).
  • Tools: Power Profiler.

mobile-app-developer:

  • Handoff: Embedded Eng implements BLE GATT Server → Mobile Dev implements Client.
  • Collaboration: Defining the GATT Service/Characteristic UUIDs.
  • Tools: nRF Connect.

cloud-architect:

  • Handoff: Embedded Eng implements OTA agent → Cloud Architect implements Update Server (S3/Signed URL).
  • Collaboration: Security token format (JWT/X.509).
  • Tools: AWS IoT Jobs.