組込みシステムの基礎知識を徹底解説!ES試験対策のために知っておくべきこと
マイコン・プロセッサのアーキテクチャ
組込みシステムの中心となるのはマイクロコントローラ(マイコン)またはマイクロプロセッサです。マイコンはCPU・メモリ・I/O(入出力)が一つのチップに集積されており、省スペース・低コスト・低消費電力を実現します。
| 用語 | 説明 |
|---|---|
| CPU(中央処理装置) | 命令を解釈して実行する演算処理の中枢 |
| ALU(算術論理演算装置) | 加算・減算・論理演算を実行するユニット |
| レジスタ | CPUが直接アクセスできる超高速の記憶領域 |
| プログラムカウンタ(PC) | 次に実行すべき命令のアドレスを保持するレジスタ |
| スタックポインタ(SP) | スタックの最上位アドレスを保持するレジスタ |
| 命令セットアーキテクチャ | RISC(少数・高速)とCISC(多数・高機能)がある |
💡 ARM・RISC-Vが組込みの主流 現代の組込みシステムでは、ARMアーキテクチャ(Cortex-M系など)が広く採用されています。スマートフォン・自動車・IoTデバイスに至るまで、ARMベースのマイコンが主流です。近年はオープンソースのRISC-Vも注目されています。
メモリの種類と役割
組込みシステムのメモリ管理は試験の重要テーマです。
| メモリ種類 | 特徴 | 組込みでの用途 |
|---|---|---|
| ROM(フラッシュメモリ) | 不揮発性・電源切れても保持 | プログラム(ファームウェア)の格納 |
| RAM(SRAM/DRAM) | 揮発性・高速読み書き | 実行時データ・スタック・ヒープ領域 |
| EEPROM | 書き換え可能な不揮発メモリ | 設定値・較正データの保存 |
| キャッシュメモリ | CPU近傍の超高速メモリ | 頻繁にアクセスするデータの一時保持 |
組込みシステムでは、RAMが非常に少ない(数KB〜数百KB程度)制約の中でプログラムを動作させる必要があります。メモリの効率的な使用が重要な設計課題です。
入出力インタフェースの基礎
組込みシステムは様々なセンサーやアクチュエータと通信するためのインタフェースを持ちます。
| インタフェース | 特徴・用途 |
|---|---|
| GPIO(汎用入出力) | デジタルのON/OFF信号。ボタン・LEDの制御など |
| UART(シリアル通信) | 非同期シリアル通信。デバッグ用途や周辺機器との通信 |
| I²C(アイツーシー) | 2線式の同期シリアル通信。センサー複数接続に便利 |
| SPI(エスピーアイ) | 4線式の高速シリアル通信。液晶・SDカードなど |
| CAN(車載ネットワーク) | 自動車のECU間通信に使われる堅牢なシリアルバス |
| A/D変換(ADC) | アナログ信号をデジタル値に変換。温度・圧力センサーなど |
| D/A変換(DAC) | デジタル値をアナログ信号に変換。モーター制御など |
| PWM | パルス幅変調によるモーター速度制御・LED輝度調整 |
リアルタイム性とは
組込みシステムの最大の特徴のひとつがリアルタイム性です。これは「決められた時間(デッドライン)以内に必ず処理を完了する」という要件です。
| リアルタイムの種類 | 定義 | 例 |
|---|---|---|
| ハードリアルタイム | デッドラインを1ミリ秒でも超えると致命的障害 | 航空機制御・原子炉制御・エアバッグ制御 |
| ソフトリアルタイム | デッドライン超過は許容されるが品質が低下 | 動画ストリーミング・音声処理 |
リアルタイム性を実現するためにリアルタイムOS(RTOS)が使われます。RTOSは決定論的(予測可能)なスケジューリングを行い、タスクが必ず期限内に実行されることを保証します。
組込みソフトウェアの特徴
組込みソフトウェアは通常のPCアプリとは異なる特性を持ちます。
- 資源制約:ROM・RAMが非常に少ない。メモリ効率を徹底的に考慮する必要がある。
- ハードウェア依存性:特定のハードウェアと密接に結びついたソフトウェアを開発する。
- 割り込み駆動型:外部イベント(センサー入力・タイマー)による割り込みで処理が起動される。
- 無限ループ構造:基本的に「電源が入っている間は動き続ける」構造のプログラム。
- 高い信頼性要求:特に安全系システムでは、バグが人命に関わることもある。
試験に頻出するプロトコル・インタフェースの実装上の注意点
試験では単なる「どのプロトコルか」という知識だけでなく、実装上の制約や特性の理解が問われます。
UART(シリアル通信)
- 特徴:2線式(送信・受信)で単純。ボーレート設定(9,600~115,200 bps)が重要。
- 試験出題例:「複数デバイスを同時通信する場合、UARTは不向きなのか」→複数接続できず1対1通信に限定
- 改善施策:UARTを複数個搭載するか、I²CやSPIに変更
I²C(アイツーシー)
- 特徴:2線式(SCL・SDA)。複数デバイスをバス接続可能。応答パルス(ACK)で通信確認。
- 試験出題例:「I²Cでセンサー10個を接続する場合の課題」→アドレス競合、バス信号の遅延
- 改善施策:デバイスアドレスを分散配置、終端抵抗の適切な値選定
SPI(シリアル周辺インタフェース)
- 特徴:4線式(CLK・MOSI・MISO・CS)。高速(数MHzまで)。マスタ・スレーブ構成。
- 試験出題例:「SPIの通信タイミングの設定ポイントは」→位相・極性(CPOL・CPHA)
- 改善施策:デバイスごとに異なるチップセレクト(CS)で複数接続
CAN(車載ネットワーク)
- 特徴:自動車ECU間の標準。メッセージベース。エラーハンドリング機能あり。
- 試験出題例:「CANでECU間の競合が発生した場合」→アービトレーション機能で優先度判定
- 改善施策:メッセージIDの優先度設計、CAN FDでの高速化
組込みソフト開発での実装チェックリスト
試験対策を通じて以下の項目を理解することで、午後Ⅰ・Ⅱ対策の実務的な根拠が備わります。
- メモリリークの防止:動的メモリ確保(malloc)と解放(free)のペアをコード上に確認できるか
- スタック溢れ対策:各タスクのスタックサイズが適切に設定されているか、再帰呼び出しの深さは制限されているか
- 割り込み禁止区間の最小化:クリティカルセクション(排他が必要な区間)を最小限にしているか
- タイムアウト処理の実装:ハングアップ防止のためのタイムアウト機能がすべての待機処理に実装されているか
- エラーハンドリング:通信エラー、ハードウェア障害などの例外系が適切に処理されているか
- ロギング・デバッグ機能:本番環境でのトラブル診断のため、ログ出力機能が実装されているか
よくある質問
Q:組込みシステムと一般的なアプリケーションの最大の違いは?
最大の違いは「予測可能性(determinism)」への要求です。通常のアプリケーションは「だいたい動く」でもいいですが、組込みシステム(特に自動車・医療機器)では「必ず決まった時間内に完了する」ことが絶対要件です。このため、ガベージコレクション(自動メモリ解放)機能を持つ言語(JavaやPython)は不向きで、メモリの動的確保を最小限にするC言語が標準です。
Q:プロトコルが多くて何を覚えればいいか分かりません。
覚え方のポイントは「どんな用途・制約があるのか」を理解することです。 UART→シンプルな2デバイス通信 | I²C→複数センサー接続 | SPI→高速通信 | CAN→自動車のECU間通信 という具合に「用途」と結びつけると記憶定着が良くなります。
まとめ
📝 この記事のまとめ 組込みシステムの中心はマイコン(CPU+ROM+RAM+I/Oの集積チップ)。 メモリはROM(プログラム格納)とRAM(実行時データ)の役割の違いを理解する。 インタフェース(UART・I²C・SPI・CAN)の特徴は試験頻出。実装上の制約も理解する。 リアルタイム性はハードとソフトの2種類。ハードは絶対のデッドライン。 組込みソフトは資源制約・ハードウェア依存・割り込み駆動が特徴。 メモリリーク・スタック溢れ・デッドロック対策は実装チェックリストとして日々意識する。
次は、組込みシステムを制御する「リアルタイムOS(RTOS)」について学習することをお勧めします。RTOSはES試験の最頻出テーマであり、ハードウェアの知識と組み合わせることで午後問題への対応力が大きく向上します。
試験頻出「マイコンの種類」と特性の一覧
実際の試験では特定のマイコンや プロセッサについて問われることはほぼありませんが、各アーキテクチャの「特性・使い分け」が問われます。
ARMアーキテクチャ(最も普及)
| プロセッサ | 特徴 | 用途 |
|---|---|---|
| ARM Cortex-M0 | 最小規模・超低電力 | スマートセンサー・IoTデバイス |
| ARM Cortex-M4 | DSP機能・浮動小数点演算 | 音声処理・センサー信号処理 |
| ARM Cortex-A系 | 高性能・複雑なOS対応 | スマートフォン・自動運転車 |
RISC-V(新興)
オープンソースのISA。今後の組込みシステムで採用される可能性が高い。ES試験でも出題される可能性が増えています。
マイコンメーカー(業界別)
- 自動車:ルネサス・NXP・Texas Instruments(Automotive Grade MCU)
- IoT・一般:NXP・STMicroelectronics・Nordic(Bluetooth対応)
- 通信・高性能:Qualcomm・MediaTek(主にスマートフォン)
マイコン選択時の「トレードオフ」
試験では「このシステムに最適なマイコンは」という設問が出ることがあります。以下のトレードオフを理解しておきましょう:
| トレードオフ | 選択肢A | 選択肢B | 選択の基準 |
|---|---|---|---|
| 性能 vs 消費電力 | 高性能CPU(高消費電力) | 低性能CPU(省電力) | バッテリー駆動?→B選択 |
| 統合度 vs カスタマイズ性 | MCU(すべて統合) | モジュール式(カスタマイズ可) | 小型・低コスト要求?→A選択 |
| リアルタイム性 vs 汎用OS対応 | ベアメタル+RTOS | Linux対応CPU | アプリの複雑度?多ければ→Linux選択 |
| 学習曲線 | よく知られたマイコン | 新興プロセッサ | 開発チームの熟練度?高ければ新製品も可 |
「ハードウェア制約を考慮したソフト設計」の具体例
試験では「このハードウェア制約の下で、ソフトウェアをどう実装するか」という設計問題が出ます。以下の例を参考にしてください:
例1:RAMが4KByteしかない場合
制約:非常に限られたメモリ 対策:
- グローバル変数を最小化(スタック領域を多く確保)
- 動的メモリ確保(malloc)をできる限り避ける
- 大きなバッファは「必要な時だけ確保」にする
- 文字列リテラル(const char*)はROMに配置
例2:CPUが8MHz・割り込み応答時間が100μsの場合
制約:処理速度に限界。リアルタイム性が厳しい 対策:
- ISR(割り込みハンドラ)を最小限に(最短200~300 ns)
- 詳細処理はタスクに委ねる(遅延実行)
- 不要な割り込みは禁止する
- 制御周期を長めに設定(5ms以上推奨)
例3:12V電源駆動・消費電力100mW上限の場合
制約:電力消費の制限(バッテリーまたは小型電源) 対策:
- 処理が必要な時間帯だけCPUをActive、その他はSleep/Idle
- ペリフェラル(UART・SPI)も使わない時はpower down
- タイマーで周期的にWake-up
- アルゴリズムの計算量を最小化
これらの設計判断は「午後Ⅰ・午後Ⅱで実装説明」を求められる重要テーマです。