embedded-c について
マイクロコントローラーやIoTデバイスを対象とする、組み込みシステム開発向けのC/C++スキルです。ハードウェア制御、通信プロトコル、制約のある環境でのメモリと消費電力の最適化を扱います。
主な機能
- 01GPIO、タイマー、割り込みコードの生成
- 02メモリとフラッシュ使用量の最適化
- 03I2C、SPI、UART通信への対応
- 04ファームウェアとハードウェア制御ロジックの開発
- 05低レベルコードの実践指針
活用シーン
- 01マイクロコントローラー向けセンサー読み取りコードの作成
- 02ボタンやLEDなどのハードウェア制御の実装
- 03IoTデバイスのリソース使用量の最適化
- 04リアルタイムシステムや通信コードのデバッグ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill embedded-cインストール後、Claude Code で/embedded-cを入力して読み込まれたか確認します。
詳細
embedded-c
目的
このスキルは、マイクロコントローラー(Arduino、STM32 など)や IoT デバイスを中心に、組み込みシステム向けの C/C++ プログラミングに関する専門知識を提供します。メモリ使用量の削減や電力効率など、リソースの最適化に重点を置いています。
使用する場面
ファームウェアの開発、ハードウェアとのやり取り(センサー、アクチュエーターなど)、または制約のある環境向けのコードの最適化に使用します。IoT のプロトタイプを構築する場合、リアルタイムシステムをデバッグする場合、または無線接続のために ESP8266 などのハードウェアと統合する場合に適用してください。
主な機能
- GPIO 制御、タイマー、割り込みのための C/C++ コードを生成します。たとえば、マイクロコントローラーで PWM 信号を設定します。
- スタック使用量の削減やフラッシュメモリの使用量の最小化など、リソースの制約に合わせてコードを最適化します。
- 組み込み環境で I2C、SPI、UART などの通信プロトコルを扱います。
- ハードウェアレジスターでの volatile キーワードの使用など、低レベル環境でエラーのないコードを書くためのベストプラクティスを提供します。
使用パターン
具体的で実行可能なリクエストを AI にプロンプトとして入力します。「AVR マイクロコントローラーで LM35 センサーから温度を読み取る C 関数を書いてください。」のように、ハードウェアの詳細を含めるようにプロンプトを構成します。たとえば、「ESP32 向けに、WiFi に接続して HTTP リクエストを送信するコードを生成してください。」と指定します。「コードが 1KB 未満の RAM を使用するようにしてください。」のように、最適化の目標を必ず指定します。プロンプトを連続して使用し、まずコードを生成してから、バグを修正するように改善します。
一般的なコマンド/API
GCC を使用してコンパイルします。最適化には -Os、AVR ターゲットには -mmcu=atmega328p などのフラグを指定します。API の例:
- ヘッダーをインクルードします:AVR マイクロコントローラーの場合は
#include <avr/io.h>。 - LED を点滅させるコードスニペット:
DDRB |= (1 << PB5); // Set PB5 as output while(1) { PORTB ^= (1 << PB5); _delay_ms(1000); } - IoT では ESP-IDF API を使用します:Wi-Fi を初期化するには
esp_wifi_init(&config);を使用します。 - 設定形式:IoT デバイスの設定には JSON を使用します。たとえば、
{"ssid": "myNetwork", "password": "$WIFI_PASSWORD"}を ESP32 コードでnvs_set_str()を使って読み込みます。 - API キー(クラウドサービス用など)が必要な場合は、
$AWS_IOT_KEYなどの環境変数を設定し、コード内でgetenv("AWS_IOT_KEY")を使ってアクセスします。
統合に関する注意事項
環境を設定して、このスキルを開発ツールと統合します。GCC や、フラッシュ書き込み用の avrdude などのツールをインストールします。IoT では PlatformIO または Arduino IDE を使用します。Azure との統合では、export $AZURE_IOT_HUB_KEY などの環境変数を使ってサービスの認証を行います。#pragma once ガードまたは CMake を使ってライブラリとコードをリンクし、クロスコンパイルを行います。ハードウェアにデプロイする前に、ARM 用 QEMU などのエミュレーターでテストします。「このコードを STM32F4 向けに調整してください。」のように、プロンプトでボードの種類を指定して互換性を確保します。
エラー処理
組み込みコードでは常に戻り値を確認します。たとえば、if (i2c_read() != 0) { handle_error(); } のようにします。デバッグにはアサーションを使用します:#include <assert.h> および assert(pin >= 0);。C++ では、メインループ内で例外を捕捉します:try { setup_hardware(); } catch (...) { reset_device(); }。AVR で wdt_enable(WDTO_8S); を使用するなど、ウォッチドッグを実装してハードウェアの障害に対処します。printf("Error: Sensor timeout\n"); で UART 経由のエラーログを記録し、有限状態機械を使って障害から復旧します。
具体的な使用例
- 例:Arduino Uno 用に、ボタンを読み取って LED を切り替えるコードを書きます。プロンプト:「Arduino Uno 用の C++ コードを生成してください。ピン 2 のデジタル入力を読み取り、ピン 13 の LED を切り替えます。」結果:
pinMode(2, INPUT);を使い、ループ内にif (digitalRead(2) == HIGH) { digitalWrite(13, !digitalRead(13)); delay(50); }を記述します。 - 例:ESP32 用の IoT コードを最適化し、センサーデータをサーバーに送信します。プロンプト:「ESP32 向けに、DHT11 センサーを読み取り、WiFi 経由で http://example.com にデータを POST する、RAM 使用量が 10KB 未満の効率的な C コードを書いてください。」結果:
dht.hをインクルードし、esp_http_client_init()を使用します。スニペット:float temp = dht_readTemperature(); http_post_data(temp);
グラフの関係
- 関連クラスター:iot
- 共有タグ:iot、embedded
- 関連スキル:共通タグに基づき、「wireless-protocols」や「sensor-integration」など、iot クラスター内のほかのスキルと関連する可能性があります。