科目名 |
情報システム工学実験第2 |
担当教員 |
酒居 敬一,高田 喜朗 |
対象学年 |
2年 |
クラス |
学部:専門001 |
講義室 |
A−WS |
開講学期 |
2学期 |
曜日・時限 |
月3,木3 |
単位区分 |
選択 |
授業形態 |
一般講義 |
単位数 |
2 |
準備事項 |
|
備考 |
|
授業の詳細1 |
授業の目的
効果的な情報システム・通信システムを構築するためには,計算機自身の仕組みを深く理解すること,および最新の効率的なソフトウェア作成技術を修得することの両方が必要である.
本科目では,「情報システム工学実験第1」で学習した基本的なアルゴリズムやデータ構造,およびそれに基づくプログラム記述法を前提とした上で,プログラム実行機械としての計算機の仕組みと近代的なソフトウェア作成技術の両方に視点を置いて,プログラム開発実験を行う.これにより,ソフトウェア技術者に求められる基盤的知識と能力を習得することを目的とする.
最終課題として,Lego Mindstorms RCXを用いてライントレーサ(線追跡ロボット)を作成する.ロボットのプログラム,および,プログラムをダウンロードするためのPC側プログラムの両方を自分たちの手で作成する.
本実験では具体的には以下のような項目について学習する. * 低級プログラム言語とプログラム実行の仕組み - C言語によるプログラミング - アセンブリ言語によるプログラミング - スタックを使った実行制御と記憶管理 * 制御型プログラムの作成法 - センサやモータを扱うプログラム - 簡単な通信手順に従って通信を行うプログラム * 中規模ソフトウェアの開発技術 - 分割コンパイル - Makeによるコンパイル作業の自動化 - バージョン管理システム |
授業の詳細2 |
授業の進め方
授業の前半では,C言語によるプログラミングの習得を中心として,講義と演習課題を通して学習する.一般的なプログラミング自体は習得済みであるので,プログラム実行の仕組みを意識した,より深い部分に立ち入った内容が中心となる.基本的な知識を問う課題から実用的なプログラムの作成課題まで,多くの課題を用意し,自然と理解を深められるよう配慮する. C言語自体の学習の後,分割コンパイルやMakeなどの開発技術の学習と,スタック等による実行制御の仕組みの学習,アセンブリ言語の初歩の学習などを,順次行う.
授業の後半では,ライントレーサ開発のための一連の作業を4〜5人のグループで体験する.その中で,アセンブリ言語によるプログラミング,通信プログラムや制御プログラム,各種開発ツールなどについて,実践的に学習する.
各課題に対する報告書,および,口頭試問(ヒアリング)によって,理解度・達成度を評価する.
達成目標
以下の能力を修得すること. * C言語およびアセンブリ言語によるプログラミングを行える. * スタックによるプログラム実行制御の仕組みを説明できる. * スタックやヒープなどの記憶管理法,およびポインタについて説明できる. * 周辺装置から入力を受け取ったり制御したりするプログラムを作成できる. * 決められた通信手順に従う通信プログラムを作成できる. * 読みやすいプログラムを書くことの必要性を理解し,実践できる. * Makeやバージョン管理システムなどを使って効率よくソフトウェア開発を行える. * ソースコードを共同所有する開発形態に馴染んでいる. * 作業工程の記述と結果に対する考察を含む報告書を作成できる. |
授業の詳細3 |
授業計画
以下のような順序で授業を進める.項目は順序を表しているだけで,1項目が1回の実験時間に対応しているわけではない. (I)は各人で実験・レポート作成を行う.(II)以降は4〜5人のグループを作成してグループで実験・レポート作成を行う.
1. 導入 実験の目的や全体像について説明する.
(I) Cプログラミングとプログラム実行の仕組み
2. 最初のCプログラム 記述方法,コンパイル方法を学ぶ.printfと変換仕様,エスケープ系列について学ぶ. 読みやすいプログラムを書くことの必要性について学ぶ.
3. C言語入門(初級編) scanfによる数値入力,標準ライブラリ関数の使い方,マクロ定義,基本データ型,配列,文字と文字列,ファイル入出力など,基本的なプログラム要素について学ぶ.
4. C言語入門(中級編) 再帰関数の定義の仕方,ポインタ,コマンドライン引数,テキストファイルとバイナリファイルなど,実用的なプログラムを作るために必要となる要素について学ぶ.
5. C言語入門(上級編) ビット単位の演算,数値の内部表現,構造体,メモリの動的な確保,低水準入出力など,プログラム実行の仕組みを理解する上での基礎となる知識を学ぶ.
6. 分割コンパイルとGNU Make 複数のソースファイルにプログラムを分割する方法,GNU Makeを使ってコンパイル作業を自動化する方法について学ぶ.
7. プログラム実行の仕組み スタックを用いることによる関数呼び出しの仕組み,自動変数の仕組みについて学ぶ.
8. アセンブリ言語から見たC 前項目のプログラム実行の仕組みをより詳細に見ることを目的として,Cプログラムの一部をアセンブリ言語でプログラムし直し,どのような仕組みで実行が行われているか,特に,スタックの使い方,引数の渡し方について学ぶ.授業後半のMicro Control Unit (MCU)用アセンブリプログラミングの初歩も兼ねている. |
授業の詳細4 |
(II) Lego Mindstorms RCXへのダウンロードプログラムの開発
9. RCX Executiveとの通信 RCX上のモニタプログラムであるRCX Executiveが受け付ける通信手順を学び,それに従って生存確認やバージョン確認,特定のプログラムのダウンロードを行うPC側プログラムを作成する.
10. バージョン管理システム バージョン管理システムの使用法について学ぶ.以降の実験では,バージョン管理システムを使って,グループ内でソースコードやレポート原稿を共有する.
11. ダウンロードプログラムの完成 Sレコード形式のファイルを入力として,その内容をRCXにダウンロードするプログラムを作成する.
(III) RCX用アセンブリプログラミング
12. RCX用アセンブリ言語 RCXに内蔵されているMCUであるH8/3292の命令セットアーキテクチャについて学ぶとともに,アセンブリ言語プログラミングの基礎について学ぶ.
13. 16進数表示ルーチンの開発 RCX本体の液晶部に指定された数値を表示するプログラムを作成する.
14. センサとD/A変換 RCXに内蔵のD/A変換器を使って光センサからの入力を読み取るプログラムを作成する.また,低域通過デジタルフィルタをプログラムして,安定した入力が得られるようにする.
15. モータ制御 モータの回転方向を制御するプログラムを作成する.光センサからの入力に応じて,モータの回転を変えるプログラムを作成する.
16. ライントレーサの作成 Legoブロックを組み立てて,ライントレーサを完成させる. |
授業の詳細5 |
テキスト: 実験指導書を配布する.
また,副教科書として以下を使用する. 『プログラミング言語C 第2版』,B.W. Kernighan, D.M. Ritchie著(共立出版)
参考書: 『プログラミング作法』,B.W. Kernighan, R. Pike著(アスキー) 『アルゴリズムとデータ構造』,石畑清著(岩波書店) 『やさしいコンピュータ科学』,A.W. Biermann著(アスキー)
成績評価: 全ての実験はA-WSに用意された環境で行い,レポート提出と口頭試問(ヒアリング)により評価する.レポートにおいては,課題解決方法,結果,結果に対する考察,設計にあたり工夫した点などを述べること.ヒアリングでは,本課題で作成したプログラムについて,基本的なアルゴリズム,データ構造を説明すること.また,レポートの内容に関連する質疑応答も行う. ヒアリング55点,レポート45点とし,全課題の合計が60点以上あれば合格とする.再試験はしない. AA: 90点以上100点以下 A: 80点以上90点未満 B: 70点以上80点未満 C: 60点以上70点未満 F: 60点未満
履修上の注意: 本実験の履修を希望する場合には,「情報システムプログラミング」「情報ネットワークプログラミング」を同時に履修すること.
備 考: 履修前の受講が望ましい科目=「アルゴリズムとデータ構造1」「計算機言語第1」 履修の前提となる必須科目=「情報システム工学実験第1」 同時履修すべき科目=「情報システムプログラミング」「情報ネットワークプログラミング」 |
授業の詳細6 |
|
授業の詳細7 |
|
授業の詳細8 |
|
授業の詳細9 |
|
授業の詳細10 |
|