53
ラララララララララララ ラララララララララララ ララララ ララ ララ ラララ ララ ラララ 2010 0 ラララ 106 2009/11/06

3. RescueRobo.ソフトウェア詳細設計書(4)

Embed Size (px)

Citation preview

Page 1: 3. RescueRobo.ソフトウェア詳細設計書(4)

ライントレースロボットソフトウェア詳細設計書

文書番号

承認 作成

グエン ニュ ア

ィン

2010年 01月

06日

Page 2: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

2009/11/06

立命館大学

1

Page 3: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

改訂履歴項番 日付 バージョ

改訂内容 担当者 備考

1 2009/11/0

・ 新規作成 グエン ニュ アィン

2 2009/1

2/13

・ 共通定義 グエン ニュ アィン

3 2010/01/19 ・ 更新 トゥルオン・ティ・クィ

ン・ニュ

4 2010/01/22

・ Update setting

task

・ メモリ量

トゥルオン・ティ・クィ

ン・ニュ

・ Update

robo_cpu

ゲェン・バン・タァン

・ Update watch

task

・ Update lcd_out

task

・ Update lcd_dsp

tsk

ゲェン

2

Page 4: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

目次

1. 概要.............................................................................................4

1.1. 本書の目的................................................................................................4

1.2. 本書の位置づけ..........................................................................................4

1.3. 記載範囲、記載内容など.............................................................................4

1.4. 参照しているドキュメントなど...................................................................4

1.5. 定義(用語、略語など).............................................................................4

2. プログラムユニット機能/構成設計書.....................................................6

2.1. プログラムユニット一覧表.........................................................................6

2.1.1. ユーザインタフェース機能ユニット......................................................6

2.1.2. アプリケーション機能ユニット.............................................................6

2.1.3. メカニズム機能ユニット......................................................................6

2.1.4. 全体制御機能ユニット..........................................................................6

2.2. プログラムユニット構成図.........................................................................7

3. プログラムユニット設計書...................................................................8

3.1. リソース定義.............................................................................................8

3.1.1. データキュー定義................................................................................8

3.1.2. タスク定義..........................................................................................8

3.2. ハードウェア制御方法................................................................................8

3.2.1. 割込み検出..........................................................................................9

3.3. システム初期化処理...................................................................................9

3.4. データキュー共通定義..............................................................................10

3.4.1. SYS_INのコマンド定義..............................................................10

3.4.2. ROBO_CPUコマンド定義...........................................................10

3.4.3. ROBO_ALUコマンド定義...........................................................11

3.4.4. SYS_OUTコマンド定義..............................................................11

3.5. ロボット状態共通定義..............................................................................12

3.6. 状態管理.................................................................................................14

3.7. プログラムユニット詳細処理....................................................................15

このプログラムは、10タスクがあるので、以下にそれぞれタスクの関数を詳細に示

している。....................................................................................................15

3.7.1. TSK_ID_GET_SW..............................................................................16

3.7.2. TSK_ID_SW2....................................................................................17

3

Page 5: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

3.7.3. TSK_ID_SW3....................................................................................17

3.7.4. TSK_ID_GET_SENSOR......................................................................18

3.7.5. TSK_ID_SYS_IN................................................................................18

3.7.6. TSK_ID_ROBO_CPU..........................................................................21

3.7.7. TSK_ID_ROBO_ALU..........................................................................32

3.7.8. TSK_ID_WATCH................................................................................39

3.7.9. TSK_ID_LCD_OUT............................................................................40

3.7.10. TSK_ID_CTRL_LCD........................................................................43

4. プログラムユニットインタフェース設計書..............................................44

4.1. シーケンス図...........................................................................................44

4.1.1. ROBO_CPUとROBO_ALUコミュニケーション.....................44

4.1.2. 入力タスク、制御タスク、出力のコミュニケーション...........................45

(TSWタスク、割込みタスク、Sys_inタスク、Robo_cpuタスク、LCD表示タス

ク)..............................................................................................................45

4.2. インタフェース詳細.................................................................................47

5. メモリ使用量.................................................................................................48

4

Page 6: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

1.概要

1.1. 本書の目的本仕様書の目的は,ソフトウェア要求仕様書に基づいたソフトウェアを、ソフトウェア

アーキテクチャ設計書に記述されたアーキテクチャに従って実現にあたり、その詳細設

計を明確にすることである。

1.2. 本書の位置づけ本文書は、「ソフトウェア要求仕様書」および「ソフトウェアアーキテクチャ設計

書」をベースとしている。

1.3. 記載範囲、記載内容など・ 本仕様書には、ソフトウェアの詳細設計を記載する

1.4. 参照しているドキュメントなど1) 製品概要

2) ソフトウェア要求仕様書

3) ソフトウェアアーキテクチャ設計書

4) MN103SA5K_LSI説明書

1.5. 定義(用語、略語など)

略語 用語 定義

LCD Liquid Crystal Display 液晶ディスプレイ

LED Light Emitting Diode 発光ダイオード

TSW Toggle Switch トグルスイッチ

SW Switch スイッチ

CMD Command コマンドおよび命令

5

Page 7: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

PIDProportiona Integral

Derivativeフィードバック制御の一種

Get_tsw Get Toggle Switch トグルスイッチを採用

Ctr_sw Control Switch スイッチを制御

Sys_in System Input インプットシステム

Robo_cpuRobot Central Processing

Unit

ロボットの中心的な処理装

Robo_alu Robot Algorimthm ロボットのアルゴリズム

Lcd_outLiquid Crystal Display

Output

液晶ディスプレイ

アウトプット

TSK task タスク

ALU_DIS_MAT_IDAlgorimthm Discover

Match Identification区画のID

HOM Home スタート点

POS Position 位置

ALU_HOM_WAYAlgorimthm of way to

home スタート点に戻る通路

ALU_RES_WAYAlgorimthm of way to

reach ゴールにけが人を運ぶ通路

6

Page 8: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

2.プログラムユニット機能/構成設計書

2.1. プログラムユニット一覧表以下、機能ユニットごとに一覧表を提示する。一覧表中、プログラムユニットを PUと記

述する。

2.1.1. ユーザインタフェース機能ユニットプログラムユニット名 機能概要

Get_tsw TSW状態を読む

Ctrl_sw2 SW2を押すことを知らせる

Ctrl_sw3 SW3を押すことを知らせる

Sensor センサーを読む

2.1.2. アプリケーション機能ユニットプログラムユニット名 機能概要

Sys_in ロボットの引数をセッティングする、結果を見せる

Robo_cpu ロボットの走行を制御する

Robo_alu 壁の情報を収集し、最適な道を計算する

2.1.3. メカニズム機能ユニットプログラムユニット名 機能概要

Motor_right 右モータを動かさせる

Motor_left 左メータを動かさせる

Watch 時間計測

Sensor 壁の情報を収集する

2.1.4. 全体制御機能ユニットプログラムユニット名 機能概要

Sys_in 入力引数をセッティングする

Lcd_out データを LCD へ出力する

Dsp_lcd Lcdで表示するように LCDを制御する

Robo_cpu, robo_alu ロボットを制御する

7

Page 9: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

2.2. プログラムユニット構成図

図:プログラムユニット構成

8

Page 10: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

3.プログラムユニット設計書

3.1. リソース定義

3.1.1. データキュー定義番 DTQ_ID サイズ 送信タスク 受信タスク 備考

1 SYS_IN 4 get_tsw, robo_cpu

ctrl_sw2,ctrl_sw3,

sys_in

2 ROBO_CPU 4 sys_in, robo_alu,

sensor

robo_cpu

3 ROBO_ALU 4 robo_cpu robo_alu

4 SYS_OUT 4 robo_cpu, sys_in,

watch

lcd_out

3.1.2. タスク定義ID TASK_ID 機能 備考

1 TSK_ID_GET_SW TSW状態の変化を検出し、データを更新す

2 TSK_ID_SW2 SW2を押すことを知らせる

3 TSK_ID_SW3 SW3を押すことを知らせる

4 TSK_ID_GET_SEN

SOR

センサー値を読み取る

5 TSK_ID_SYS_IN ロボットの引数をセッティングする

6 TSK_ID_ROBO_CP

U

ロボットの走行を制御する

7 TSK_ID_ROBO_AL

U

アルゴリズム計算

8 TSK_ID_WATCH 時間計測

9 TSK_ID_LCD_OUT LCD表示

10 TSK_ID_CTRL_LC

D

LCD制御

3.2. ハードウェア制御方法

個々のハードウェアに対する具体的な制御方法を記載する。

9

Page 11: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

<記載例>

・ ハードウェアへの書き込み/読み出し方法

・ 設定値

・ アドレス/ポート番号

・ 制約事項(順序・禁止事項など)

3.2.1. 割込み検出使用する割込みは下記のとおり

内容 要因 制御レジスタ ベクタ番号 備考

SW2割込み IRQ0 G2ICR_16

SW3割込み IRQ1 G18ICR_16

Timer 8 System use System use System use

Timer9 G8ICR モータ右のタ

イマ

Timer 10 G9ICR 1msを取る

Timer 11 G10ICR モータ左のタ

イマ

※LCD制御などは、ハードウェア仕様書などを参照のこと

3.3. システム初期化処理

個々のハードウェアに対する具体的な制御方法を記載する。

<記載例>

・ 初期化する順序

・ ハードウェア初期値

・ ベクターアドレス/割込み

・ リソース初期値(メモリ、DBなど)

・ OSの初期化

・ 汎用ライブラリの初期化

・ 外部機器の初期化

10

Page 12: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

3.4. データキュー共通定義

3.4.1. SYS_INのコマンド定義SYS_INデータキューに送信するデータは Charの配列に保存され、配列の構造が以下の

テーブルに示す:

番 項目 サイズ 備考

1 SRC 1 ハードウェア種のコード

2 DATA TSW 1 送信データ

SW2 1

SW3 1

ROBO_CP

U

2

番 送信先 SRC DATA 備考

定義 値

1 TSW IN_SRC_SWITCH 0x01 TSWデータ

2 SW2 IN_SRC_SW2 0x02 なし

3 SW3 IN_SRC_SW3 0x03 なし

4 CPU ROBOT_REACHED

_GOAL

0x40 なし

3.4.2. ROBO_CPUコマンド定義ROBO_CPUデータキューに送信するデータは Charの配列に保存され、配列の構造

が以下のテーブルに示す:

番 項目 サイズ 備考

1 CMD 1 送信データは何のため?

どのように処理する?

2 DATA CMDによって 送信データ

番 送信先 CMD DATA 備考

定義 値 内容 サイズ

1 sys_in IN_START 0x03 0 1

11

Page 13: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

IN_READY 0x07 3 つの位置、置く方

4

2 robo_al

u

ALU_DIS_MAT_

ID

0x01 区画のID 1

ALU_HOM_WA

Y

0x05 進入する区画のID

配列

255 スタート点に戻

る通路

ALU_RES_WAY 0x06 進入する区画のID

配列

255 ゴールにけが人

を運ぶ通路

3 Sensor IN_SENSOR 0x04 センサデータ 2

3.4.3. ROBO_ALUコマンド定義ROBO_ALUデータキューに送信するデータは Charの配列に保存され、配列の構造

が以下のテーブルに示す:

番 項目 サイズ 備考

1 CMD 1 送信データは何のため?

どのように処理する?

2 DATA CMD に よ っ

送信データ

番 送信先 CMD DATA 備考

定義 値 内容 サイズ

1 robo_cp

u

DIS_REQ 0x01 ロボットの位置とけが人

位置とゴールの位置

DIS_MAT_

AD

0x02 区画の状態 1

HOM_REQ 0x03 ロボット現在の位置 1

RES_REQ 0x04 ロボット現在の位置 1

3.4.4. SYS_OUTコマンド定義SYS_OUTデータキューに送信するデータは Charの配列に保存され、配列の構造を

以下のテーブルに示す:

番 項目 サイズ 備考

1 CMD 1 送信データは何のため?

どのように処理する?

12

Page 14: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

2 DATA CMD に よ っ

送信データ

番 送信先 CMD DATA 備考

定義 値 内容 サイズ

1 Sys_in TRANF_LCD_SRC_SETTING_DIREC 1 置く方向 6

TRANF_LCD_SRC_SETTING_START 11 スタート点を設定

するモード

6

TRANF_LCD_SRC_SETTING_PATIENT 12 けが人点を設定す

るモード

6

TRANF_LCD_SRC_SETTING_GOAL 13 終点を設定するモ

ード

6

TRANF_LCD_SRC_SETTING_Kp 14 Kp を設定するモ

ード

6

TRANF_LCD_SRC_SETTING_Kd 15 Kd を設定するモ

ード

6

TRANF_LCD_SRC_SETTING_TIME_90 16 90 度回るタイム 6

TRANF_LCD_SRC_SETTING_TIME_180 17 180 度回るタイム 6

TRANF_LCD_SRC_SETTING_TIME_BACK

WARD

18 戻るタイム 6

TRANF_LCD_SRC_SETTING_TIME_FORW

ARD_RES

19 レスキュー時の真

っ直ぐ 1 つステッ

プタイム

6

TRANF_LCD_SRC_SETTING_TIME_FORW

ARD_STEP

20 真っ直ぐ 1 つステ

ッタイム

6

TRANF_LCD_SRC_UNKNOWN_SETTING 4 なし 6

TRANF_LCD_SRC_VIEW_SCORE_DISCO

VER

21 なし 6

TRANF_LCD_SRC_VIEW_SCORE_RESCU

E

22 なし 6

TRANF_LCD_SRC_VIEW_SCORE_TOTAL 23 なし 6

2 watch TRANF_LCD_SRC_VIEW_SCORE_DISCO

VER

21 DISCOVER 時間 10

TRANF_LCD_SRC_VIEW_SCORE_RESCU 22 レスキュー時間 10

13

Page 15: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

E

TRANF_LCD_SRC_VIEW_SCORE_TOTAL 23 総合時間 10

3.5. ロボット状態共通定義ロボット状態は robo_flagの変数に保存する。robo_flagのタイプは Charのである。

iTRONでグローバル変数を利用してはいけないから、ロボット状態を管理したいタスク

ではLOCALの robo_flagを保存して利用することになっている。

robo_flagは以下に示す

番 BIT 内容 備考

1 bp7-bp6 SETTING_MOD

E

0x80

RUNNING_MO

DE

0x00

VIEW_SCORE_

MODE

0x40

2 bp5-

>bp0

モードの各状態

番 ROBO_MODE 状態 備考

定義 値

1 SETTING_MODE SETTING_START_POS_STATE 0x01 スタート点の設定

SETTING_PATIENT_POS_STATE 0x02 けが人位置の設定

SETTING_GOAL_POS_STATE 0x04 ゴールの位置の設

SETTING_Kp 0x08 Kpの設計

SETTING_Kd 0x10 Kdの設計

SETTING_DIREC 0x20 置く方向の設計

SETTING_TIME_90 0x21 90 度周るタイムの

設計

SETTING_TIME_180 0x22 180 度周るタイム

の設計

SETTING_TIME_BACKWARD 0x24 1 つステップ戻る

14

Page 16: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

タイム

SETTING_TIME_FORWARD_RES 0x28 レスキュー時の 1

つステップのタイ

SETTING_TIME_FORWARD_STEP 0x30 真っ直ぐの 1 つス

テップのタイム

2 RUNNING_MODE READY_STATE 0x04

DISCOVERY_STATE 0x08

BACK_HOME_STATE 0x03

RESCUE_STATE 0x01

REACHED_GOAL_STATE 0x05

TIME_OUT_STATE 0x06

ERROR_STATE 0x07

UNKNOWN_EXCEPTION_STATE 0x02

3 VIEW_SCORE_MOD

E

TRANF_LCD_SRC_VIEW_SCORE_

DISCOVER

0x21 通路探索時間

TRANF_LCD_SRC_VIEW_SCORE_

RESCUE

0x22 けが人運びの時間

TRANF_LCD_SRC_VIEW_SCORE_T

OTAL

0x23 総合時間

3.6. 状態管理 このプログラムの状態遷移は、次の表に示している。

状態

イベント

セッティング

時間を計測しない

ロボットが停止

走行

ロボットを動かす

時間を計測する

ビュー

停止

時間を計測しない

TSW!=0 引数をセッティングする停止

(計測、移動)引数値をビュー

TSW=0

スタート

Ready

停止→計測

停止→移動

(Discovery, return,

15

Page 17: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

rescue)

レスキュー終わり ―

移動―>停止

計測―>停止

Discoverytime を

ビュー

Rescuetimeをビュ

Totaltimeをビュー

リセット - - 停止→リセット

<アクション>

TSW!=0→setting mode

・ ロボットを動かすことを停止

・ 時間の計測を停止

・ 引数値をセッティング

TSW=0→ Ready mode

スタート→ 走行

・ ロボットの走行を開始する

・ 時間の計測を開始する

レスキュー終わり→ 計測、移動→停止

・ ロボットの走行を停止する

・ 時間の計測を停止する

・ 時間をビューする

停止→リセット

・ ロボットの引数 が default 値に戻る

・ 計測中の時間を 00:00にする

・ ロボットの状態をReadyに戻す

3.7. プログラムユニット詳細処理

プログラムユニットの処理内容を記載する。不具合を解析する際に利用する機能もプ

ログラムユニットとして処理内容を記載する。実装に必要なすべての情報を記載する

ことが望ましい。

<記載例>

・ プログラムユニット名

16

Page 18: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

・ 引数

・ 戻り値

・ 処理内容

  (ハードウェア制御方法、タイミング、エラー処理、利用するOSシステムコール

   汎用ライブラリの引数値、高速化が必要な場合はその条件と手法など)

・ 制約事項 (処理時間、割り込みなど)

・ 備考 (参照する設計書など)

このプログラムは、10タスクがあるので、以下にそれぞれタスクの関数を詳細に示している。

ID TASK_ID 機能 備考

1 TSK_ID_GET_SW TSW状態の変化を検出し、データを更新す

2 TSK_ID_SW2 SW2を押すことを知らせる

3 TSK_ID_SW3 SW3を押すことを知らせる

4 TSK_ID_GET_SEN

SOR

センサー値を読み取る

5 TSK_ID_SYS_IN ロボットの引数をセッティングする

6 TSK_ID_ROBO_CP

U

ロボットの走行を制御する

7 TSK_ID_ROBO_AL

U

アルゴリズム計算

8 TSK_ID_WATCH 時間計測

9 TSK_ID_LCD_OUT LCD表示

10 TSK_ID_CTRL_LC

D

LCD制御

3.7.1. TSK_ID_GET_SW関数名 : get_sw トグル SW入力タスク

書 式 : void get_sw(VP_INT exinf)

機 能 : 1. 10msごとにトグル SWを読む

2. TSW状態の変化を検出し、データを更新する

3. SYS_INデータキューへ TSW状態を送信する

17

Page 19: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

変数: static unsigned char tsw_status[2] = {IN_SRC_SWITCH, 0}

(IN_SRC_SWITCH = 0x01)

unsigned char tsw_now: TSW 確定データ:今回

unsigned char tsw_old:TSW 確定データ:前回

unsigned char prev_data:前回データ

この関数の動作は、以下のフローチャートに示している。

図: get_sw関数のフローチャート

3.7.2. TSK_ID_SW2関数名 : sw2_int SW2を押すか、確認する

書 式 : void sw2_int(VP_INT exinf)

機 能 : 1.SW2を押すことを知らせる

変数:   static unsigned char sw2 = IN_SRC_SW2 (IN_SRC_SW2 = 0x02)

この関数の動作は、以下のフローチャートに示す。

18

Page 20: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

図:sw2_int関数のフローチャート

3.7.3. TSK_ID_SW3関数名 : sw3_int SW2を押すか、確認する

書 式 : void sw3_int(VP_INT exinf)

機 能 : 1.SW3を押すことを知らせる

変数:   static unsigned char  sw3 = IN_SRC_SW3 (IN_SRC_SW3 = 0x03)

図:sw3_int関数のフローチャート

3.7.4. TSK_ID_GET_SENSOR関数名:sensor   センサーの値を読む

書式: void sensor(VP_INT exinf)

機能:1.センサーの値を読む

2. robo_cpuデータキューにデータを送信する

変数: static unsigned char to_robo_cpu[1] = {IN_SENSOR}   (IN_SENSOR =

0x04)

19

Page 21: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

関数名 : get_sensor_front_bits get two font bits of sensor

書式 : char get_sensor_front_bits(char, char)

機能: 1.  0をリータン  2 つの前センサーがオフになる場合

2. 1をリータン  右のセンサーがオンになり、左のセンサーがオフになる

場合

3. 2をリータン)   右のセンサーがオフになり、左のセンサーがオンになる

場合

4. 3をリータン  右のセンサーと左のセンサーがオフになる場合

関数名 : get_sensor_side_bits

書式 : unsigned char get_sensor_side_bits(unsigned char)

機能 :  1.ンセンサーの値をリータン

3.7.5. TSK_ID_SYS_IN関数名: sys_in   引数をセッティングし、データを適当に処理する

書式 : void sys_in (VP_INT exinf)

機能: 1.データをデータキューから受信する

2.引数の値をセッティングする

 3.適当的なデータキューに送信する

4.ビューモードを適当に入るために、メッセージを LCD へ送信する

変数: unsigned char robo_flag = 0 ロボットのモードを示す

char page = 2;  ビューモードに入る時 Default ページを表示する(総合時

間を表示する)

char dir = 21; →ロボットを置く方向

unsigned char *s; →データキューから受信したデータ

20

Page 22: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

static unsigned char data_to_robo_cpu_dtq[5] = {0, 18, 14, 5, 41} :

robo_cpuデータキューに送信するデータ

static unsigned char data_to_sys_out_dtq[6]; sys_outデータキューに送信

するデータ

この関数の動作は、以下のフローチャートに示している。しかし、詳細な設計は、添付

している”sys_in”ファイルをご覧ください。

図:sys_in関数のフローチャート

関数 sys_inが使用した関数:

関数名:   getPage  LCD へ送信するメッセージを取る

書式:   unsigned char getPage(unsigned char indx)

機能: 1 リータン LCD へ送信するメッセージ

変数: static const unsigned char pages[3] =

21

Page 23: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

{TRANF_LCD_SRC_VIEW_SCORE_DISCOVER,

TRANF_LCD_SRC_VIEW_SCORE_RESCUE、TRANF_LCD_SRC_VIEW_SCORE

_TOTAL}

関数名:   getDirec  ロボットを置く方向をセッティングする

書式:   unsigned char getDirec(unsigned char indx)

機能: 1 リータン ロボットを置く方向

変数:static const unsigned char dirs[32] = {0, 1, 2, 3, 4, 5, 6, 7, 16, 17,18, 19,

24, 25, 26, 27,32,33,36,37,40,41,44,45,48,50,52,54,56,58,60,62}

ロボットを置く方向の値は、以下の表に

表:ロボットを置く方向の値

22

Page 24: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

3.7.6. TSK_ID_ROBO_CPU関数名 : robo_cpu

書 式 : void robo_cpu(VP_INT exinf)

機 能 : 1.データキューからデータを受信する

  2.命令とインプットを処理する

      3.ロボット状態を処理する

4.ロボットの活動を制御する

5.データキューにデータを送信する

変数:   

unsigned char robo_flag = 0; ロボット状態フラグ

unsigned char* rcv_data; データキューからデータを受信するポインタ

static unsigned char to_robo_alu[4] = {0,0,0,0}; データキューに送信す

るデータ

static unsigned char to_sys_in = 0; データキューに送信するデータ

unsigned char sen_val[2] = {0xFF,0xFF}; データキューからデータを受信

する

unsigned char* path; ロボットの道を格納するポインタ

unsigned char cur_id = 0, nxt_id = 0;

unsigned char pattern_flg = 0;

unsigned char startpoint_wall = 0;

unsigned char led = ALL_OFF;

int id;

unsigned char funny_flg = 0xFF;

robo_aluの主なフローチャートは以下に示す:

23

Page 25: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

具体的な動作は、フローチャートをファイルに示す。そのファイルをご覧ください。

24

Page 26: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

25

Page 27: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

26

Page 28: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

27

Page 29: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

関数名:  pid

書式:   void pid(unsigned char left_sensor, unsigned char right_sensor)

機能: 1 PIDを計算する

     2.各モータのタイマの周期を調整する。

変数:

この関数の動作は、以下のフローチャートに示す。

関数名:is_right_90_finish

書式: unsigned char is_right_90_finish(void)

機能: 1

変数: unsigned char tm_now;

この関数の動作は、以下のフローチャートに示す。

28

Page 30: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

関数名:is_left_90_finish

書式: unsigned char is_left_90_finish(void)

機能: 1

変数: unsigned char tm_now;

この関数の動作は、以下のフローチャートに示す。

29

Page 31: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

関数名:is_rot_180_finish

書式: unsigned char is_rot_180_finish(void)

機能: 1

変数: unsigned char tm_now;

この関数の動作は、以下のフローチャートに示す。

30

Page 32: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

関数名:  is_mov_backward_finish

書式:   unsigned char is_straight_with_movback_finish(void)

機能: 1

変数: unsigned char tm_now;

この関数の動作は、以下のフローチャートに示す。

31

Page 33: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

関数名:  is_straight_finish

書式:   unsigned char is_straight_finish (void)

機能: 1

変数: unsigned char tm_now;

この関数の動作は、以下のフローチャートに示す。

32

Page 34: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

関数名:  is_straight_with_movback_finish

書式:   unsigned char is_straight_with_movback_finish (void)

機能: 1

変数: unsigned char tm_now;

この関数の動作は、以下のフローチャートに示す。

33

Page 35: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

3.7.7. TSK_ID_ROBO_ALUrobo_aluの主なフローチャートは以下に示す:

34

Page 36: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

具体的に PADの robo_alu.txtファイルに示しているが、DIS_REQと DIS_MAT_IDと

DIS_RES_REQ命令処理ブロック手順に示す:

DIS_REQ 命令処理:

35

Page 37: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

DIS_MAT_ID 命令処理:algorithm1, algorithm2, algorithm3を採用している。

36

Page 38: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

37

Page 39: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

DIS_RES_REQ 命令処理:algorithm4を採用している。

robo_aluで利用しているアルゴリズムを以下に示す:

38

Page 40: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

39

Page 41: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

40

Page 42: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

41

Page 43: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

3.7.8. TSK_ID_WATCH関数名:watch    各段階の時間を計測する

書式 : void sys_in (VP_INT exinf)

機能: 1.データをデータキューから受信する

2. 壁情報を収集した時間とスタート点へ戻る時間およびけが人を運ぶ時間や総合時間を計測する

 3.適当的なデータキューに送信する

4.ビューモードを適当に入るために、メッセージを LCD へ送信する

変数: 

unsigned int minisec, seconds, minutes: 時間を記録変数

static unsigned char data_sys_out_dtq:データキューに送信するデータ

この関数の動作は、以下のフローチャートに示している。しかし、詳細な設計は、添付

している” watch”ファイルをご覧ください。

42

Page 44: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

3.7.9. TSK_ID_LCD_OUT関数名 : lcd_out LCD出力タスク

書 式 : lcd_out(VP_INT exinf)

機能: . Sys_outデータキューで受信した文字列を LCDに出力する。

ただし、排他制御の確認を容易にするために文字表示の時間間隔を少しあける

変数: 

43

Page 45: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

unsigned int minisec, seconds, minutes: 時間を記録変数

static unsigned char data_sys_out_dtq:データキューに送信するデータ

アルゴリズムの LCD_out タスク& LCD 出力タスクを lcd_out.bmp に示す。

lcd_out.bmpファイルをご覧ください。

44

Page 46: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

45

Page 47: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

3.7.10. TSK_ID_CTRL_LCD関数名 : dsp_lcd LCD表示タスク

書 式 : void dsp_lcd(VP_INT exinf)

機 能 : 1.無限ループで ctrl_lcd(LCD出力制御)を呼び出し、

エラーがあれば LEDに表示する

ただし、優先度は最低にすること

46

Page 48: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

4.プログラムユニットインタフェース設計書

4.1. シーケンス図

プログラムユニット間の相互作用を時系列に表す。縦軸は時間を表し下に向かって進

む。

4.1.1. ROBO_CPUとROBO_ALUコミュニケーション

47

Page 49: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

4.1.2. 入力タスク、制御タスク、出力のコミュニケーション(TSWタスク、割込みタスク、Sys_inタスク、Robo_cpuタスク、LCD表示タスク)

48

Page 50: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

49

Page 51: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

4.2. インタフェース詳細

インタフェースの詳細内容を記載する。

<記載例>

・ 呼び出し方式(値、意味)

・ 結果(値、意味)

・ データフォーマット(構造、値、意味、サイズ)

・制約事項

特になし

50

Page 52: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

5.メモリ使用量

メモリ種別ごとに使用量を記載する。使用量が分析できるように、各ユニットやリソ

ースごとに記載することが望ましい。

<記載例>

・ ROM(各ユニット名称+使用量の一覧

・ RAM(リソース名称+使用量の一覧

・ スタックエリア(各ユニット名称+使用量の一覧)

各タスクのメモリ量は、次の表に示している。

ID TASK_ID メモリ量

1 TSK_ID_GET_SW 128

2 TSK_ID_SW2 76

3 TSK_ID_SW3 76

4 TSK_ID_GET_SEN

SOR

76

5 TSK_ID_SYS_IN 408

6 TSK_ID_ROBO_CP

U

408

7 TSK_ID_ROBO_AL

U

408

8 TSK_ID_WATCH 408

9 TSK_ID_LCD_OUT 128

10 TSK_ID_CTRL_LC

D

256

全体プログラムのメモリ量は、次の表に示している。ID 数

使用タスク数 10 個

使用データキュー数 4 個

使用タスク優先度の最大値 4

割り組スタックサイズ 256byte

51

Page 53: 3. RescueRobo.ソフトウェア詳細設計書(4)

レスキューロボットソフトウェア詳細設計書

初期化スタックサイズ 256byte

カーネルが確保するタスクスタックの個数 10 個

カーネルが確保するタスクスタックの総サイズ 2372byte

カーネルが確保するデータキューの個数 4

カーネルが確保するデータキューの総データ数 16

マイコンが搭載している割り込むグループ番号最大値 31group

システムメモリプールサイズ(必要なサイズ) 4152byte

カーネル使用BSSセクションサイズ(.bss_paprika) 5256byte

カ ー ネ ル 使 用 DATA セ ク シ ョ ン サ イ ズ

(.MN.data_paprika)

56byte

(code\Jimeno_300ppspr1xx-4p_performanceファイルをご覧ください)

52