詳解 組み込みシステム 第2版

―高性能、高品質なソフトウェアを実現するデザインパターン

[cover photo]
TOPICS
System/Network , Linux
発行年月日
PRINT LENGTH
356
ISBN
978-4-8144-0165-9
原書
Making Embedded Systems, 2nd Edition
FORMAT
Print
Print
4,400円

本書は、組み込みシステムの基本的な概念、ツール、テクニックを解説し、実際の幅広いプロジェクトに適用できる知識とスキルを提供することを目的としています。最近では組み込みにおいても、開発スピードの加速、IoTの普及、セキュリティ、環境への配慮といった、従来にはあまり考慮されなかったことが求められるようになってきています。本書は、こうしたニーズに応えられるように、トラブルシューティング、ネットワークについて、また最適化や効率化、省電力についての章も設けるなど、時代に即した内容となっています。

目次

翻訳者まえがき
はじめに

1章 組み込みシステムの概要 
    1.1 組み込みシステム開発 
        1.1.1 コンパイラと言語 
        1.1.2 デバッグ 
        1.1.3 リソース制限 
        1.1.4 課題解決のための原則 
    1.2 プロトタイプとメイカーボード 

2章 システムアーキテクチャの設計 
    2.1 設計をはじめる 
    2.2 アーキテクチャ図の作成 
        2.2.1 コンテキスト図 
        2.2.2 ブロック図 
        2.2.3 組織図 
        2.2.4 レイヤ図 
    2.3 設計の変更に対応する 
        2.3.1 モジュールのカプセル化 
        2.3.2 タスクを割り振る 
        2.3.3  ドライバインタフェース: open, close, read, write, ioctl 
        2.3.4 アダプタパターン 
    2.4 インタフェースの作成 
        2.4.1 例:ログインタフェース 
    2.5 サンドボックス 
    2.6 まとめ 
    2.7 参考 

3章 ハードウェアの入手 
    3.1 ハードウェアとソフトウェアの統合 
        3.1.1 プロジェクトフロー 
        3.1.2 ハードウェア設計 
        3.1.3 ボードの立ち上げ 
    3.2 データシートを読む 
        3.2.1 問題が発生したときに必要となるデータシートのセクション 
        3.2.2 ソフトウェア開発者のためのデータシート 
        3.2.3 データシートを利用した部品の査定 
    3.3 プロセッサ 
    3.4 回路図 
    3.5 Arduinoの回路図 
    3.6 ボードを安全に使用する 
    3.7 デバッグ用のツールボックス 
        3.7.1 デジタルマルチメータ 
        3.7.2 オシロスコープとロジックアナライザ 
        3.7.3 スコープの設定 
    3.8 ハードウェアの評価 
        3.8.1 評価環境の構築 
        3.8.2 フラッシュの評価 
        3.8.3 コマンドと応答 
        3.8.4 コマンドパターン 
    3.9 エラーの対処 
        3.9.1 一貫した方法 
        3.9.2 エラーチェックのフロー 
        3.9.3 エラー処理のライブラリ 
        3.9.4 タイミングエラーのデバッグ 
    3.10 参考 

4章 入出力とタイマー 
    4.1 レジスタ 
        4.1.1 2進法と16進法の計算 
        4.1.2 ビット操作 
        4.1.3 テスト、セット、クリア、反転 
    4.2 出力の反転 
        4.2.1 ピンを出力用に設定する 
        4.2.2 LED点灯 
        4.2.3 LED点滅 
        4.2.4 トラブルシューティング 
    4.3 ハードウェア対応 
        4.3.1 ボード固有のヘッダファイル 
        4.3.2 I/O処理関数 
        4.3.3 メインループ 
        4.3.4 ファサードパターン 
    4.4 I/Oピンの入力 
    4.5 ボタン押下で変化する 
        4.5.1 ボタン押下の割り込み 
        4.5.2 割り込みの設定 
        4.5.3 スイッチのデバウンス 
    4.6 実行中に操作するLEDを変更する 
        4.6.1 状態変数とコードの柔軟性 
        4.6.2 依存性注入 
    4.7 タイマーを使用する 
        4.7.1 タイマーの構成 
        4.7.2 数値計算 
        4.7.3 異なるタイマー割り込み周波数 
        4.7.4 タイマーのティック間の長い待ち時間 
        4.7.5 タイマーの使用 
    4.8 パルス幅変調の使用 
    4.9 製品の出荷 
    4.10 参考 

5章 割り込み 
    5.1 ニワトリがボタンを押す 
    5.2 IRQの発生 
        5.2.1 マスク不可割り込み 
        5.2.2 割り込みの優先度 
        5.2.3 割り込みのネスト 
    5.3 コンテキストの保存 
    5.4 ベクタテーブルから割り込みハンドラを検索 
        5.4.1 ベクタテーブルの初期化 
        5.4.2 割り込みハンドラを検索する 
    5.5 割り込みハンドラの呼び出し 
        5.5.1 1つに集約された割り込み 
        5.5.2 割り込みを無効にする 
        5.5.3 クリティカルセクション 
    5.6 コンテキストを復帰する 
    5.7 割り込みの設定 
    5.8 割り込み採用の判断 
        5.8.1 割り込みを使わない方法 
        5.8.2 ポーリング 
        5.8.3 システムティック 
        5.8.4 時間ベースのイベント 
        5.8.5 小さなスケジューラ 
    5.9 参考 

6章 アクティビティフローの管理 
    6.1 スケジューリングとオペレーティングシステムの基本 
        6.1.1 タスク 
        6.1.2 タスク間のコミュニケーション 
        6.1.3 レースコンディションを回避する 
        6.1.4 優先度逆転 
    6.2 ステートマシン 
        6.2.1 ステートマシンの例:信号コントローラ 
        6.2.2 状態駆動のステートマシン 
        6.2.3 特殊な遷移がある状態駆動ステートマシン 
        6.2.4 イベント駆動ステートマシン 
        6.2.5 ステートパターン 
        6.2.6 テーブル駆動のステートマシン 
        6.2.7 ステートマシン実装の選択 
    6.3 ウォッチドッグ 
    6.4 メインループ 
        6.4.1 ポーリングとウェイティング 
        6.4.2 タイマー割り込み 
        6.4.3 割り込みに何でもやらせる 
        6.4.4 割り込みがイベントを引き起こす 
        6.4.5 超小型スケジューラ 
        6.4.6 アクティブオブジェクト 
    6.5 参考 

7章 周辺機器との通信 
    7.1 シリアル通信 
        7.1.1 TTLシリアル 
        7.1.2 RS-232シリアル 
        7.1.3 SPI 
        7.1.4 I2CとTWI
        7.1.5 1-Wire 
        7.1.6 パラレル 
        7.1.7 Dual-SPIとQuad-SPI 
        7.1.8 USB 
        7.1.9 その他のプロトコル 
    7.2 実際の通信 
        7.2.1 ADCの例:SPIにおけるデータレディ 
        7.2.2 FIFOを使う 
        7.2.3 ダイレクトメモリアクセス(DMA) 
        7.2.4 ADCの例:SPIとDMA 
    7.3 リングバッファ 
    7.4 参考 

8章 システム構成 
    8.1 キーマトリクス 
    8.2 セグメントディスプレイ 
    8.3 ピクセルディスプレイ 
        8.3.1 ディスプレイアセット 
        8.3.2 フライウェイトパターンとファクトリパターン 
    8.4 外部フラッシュメモリ 
        8.4.1 ディスプレイアセット 
        8.4.2 エミュレーテッドEEPROMとキーバリューストア 
        8.4.3 littlefs 
        8.4.4 データストレージ 
    8.5 アナログ信号 
    8.6 デジタルセンサ 
    8.7 データ処理 
        8.7.1 アルゴリズムを変更する:ストラテジーパターン 
        8.7.2 アルゴリズムステージ:パイプラインとフィルタリング 
    8.8 性能要求を計算する 
        8.8.1 データ帯域幅 
        8.8.2 メモリスループットとバッファリング 
    8.9 参考 

9章 トラブルシューティング 
    9.1 コンパイラの最適化 
    9.2 不可解なバグ 
        9.2.1 バグを再現させる 
        9.2.2 バグについて説明する 
    9.3 ハードフォルト 
        9.3.1 ゼロ除算 
        9.3.2 NULLポインタアクセス 
        9.3.3 未定義の命令 
        9.3.4 不正なメモリアクセス(アライメントを無視したアクセス) 
        9.3.5 スタックメモリのポインタを返す 
        9.3.6 スタックオーバーフローとバッファオーバーフロー 
    9.4 ハードフォルトのデバッグ 
        9.4.1 プロセッサレジスタ:要因を確認する 
        9.4.2 コアダンプ 
        9.4.3 コアダンプを作成する 
    9.5 メモリ問題は複雑 
    9.6 コンパイラの警告 
    9.7 参考 

10章 ネットワークとセキュリティ 
    10.1 リモートに接続する 
        10.1.1 直接接続:イーサネットとWi-Fi 
        10.1.2 ゲートウェイを用いた接続 
        10.1.3 メッシュネットワーク 
    10.2 信頼性のある通信 
        10.2.1 バージョン 
        10.2.2 チェックサム、CRC、ハッシュ 
        10.2.3 暗号化と認証 
        10.2.4 リスク分析 
    10.3 コードをアップデートする 
        10.3.1 ファームウェアアップデートのセキュリティ 
        10.3.2 アップデート対象のコード 
        10.3.3 予備の救命ボート 
        10.3.4 段階的に展開する 
    10.4 大規模システムの管理 
    10.5 参考 

11章 リソースの削減 
    11.1 コードスペースの削減 
        11.1.1 マップファイルの解析その1 
        11.1.2 削減の工程 
        11.1.3 ライブラリ 
        11.1.4 関数とマクロ 
        11.1.5 定数と文字列 
    11.2 RAM不足の対策 
        11.2.1 mallocの削除 
        11.2.2 マップファイルの解析その2 
        11.2.3 レジスタとローカル変数 
        11.2.4 関数チェーン 
        11.2.5 グローバル変数(RAMとスタック) 
        11.2.6 メモリオーバレイ 
    11.3 性能の改善 
        11.3.1 プロファイル 
        11.3.2 プロセッササイクルの最適化 
    11.4 まとめ 
    11.5 参考 

12章 数値演算 
    12.1 高速な演算と低速な演算を判断する 
        12.1.1 平均を取る 
        12.1.2 累積平均と中央値 
    12.2 既存のアルゴリズムを使う 
    12.3 アルゴリズムの設計と修正 
        12.3.1 多項式の因数分解 
        12.3.2 テイラー級数 
        12.3.3 定数による除算 
        12.3.4 入力のスケーリング 
        12.3.5 ルックアップテーブル 
    12.4 擬似的な浮動小数点数 
        12.4.1 有理数 
        12.4.2 精度 
        12.4.3 加算と減算 
        12.4.4 乗算と除算 
    12.5 機械学習 
    12.6 答えを調べる 
    12.7 参考 

13章 省電力 
    13.1 消費電力の把握 
        13.1.1 消費電力の測定 
        13.1.2 低消費電力設計 
    13.2 電源を切る 
        13.2.1 周辺機器の電源を切る 
        13.2.2 未使用のI/Oデバイスをオフにする 
        13.2.3 プロセッサのサブシステムをオフにする 
        13.2.4 速度を落とす 
    13.3 プロセッサをスリープ状態にする 
        13.3.1 割り込みベースのコードフローモデル 
        13.3.2 メインループを深掘りする 
        13.3.3 プロセッサウォッチドッグ 
        13.3.4 高頻度の起床を避ける 
        13.3.5 異なるプロセッサの混在 
    13.4 参考 

14章 モータと運動 
    14.1 運動に変換 
    14.2 ポジションエンコーディング 
    14.3 DCモータをPWMで駆動する 
    14.4 モータ制御 
        14.4.1 PID制御 
        14.4.2 モーションプロファイル 
    14.5 モータの欠点 
    14.6 参考 

索 引