3.5K Views
August 25, 22
スライド概要
前回の概要設計(※1)の続きで詳細設計(※2)について書きました。なにか参考になれば嬉しいです。
※1 組み込みソフトウェア基礎_【連続講座 #3】仕様から概要設計する
https://www.docswell.com/s/juraruming/ZP78L5-2022-07-21-205358
※2 実装が開始できる粒度の設計図を書くこと、と定義します。
組込みソフトウェアエンジニア。 技術バックボーンはC言語・ベアメタル。 CQ EVカートのオーナーで、ハード・ソフトウェアの改造を通じて自身のスキルアップを日々考え中・・・。 LAPRASポートフォリオ: https://lapras.com/public/k-abe GitHub: http://github.com/grace2riku Qiita: https://qiita.com/juraruming Zenn: https://zenn.dev/k_abe よろしくね。
組み込みソフトウェア基礎 【連続講座 #4】概要設計から詳細設計を 行う 2022/8/25 パーソルテクノロジースタッフ株式会社 阿部耕二 [email protected]
目次 • 自己紹介 • 参加者一言コメント • 講座開催の背景・目的 • 本日のテーマ【概要設計から詳細設計を行う】 • 参加者感想 • 次回予告 2
自己紹介 • 阿部 耕二(あべ こうじ) • 技術本部 機電技術部 首都圏2G • [email protected] • 医療機器開発 • 組込みソフトウェア開発。C言語、ベアメタルの開発業務経験がほとんど。 • LAPRASポートフォリオ:https://lapras.com/public/k-abe • twitter: @juraruming 3
参加者一言コメント ご自由に一言コメントいただけますとありがたいです。 例) お名前 例) 今回の講座に期待すること 例) お仕事内容(話せる範囲で) 例) ソフトウェア開発担当工程(要求仕様の定義?設計?実装?テスト?) 4
講座開催の背景・目的 • なにかテーマを決めて、ソフトウェア開発の上流工程から下流工程まで説明する講座を開催し、ス キルアップを図る。 ■要求仕様の理解 資料・記事 ■要求仕様の仕様化 資料・記事 ■設計 概要 資料・記事 詳細 ★いまここ ■TDD ■実装 5
講座開催の背景・目的 テーマ: 【既存組込み製品(CQ EVカート)の マイコンを移植する】 6
講座開催の背景・目的 テーマ:【既存組込み製品のマイコンを移植する】 対象装置:CQ EVカート 背景: ・講師が持っており、対象装置のドメイン知識を理解している。 ・ソフトウェアの構造を理解している。 ・対象装置のマイコンが新規採用非推奨品になった。 ⇛学習・スキルアップのため別マイコンに移植してみよう!!! 7
本日のテーマ 【概要設計から詳細設計する】 • 詳細設計のスコープ • 詳細設計のコンセプト • 具体的事例 • 設計時に考えたこと 8
本日のテーマ 【概要設計から詳細設計する】 • 詳細設計のスコープ • 詳細設計のコンセプト • 具体的事例 • 設計時に考えたこと 9
本日のテーマ 【仕様から概要設計する】 ▪詳細設計のスコープ 【詳細設計】の定義は人・会社により違うと思う。このイベントでの【詳細設計】 の意味を定義する。 【詳細設計】 ・ゴールは実装が開始できる粒度で書いた設計図がある状態 例) 英語で変数名・関数名を書く。 10
本日のテーマ 【仕様から概要設計する】 ▪ 詳細設計のスコープ 前回の概要設計で書いた設計図 オブジェクト図・状態遷移図 11
本日のテーマ 【概要設計から詳細設計する】 • 詳細設計のスコープ • 詳細設計のコンセプト • 具体的事例 • 設計時に考えたこと 12
本日のテーマ 【仕様から概要設計する】 ▪詳細設計のコンセプト 詳細設計の後はTDDでコードを改善していくつもり。 必要に応じて当初の設計も適宜変更していく。 ソフトウェアの大枠の構造を定義する意味合いで設計する。 詳細設計後は厳密に設計図に則る、というスタイルにしない。 13
本日のテーマ 【概要設計から詳細設計する】 • 詳細設計のスコープ • 詳細設計のコンセプト • 具体的事例 • 設計時に考えたこと 14
本日のテーマ 【概要設計から詳細設計する】 ▪具体的事例 1) ホールセンサ→通電パターン設定 15
本日のテーマ 【概要設計から詳細設計する】 ▪具体的事例 1) ホールセンサ→通電パターン設定 16
本日のテーマ 【概要設計から詳細設計する】 ▪具体的事例 1) ホールセンサ→通電パターン設定 ハードウェアブロック図 参考資料 17
本日のテーマ ▪具体的事例 【概要設計から詳細設計する】 1) ホールセンサ→通電パターン設定 通電パターンとは? タイミングチャート、表 18
本日のテーマ ▪具体的事例 【概要設計から詳細設計する】 1) ホールセンサ→通電パターン設定 ▪ホールセンサの責務 ・モータの現在位置を0, 1で出力する。 ▪通電パターンの責務 ・ホールセンサのレベルによりFETにセット する信号パターンを算出する。 ▪FETの責務 ・信号パターンを設定することでモータを 駆動できる。 19
本日のテーマ ▪具体的事例 【概要設計から詳細設計する】 1) ホールセンサ→通電パターン設定 ▪通電パターン設定するタイミング 次の2通りのタイミングで通電パターン設定できる必要あり。 1) モータ停止状態から駆動する時 ドライバーがアクセルを開けたらモータ駆動する。 ⇨マイコンの入力ポートでホールセンサのレベルを 読めば現在の通電パターンを認識できる!!! 2) モータ回転によりホールセンサの出力が変化する時 ホールセンサの↑・↓エッジの切り替わり ⇨マイコンの両エッジ外部割り込みで ホールセンサの変化を検出できる!!! 20
本日のテーマ ▪具体的事例 【概要設計から詳細設計する】 1) ホールセンサ→通電パターン設定 クラス図っぽい図を書き、整理する。 ※hall_sensor_bitmap: Hall W=2bit, Hall V=1bit, Hall U=0bit Hallセンサの読み込み値を2〜0bitにマッピングした値。通電ステージ1であれば0x05(Hall W=1, Hall V=0, Hall U=1) ※pwm_duty: タイミングチャートのPWM制御を行う期間で設定するPWM Duty(%)。0〜100で指定。この図には登場しないが アクセルの開き具合によりPWM Dutyを決める。motor_driverは0〜100(%)のPWM Dutyをマイコン機能の設定値(モータ制御 機能のタイマカウントなど)に変換し設定する責務を持つ。PWM 100%を実現するためのマイコン設定値は400、800だった りマイコン・クロックにより変わってくる、という話。 21
本日のテーマ ▪具体的事例 【概要設計から詳細設計する】 1) ホールセンサ→通電パターン設定 次を実現できるかクラス図で確認する。 【1) モータ停止状態から駆動する時 ドライバーがアクセルを開けたらモータ駆動する。 ⇨マイコンの入力ポートでホールセンサのレベルを 読めば現在の通電パターンを認識できる!!!】 2 update 3 drive 4 通電パターン 1.1 read 1.2 read 1.3 read 設定 22
本日のテーマ ▪具体的事例 【概要設計から詳細設計する】 1) ホールセンサ→通電パターン設定 次を実現できるかクラス図で確認する。 【2) モータ回転によりホールセンサの出力が変化する時 ホールセンサの↑・↓エッジの切り替わり ⇨マイコンの両エッジ外部割り込みで ホールセンサの変化を検出できる!!!】 2 update 3 drive 4 通電パターン 1.1 update 設定 23
本日のテーマ 【概要設計から詳細設計する】 • 詳細設計のスコープ • 詳細設計のコンセプト • 具体的事例 • 設計時に考えたこと 24
本日のテーマ 【概要設計から詳細設計する】 ▪設計時に考えたこと 1) 命名 2) 階層構造・抽象化 25
本日のテーマ 【概要設計から詳細設計する】 ▪設計時に考えたこと 1) 命名 2) 階層構造・抽象化 26
本日のテーマ 【概要設計から詳細設計する】 ▪設計時に考えたこと 1) 命名 クラス名・メンバ変数・メンバ関数の命名 を考えた。 命名で構造は決まると思うため。 ・hall_sensor_driverクラスの hall_sensor_bitmapは 冗長で sensor_bitmapでよかったかもしれない。 27
本日のテーマ 【概要設計から詳細設計する】 ▪設計時に考えたこと 1) 命名 2) 階層構造・抽象化 28
本日のテーマ 【概要設計から詳細設計する】 ▪設計時に考えたこと 2) 階層構造・抽象化 ・*_driverがハードウェアとやりとりする。 *_driverの階層を持たずにdrive_patternが hall_sensor・FETとやりとりする構造も考えられるが その構造にはしなかった。 ・drive_patternはハードウェアと関連しない。 タイミングチャートの【通電ステージ】という 概念を扱う。 *_driverより知識をもった階層とした。 29
参加者感想 • 是非とも講座の感想を一言お願いします。 30
次回予告 次回は【9/22(木) 19:30〜20:30】で開催予定です。 【連続講座 #5】テスト駆動開発 はじめの一歩 詳細設計でプログラムに実装可能な設計図を作成しました。この後は設計図に則り、実装していきますがテスト 駆動開発の手法(テストファースト)で進めていきたいと思います。テスト駆動開発を始めるにあたり、次のことを 話したいと思います。 ・テスト駆動開発とは? ・環境構築 ・テストを書いてみる 参加の方、是非ともよろしくおねがいします。 31
参考【テーマの前提説明】 • テーマの前提説明 【CQ EVカート】とは??? ・動画1: 走行中 ・動画2: 基板を拡大 過去に書いた技術書(EV カート 始めるモ ル ース開発)をベースに説明します。 記載箇所:【第1章 EVカートとは何か】 ベ デ で 32
参考【テーマの前提説明】 • テーマの前提説明 テーマ:【既存組込み製品のマイコンを移植する】は次の前提とする。 ・派生開発(既にある装置でマイコンのみ変更) ・ハードウェアあり。電気的仕様確認OK。 ・旧マイコンでのソフトウェア資産あり。※GitHub, 資料 の各リンク ・個人開発(お仕事にも適用できるエッセンスはあるかと思います) 33
終わり ご静聴ありがとう ございました。 34