マイクロコンピュータとそのソフトウェア - 東京大学

マイクロコンピュータとそのソフトウェア
•
組込み計算機
–
–
–
•
組込み計算機のソフトウェア開発
–
–
–
–
–
•
バイトコード
コンパイラとバイトコードのインタプリタ
Java言語
組込み計算機のプログラム実行環境
–
–
–
–
–
•
http://www.gnu.org/
C言語,C++言語などのコンパイラ,ライブラリ群
Configure, make, make installという開発手順
Binutils, gcc, newlibなど各種プロセッサに対応(targetとして指定可能)
コンパイラが走る環境を指定する(hostとして指定可能)
仮想計算機(virtual machine: VM)
–
–
–
•
ニーモニック命令言語
インストラクションコード
ラベルアドレスの解決
GNU言語処理系パッケージ
–
–
–
–
–
•
別の言語への変換ではなく,構文解析した結果から実行(execute)を行う.
CPUは命令コード列を順に実行するインタプリタでもある.
アセンブラ
–
–
–
•
字句解析(tokenizer): 単語に相当する部分を切り出す
構文解析(parser): 文の構造を作りあげる
別言語への変換(code generator): 機械命令言語への変換
インタプリタ
–
–
•
クロスソフトウェア(cross software)
コンパイラ(compiler)
アセンブラ(assembler)
リンケージエディタ(linkage editor)
ローダ(loader)
コンパイラ
–
–
–
•
プロセッサアーキテクチャ
CISC(complex instruction set computer)
RISC(reduced instruction set computer)
モニタプログラム
プログラムローダ
例外処理,割込み処理
マルチタスク処理
コンテクストスイッチ
実際のマイクロプロセッサ
–
–
–
MC68000系(CPU32)マイコン,SHマイコン,ARMプロセッサ
データシートをインターネットで検索しダウンロードしてみよ
CPU32のBSRがどのようなコードになっているか調べよ.
MC68000系のプロセッサ
CPU32 命令セット
関数呼出と戻り,局所変数確保するための命令
C言語のコンパイル
コンパイラ:プリプロセス,コード
生成,アセンブル,リンク
プリプロセス: gcc –E hello.c
> hello.i
コード生成: gcc –S hello.c
hello.sができる.
アセンブル: gcc hello.s
gcc –c hello.c
hello.oができる.
•
•
•
•
•
1.
2.
/* test.c */
#include <stdio.h>
3.
4.
5.
6.
test(int i, int j)
{
return (i * j);
}
7.
8.
9.
10.
11.
12.
13.
14.
15.
main(int argc, char *argv)
{
int i,j,k;
i = 3;
j = 2;
k = test(i,j);
if (k > 5) printf(">5¥n");
else printf("<=5¥n");
}
% ls
test.c
% m68k-coff-gcc -S test.c
% ls
test.c
test.s
%
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
.file
"test.c"
gcc2_compiled.:
__gnu_compiled_c:
.text
.even
.globl test
test:
link.w %a6,#0
move.l 8(%a6),%d1
muls.l 12(%a6),%d1
move.l %d1,%d0
jbra .L2
.even
.L2:
unlk %a6
rts
.LC0:
.ascii ">5¥12¥0"
.LC1:
.ascii "<=5¥12¥0"
.even
.globl main
main:
link.w %a6,#-12
jsr __main
moveq.l #3,%d0
move.l %d0,-4(%a6)
moveq.l #2,%d0
move.l %d0,-8(%a6)
move.l -8(%a6),-(%sp)
move.l -4(%a6),-(%sp)
jsr test
addq.l #8,%sp
move.l %d0,-12(%a6)
moveq.l #5,%d0
cmp.l -12(%a6),%d0
jbge .L4
pea .LC0
jsr printf
addq.l #4,%sp
jbra .L5
.even
.L4:
pea .LC1
jsr printf
addq.l #4,%sp
.L5:
.L3:
unlk %a6
rts
C言語のコンパイルにおけるコード生成
•
コード生成はどのようになるかを調べよ.
–
–
–
–
–
–
–
–
–
–
•
•
•
•
•
リンク:分割コンパイルされたオブジェクトモジュールの併合により実行可能なプログラムモジュールを生成す
る.
% ld hello.o –lc
モジュール間のリンクを行うプログラムをリンケージエディタという.
モジュール内にはシンボルテーブルがあり,モジュール内にでてくるシンボルの一覧を持つ.
シンボルテーブルを表示するコマンドとしてnmコマンドがある.
m68k-coff-nm test.o
モジュール内のセグメントの種類
–
–
–
•
•
•
•
•
If文
繰り返し文
代入文
四則演算
浮動小数
サブルーチン定義
サブルーチン呼出
局所変数の取り方
サブルーチンへの実引数の渡し方
サブルーチンからの戻り方
text: プログラムコードの領域
data: 初期値有りデータ領域
bss: 初期値無しデータ領域
セグメントのサイズを調べるコマンドとしてsizeコマンドがある.
m68k-coff-size test.o
リンケージエディタは,各モジュール内のシhンボルが指し示すアドレスが定まらないものがあればエラーを出
す. Printfなどのシステムが用意している基本関数は,ライブラリとして与えられる必要がある.
C言語の基本ライブラリとして libcや数値計算基本ライブラリlibmなどがあり,
ld main.o func.o –lm –lc
のように,libの部分は-lで省略される.
ライブラリは,arコマンドでオブジェクトモジュールを集めたもの.
m68k-coff-ar q f.a func.o main.o
m68k-coff-ar tv f.a
コンパイラコマンド gccは,このリンクまでを自動的に曜日出してゆく
% nm f.a
func.o:
00000000 b .bss
00000000 d .data
00000000 t .text
0000000e T _print_hello
U _printf
% m68k-coff-nm test.o
00000070 b .bss
00000070 d .data
00000000 t .text
00000000 t __gnu_compiled_c
U __main
00000000 t gcc2_compiled.
00000022 T main
U printf
00000000 T test
% m68k-coff-size test.o
text
data
112
0
bss
0
main.o:
00000000 b .bss
00000000 d .data
00000000 t .text
U ___main
U __alloca
00000000 T _main
U _print_hello
dec
112
hex
70
filename
test.o
機械情報ソフトウェア演習用
マイクロコンピュータボード
(UTYO-MECHANO-MCU)
•
•
•
•
•
•
•
•
•
•
モトローラ社 MC68336
– 68020相当コア(CPU32)
– 20.97MHz
– 7.5KB スタティックスタンバイRAM
– 周辺モジュール:SIM, TPU, QSM,
CTM4, QADC
– 160pin
2Mbit (256KB) RAM (1Mbit SRAM x2)
1∼4Mbit EPROM
SIM(システムインテグレーションモジュール)
クロックシンセサイザー、プログラマブルチップ
セレクタ、外部バスインタフェース、ウオッ
チドッグタイマー、バスモニター、クロック
モニター
TPU(タイムプロセッサユニット)
各種タイミング入出力可能なプログラマブルな
16の独立したタイマーチャンネル
QSM(キュードシリアルモジュール)
CTM4(コンフィギャブルタイマモジュール4)
フリーランニングタイマ、カウンタ、PWM
QADC(キュードアナログデジタルコンバータ)
10bit、16チャンネル、ユニポーラ、8.6μs/ch、
外部マルチプレクササポート
LCD (16桁x2行)、LCDドライバ
キーボード(4行x6列 マトリクス方
式)
圧電スピーカ、ドライバ
DCモータドライバ
赤外リモコン入出力インタフェース
LED
シリアル,パラレル通信
タイマ,カウンタ
A/D, D/A
外部入出力PIN
赤外線通信
CANポート
液晶
キースイッチ
ブザー
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
ソフトウェア演習内容
開発環境の構成法
– Cygwin,Gcc,JDK, Java
KVM
Java threadによる並行処理プログ
ラミング
タッチセンサ,距離センサ,回転セン
サの処理
センサーモータ並行処理
迷路抜け行動
MC68336プロセッサの構成
http://e-www.motorola.com/webapp/sps/site/prod_summary.jsp?code=MC68336
コンピュータ・ロボット用構成部品
•
•
•
•
•
ギヤ付DCモータ
バンパーセンサ
赤外線距離センサ
超音波距離センサ用回路基板
プログラマブルROM
センサの信号を読むためのプログラムの構成法
モータへの出力を行うためのプログラムの構成法
シリアル通信デバイスのプログラムの構成法
シリアル通信におけるバッファリング
ビット信号の入出力
割込み処理のプログラムの構成法
ROMに入れるプログラムの構成法
電源投入時のプログラムの走る手順
UTYO-Mechanoボードのアドレスマップ
RAM:
–
–
Cプログラム
Javaバイトコード(jar形式)
–
–
–
–
モニタ
Cライブラリ
JavaVM(KVM)
Javaで書かれたテストルーチン
–
スタック
ROM:
SRAM:
組込み計算機用Java言語
Java言語では,どのようなプロセッサにも対応できるように,一旦仮想的な命令セットを考え,Java言語で書かれたプログ
ラムをその命令セット(バイトコードという)をもちいたプログラムへコンパイルし,バイトコードのプログラムを順次実行する
仮想計算機を設けることでJava言語記述のプログラムが実行される.
仮想計算機は,バイトコードを読み込んではその命令を実行することを繰り返すプログラムで,C言語などで記述される.
Mechロボットには,その仮想計算機がROMに焼きこんである.
ロボットを動かすプログラムをJava言語で記述し,そのプログラムをコンパイルしてできたバイトコードファイルをロボットへ
送り,そのバイトコードを仮想計算機が実行することで,ロボットを動かすことができる.
Java言語には,プログラムの並列実行が可能なマルチスレッドを取り扱うクラスが用意されているため,ロボットの行動プ
ログラムを並列処理で記述できるようになる.
UTYO-Mechano-MCU用の小型のJava仮想計算機(KVM)の実装(SUN社のものから東京大学大学院情報理工学系研
究科知能機械情報学専攻 戦略ソフトウェア創造人材養成特任教員らによる実装.)
例外(exception)処理
通常の処理を横取りすることでいろいろな条件
ごとに処理用サブルーチンの先頭アドレスを登
録するテーブルをexception vectorという.
SH-Linux ユーザーズガイド
2002/9 Rev.1.0
SH-2002ユーザーズガイド
ハードウェア
はじめに
本書は、日立 SUPER-H マイクロプロセッサ SH7709S を採用した1ボードコン
ピュータ SH-2002 シリーズのハードウェアについて、主に本ボード固有の仕様
を説明するものです。搭載している CPU などデバイスの詳細については、それ
ぞれのデバイスメーカが発行しているデータブックなどをご参照ください。
本書はLAN0のEthernetMACアドレスが00:10:0C:00:08:00以降のボードに適用します。
1.ハードウェア仕様
バリエーション
SH-2002-64
SH-2002-128
1-1 ハードウェア仕様
基板サイズ・仕様
電源電圧・消費電流
CPU
動作速度
主記憶
オンボードROM
Ethernet
USB
バス制御
RS232トランシーバ
外部記憶デバイス
オンボードSIO
2
Rev.1.0
CPUコア速度200MHz
CPUコア速度200MHz
主記憶64MB版
主記憶128MB版
約134×96mm 6層基板 材質FR-4
DC5V 約1A
消費電力は動作状況により増加します。CF使用時の外部
電源は最少1A。マイクロドライブ使用時は最少2A必要。
* 拡張バスに±12V,-5Vを供給する場合はそれらの電源
が必要。
* CPU内部時計用バックアップ電池搭載(CR2032)
HD6417709S (SH3)
QFP208ピン
リトルエンディアン
CPU内部約200MHz SDRAM約66.6MHz
(原発振16.666MHz)
最大128MB(256MbSDRAM)
128MB版
16×4M×4バンク×4個
64MB版
16×4M×4バンク×2個
(64MB版では、U27,U28が未実装です)
2MB(フラッシュROM)
使用デバイス TE28F160B3BA90または相当品
100Base-Tx/10Base-T共用×2チャンネル
使用デバイス LAN91C111
USB ver1.1 2CH
使用デバイス ISP1161
使用デバイス XC9572XL-TQ100
使用デバイス ADM211EARSまたは相当品
CPUバス直結CFソケット×1(3.3V駆動)
CFカード、マイクロドライブ使用可
ご注意:活線挿抜はサポートしていません。必ず電源OF
Fの状態でカードの抜き挿しを行ってください。
SCI(ttySC0に割り当て)起動コンソールとして使用
SCIF2(ttySC1に割り当て)
SCIF1(ttySC2に割り当て)
SH-2002ユーザーズガイド
外部バスI/F
使用環境
ハードウェア
PC104サブセット
温度範囲
0∼40℃
湿度範囲
30%∼80%(結露不可)
1-2 接続コネクタ
電源
ttySC0
ttySC1
ttySC2
Ethernet
100Base-Tx
10Base-T共用
PC104サブセット
B7B-XH-A
B3B-ZR-SM3
DSUB9ピン(P)
B10B-ZR-SM3
RJ-45
PC104用64ピンコネクタ+40ピンコネクタ
1-3 付属品
電源コード
B3B-ZR-SM3
ttySC0変換ケーブル
CD-ROMメディア
クロス開発環境およびターゲット用ユーティリティ
本ボードの起動に必要な SH-Linux のルートファイルシステムを記録したコンパクトフラ
ッシュ(CF)カードは付属しません。別途 CF カードをお求めの上ソフトウェアの項をご
参照になり、付属 CD-ROM から構築してください。また、本ボードをお求めの販売店か
ら別売の記録済み CF カードのご購入も可能です。
1-4 ブロック図
ADDRESS , DATA bus
16.666MHz
SDRAM
64MB or 128MB
PC104bus
sub set
buffer
CPU(SH7709A)
32.768kHz
Flash ROM
2MB or 8MB
CN11
ttySC0
Ethernet
LAN91C111
x 2
100Base-Tx
RJ-45
SCI
CN10
ttySC1
RS232C
Driver
100Base-Tx
RJ-45
SCIF2
SCIF1
CF SLOT
RESET,CA
CN12
ttySC2
+5V
H-UDI
+3.3V
3.3VReg
+12,-12,-5V
RESET
DipSW
+2.0V
CPU core
BUS Control
XC9572XL
RESET(CA)
LEDx3
COMMAND
+1.9V
CPU RTC
CN9
Power
1.9VReg
RTC Reg
CR2032
JTAG
1-5 メモリマップ(IOマップ)
SH3 はリトルエンディアンでもビックエンディアンでも使用できますが、本ボードでは
リトルエンディアンを採用しています。
外部バスには 3.3V の CMOS(74LCXxx)でバッファされた信号が出力されており、TTL
Rev.1.0
3
SH-2002ユーザーズガイド
ハードウェア
レベルで動作するデバイスが接続可能です。
SH3 は 32 ビットの論理アドレスを持ち、4Gbyte の論理アドレス空間をアクセスできます。
論理アドレスの上位 3 ビット(A31-A29)は MMU によるアドレス変換やキャッシングの
有無の判定に使用されます。MMU が有効のとき、(A28-A12)が MMU によって物理アド
レスに変換されます(ページサイズ4Kbyte のとき)。
物理アドレス(A28-A26)は CPU 内部でデコードされ、周辺チップセレクト信号 CS0,CS2
∼CS6 になります。それぞれの CS 信号は、64Mbyte の範囲でアクティブになりますので、
外部に接続できるデバイスの物理アドレス空間は(64x6)Mbyte になります。
詳しくは日立が提供している SH7709S のユーザーズガイドをご覧ください。
メモリマップ(物理アドレス)
CS
デバイス
物理アドレス
バス幅
CS2
32
SDRAM
0x08000000−0x0BFFFFFF
0x0C000000 – 0x0FFFFFFF
CS3 32
CS0 16
フラッシュROM
0x00000000 – 0x001FFFFF 注1
0x10000300 – 0x1000031F
CS4 32
LAN0チップ
0x10000320 – 0x1000033F
LAN1チップ
0x12001020– 0x1200102F
16
USBチップ
0x14200000
–
0x142FFFFF
CS5
16
コンパクトフラッシュカード
LED1
0x14A00000
CS5 8
LED2
0x14C00000
CS5 8
LED3
0x14E00000
CS5 8
LED3:1
0x14800000
CS5 8
CS6 8/16
外部バス(メモリ)
0x18000000 – 0x19FFFFFF
注2
0x1A000000 – 0x1BFFFFFF
CS6 8/16
外部バス(I/O)
注意:物理アドレスは上位3ビットをマスクして記載してあります。Linux 動作中に特権
モードで使用している論理アドレス領域は、P1(メモリ)または P2(メモリ、I/O)領域
です。
注1:ディップ SW-8 ON 時には、0x15000000−0x151FFFFF
にマップされる
注2:ディップ SW-8 ON 時には、0x00000000−0x001FFFFF(バス幅 8bit) でもアクセ
ス可能です。
注意:64MB 版では、CS2 に SDRAM は搭載されていません。
1-5-1 ディップスイッチ(ソフトウェア編も参照してください)
番号
機能(用途)
備考
1
CPUのPTE3に接続されています
2
CPUのPTE6に接続されています
3
CPUのPTF0に接続されています
4
CPUのPTF1に接続されています
4
Rev.1.0
SH-2002ユーザーズガイド
5
6
7
8
ハードウェア
CPUのPTF2に接続されています
CPUのPTF3およびASEMD0に接続されて
います
フラッシュROMのWPに接続。CPUのPTD1に
も接続されています
CS0エリアのデバイスおよびバス幅設定。
CPUのPTD0にも接続されています
フラッシュROMのwriteプロ
テクト。
PC104準拠バスにROM
などを接続し、そこから
ブートする場合にスイッ
チをONにします。
1-5-2 LED
LED1∼2はソフトウェアで制御できる出力ポートPTJ6および7に接続されて
います。LED3∼6はEthernetデバイスに接続されています。
P1 領域は物理アドレス空間(H'0000 0000 ∼H'1FFF FFFF )に固定的にマッピングされ
ます。P1 領域では論理アドレスの MSB(ビット 31 )を 0 にしたアドレスが、対応する物
理アドレスになります。P 1 領域のアクセスはキャッシング可能です。
P2 領域は物理アドレス空間(H'0000 0000 ∼H'1FFF FFFF )に固定的にマッピングされ
ます。P2 領域のアクセスはキャッシングされません。
外部バスマップ(論理アドレス)
外部バスは周辺チップセレクト信号 CS6 を使用し PCMCIA 空間としていますので、論理ア
ドレスは次のようになります。
P1空間
0x98000000 – 0x99FFFFFF
P2空間
0xB8000000 – 0xB9FFFFFF
メモリアクセス
0xBA000000 – 0xBBFFFFFF
IOアクセス
メモリアクセスの場合はメモリリードライトコマンド(MEMR/MEMW など)が出力されます。
IO アクセスの場合はIOリードライトコマンド(IORD/IOWR)が出力されます。
1-6 割り込み
SH-2002 では、外部割込みとして IRQ0∼IRQ4 および PINT0∼PINT7 を割り込み入力とし
て使用するようにしています。NMI はボード上でプルアップされています。詳しくは
SH7709S のユーザーズガイドをご覧ください。
割り込み線と割り込み要因
割り込み番号
IRQ0
IRQ1
IRQ2
IRQ3
IRQ4
Rev.1.0
デバイス
LAN0インターフェース(LAN91C111)
LAN1インターフェース(LAN91C111)
CFカード
PC104準拠バスIRQ3
PC104準拠バスIRQ4
ベクタ番号(kernelでの)
32
33
34
35
36
物理的
論理的
5