16
マイクロコンピュータとそのソフトウェア 組込み計算機 プロセッサアーキテクチャ CISC(complex instruction set computer) RISC(reduced instruction set computer) 組込み計算機のソフトウェア開発 クロスソフトウェア(cross software) コンパイラ(compiler) アセンブラ(assembler) リンケージエディタ(linkage editor) ローダ(loader) コンパイラ 字句解析(tokenizer)単語に相当する部分を切り出す 構文解析(parser)文の構造を作りあげる 別言語への変換(code generator)機械命令言語への変換 インタプリタ 別の言語への変換ではなく,構文解析した結果から実行(execute)を行う. CPUは命令コード列を順に実行するインタプリタでもある. アセンブラ ニーモニック命令言語 インストラクションコード ラベルアドレスの解決 GNU言語処理系パッケージ http://www.gnu.org/ C言語,C++言語などのコンパイラ,ライブラリ群 Configure, make, make installという開発手順 Binutils, gcc, newlibなど各種プロセッサに対応(targetとして指定可能) コンパイラが走る環境を指定する(hostとして指定可能) 仮想計算機(virtual machine: VM) バイトコード コンパイラとバイトコードのインタプリタ Java言語 組込み計算機のプログラム実行環境 モニタプログラム プログラムローダ 例外処理,割込み処理 マルチタスク処理 コンテクストスイッチ 実際のマイクロプロセッサ MC68000系(CPU32)マイコン,SHマイコン,ARMプロセッサ データシートをインターネットで検索しダウンロードしてみよ CPU32BSRがどのようなコードになっているか調べよ.

マイクロコンピュータとそのソフトウェアinamura/lecture/download/20051024_soft3_68000.pdf · – マルチタスク処理 – コンテクストスイッチ • 実際のマイクロプロセッサ

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

マイクロコンピュータとそのソフトウェア

• 組込み計算機– プロセッサアーキテクチャ

– CISC(complex instruction set computer)– RISC(reduced instruction set computer)

• 組込み計算機のソフトウェア開発– クロスソフトウェア(cross software)– コンパイラ(compiler)– アセンブラ(assembler)– リンケージエディタ(linkage editor)– ローダ(loader)

• コンパイラ– 字句解析(tokenizer): 単語に相当する部分を切り出す– 構文解析(parser): 文の構造を作りあげる– 別言語への変換(code generator): 機械命令言語への変換

• インタプリタ– 別の言語への変換ではなく,構文解析した結果から実行(execute)を行う.– CPUは命令コード列を順に実行するインタプリタでもある.

• アセンブラ– ニーモニック命令言語

– インストラクションコード

– ラベルアドレスの解決

• GNU言語処理系パッケージ– http://www.gnu.org/– C言語,C++言語などのコンパイラ,ライブラリ群– Configure, make, make installという開発手順– Binutils, gcc, newlibなど各種プロセッサに対応(targetとして指定可能)– コンパイラが走る環境を指定する(hostとして指定可能)

• 仮想計算機(virtual machine: VM)– バイトコード

– コンパイラとバイトコードのインタプリタ

– Java言語

• 組込み計算機のプログラム実行環境– モニタプログラム

– プログラムローダ

– 例外処理,割込み処理

– マルチタスク処理

– コンテクストスイッチ

• 実際のマイクロプロセッサ– MC68000系(CPU32)マイコン,SHマイコン,ARMプロセッサ– データシートをインターネットで検索しダウンロードしてみよ

– CPU32のBSRがどのようなコードになっているか調べよ.

MC68000系のプロセッサ

CPU32 命令セット

関数呼出と戻り,局所変数確保するための命令

C言語のコンパイル1. .file "test.c"2. gcc2_compiled.:3. __gnu_compiled_c:4. .text5. .even6. .globl test7. test:8. link.w %a6,#09. move.l 8(%a6),%d110. muls.l 12(%a6),%d111. move.l %d1,%d012. jbra .L213. .even14. .L2:15. unlk %a616. rts17. .LC0:18. .ascii ">5¥12¥0"19. .LC1:20. .ascii "<=5¥12¥0"21. .even22. .globl main23. main:24. link.w %a6,#-1225. jsr __main26. moveq.l #3,%d027. move.l %d0,-4(%a6)28. moveq.l #2,%d029. move.l %d0,-8(%a6)30. move.l -8(%a6),-(%sp)31. move.l -4(%a6),-(%sp)32. jsr test33. addq.l #8,%sp34. move.l %d0,-12(%a6)35. moveq.l #5,%d036. cmp.l -12(%a6),%d037. jbge .L438. pea .LC039. jsr printf40. addq.l #4,%sp41. jbra .L542. .even43. .L4:44. pea .LC145. jsr printf46. addq.l #4,%sp47. .L5:48. .L3:49. unlk %a650. rts

• コンパイラ:プリプロセス,コード生成,アセンブル,リンク

• プリプロセス: gcc –E hello.c> hello.i

• コード生成: gcc –S hello.chello.sができる.

• アセンブル: gcc hello.s• gcc –c hello.c

hello.oができる.

1. /* test.c */2. #include <stdio.h>

3. test(int i, int j)4. {5. return (i * j);6. }

7. main(int argc, char *argv)8. {9. int i,j,k;10. i = 3;11. j = 2;12. k = test(i,j);13. if (k > 5) printf(">5¥n");14. else printf("<=5¥n");15. }

% lstest.c% m68k-coff-gcc -S test.c% lstest.c test.s%

C言語のコンパイルにおけるコード生成

• コード生成はどのようになるかを調べよ.– If文– 繰り返し文– 代入文– 四則演算– 浮動小数– サブルーチン定義– サブルーチン呼出– 局所変数の取り方– サブルーチンへの実引数の渡し方– サブルーチンからの戻り方

• リンク:分割コンパイルされたオブジェクトモジュールの併合により実行可能なプログラムモジュールを生成する.% ld hello.o –lc

• モジュール間のリンクを行うプログラムをリンケージエディタという.• モジュール内にはシンボルテーブルがあり,モジュール内にでてくるシンボルの一覧を持つ.• シンボルテーブルを表示するコマンドとしてnmコマンドがある.

m68k-coff-nm test.o

• モジュール内のセグメントの種類– 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.om68k-coff-ar tv f.a

• コンパイラコマンド gccは,このリンクまでを自動的に曜日出してゆく

% m68k-coff-nm test.o00000070 b .bss00000070 d .data00000000 t .text00000000 t __gnu_compiled_c

U __main00000000 t gcc2_compiled.00000022 T main

U printf00000000 T test

% m68k-coff-size test.otext data bss dec hex filename112 0 0 112 70 test.o

% nm f.a

func.o:00000000 b .bss00000000 d .data00000000 t .text0000000e T _print_hello

U _printf

main.o:00000000 b .bss00000000 d .data00000000 t .text

U ___mainU __alloca

00000000 T _mainU _print_hello

機械情報ソフトウェア演習用マイクロコンピュータボード(UTYO-MECHANO-MCU)

ソフトウェア演習内容

• 開発環境の構成法

– Cygwin,Gcc,JDK, Java KVM

• Java threadによる並行処理プログラミング

• タッチセンサ,距離センサ,回転センサの処理

• センサーモータ並行処理

• 迷路抜け行動

• モトローラ社 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ポート• 液晶

• キースイッチ

• ブザー

MC68336プロセッサの構成

http://e-www.motorola.com/webapp/sps/site/prod_summary.jsp?code=MC68336

コンピュータ・ロボット用構成部品

• ギヤ付DCモータ

• バンパーセンサ

• 赤外線距離センサ

• 超音波距離センサ用回路基板

• プログラマブルROM

センサの信号を読むためのプログラムの構成法

モータへの出力を行うためのプログラムの構成法

シリアル通信デバイスのプログラムの構成法

シリアル通信におけるバッファリング

ビット信号の入出力

割込み処理のプログラムの構成法

ROMに入れるプログラムの構成法

電源投入時のプログラムの走る手順

UTYO-Mechanoボードのアドレスマップ

RAM:– Cプログラム– Javaバイトコード(jar形式)

ROM:– モニタ

– Cライブラリ– JavaVM(KVM)– Javaで書かれたテストルーチン

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ユーザーズガイド ハードウェア

Rev.1.0 2

はじめに 本書は、日立 SUPER-H マイクロプロセッサ SH7709S を採用した1ボードコン

ピュータ SH-2002 シリーズのハードウェアについて、主に本ボード固有の仕様

を説明するものです。搭載している CPU などデバイスの詳細については、それ

ぞれのデバイスメーカが発行しているデータブックなどをご参照ください。

本書はLAN0のEthernetMACアドレスが00:10:0C:00:08:00以降のボードに適用します。

1.ハードウェア仕様 バリエーション SH-2002-64 CPUコア速度200MHz 主記憶64MB版 SH-2002-128 CPUコア速度200MHz 主記憶128MB版 1-1 ハードウェア仕様

基板サイズ・仕様 約134×96mm 6層基板 材質FR-4 電源電圧・消費電流 DC5V 約1A

消費電力は動作状況により増加します。CF使用時の外部電源は最少1A。マイクロドライブ使用時は最少2A必要。 * 拡張バスに±12V,-5Vを供給する場合はそれらの電源が必要。

* CPU内部時計用バックアップ電池搭載(CR2032) CPU 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が未実装です)

オンボードROM 2MB(フラッシュROM) 使用デバイス TE28F160B3BA90または相当品

Ethernet 100Base-Tx/10Base-T共用×2チャンネル 使用デバイス LAN91C111

USB USB ver1.1 2CH 使用デバイス ISP1161

バス制御 使用デバイス XC9572XL-TQ100 RS232トランシーバ 使用デバイス ADM211EARSまたは相当品 外部記憶デバイス CPUバス直結CFソケット×1(3.3V駆動)

CFカード、マイクロドライブ使用可 ご注意:活線挿抜はサポートしていません。必ず電源OFFの状態でカードの抜き挿しを行ってください。

オンボードSIO SCI(ttySC0に割り当て)起動コンソールとして使用 SCIF2(ttySC1に割り当て) SCIF1(ttySC2に割り当て)

SH-2002ユーザーズガイド ハードウェア

Rev.1.0 3

外部バスI/F PC104サブセット 使用環境 温度範囲 0~40℃ 湿度範囲 30%~80%(結露不可) 1-2 接続コネクタ

電源 B7B-XH-A ttySC0 B3B-ZR-SM3 ttySC1 DSUB9ピン(P) ttySC2 B10B-ZR-SM3 Ethernet

100Base-Tx 10Base-T共用

RJ-45

PC104サブセット PC104用64ピンコネクタ+40ピンコネクタ

1-3 付属品

電源コード ttySC0変換ケーブル B3B-ZR-SM3 CD-ROMメディア クロス開発環境およびターゲット用ユーティリティ 本ボードの起動に必要な SH-Linuxのルートファイルシステムを記録したコンパクトフラ

ッシュ(CF)カードは付属しません。別途 CFカードをお求めの上ソフトウェアの項をご

参照になり、付属 CD-ROMから構築してください。また、本ボードをお求めの販売店か

ら別売の記録済み CFカードのご購入も可能です。

1-4 ブロック図

SDRAM64MB or 128MB

CPU(SH7709A)

BUS ControlXC9572XL

RS232CDriver

CN11ttySC0

CN10ttySC1

CN12ttySC2

SCI

SCIF1

SCIF2

Flash ROM2MB or 8MB

buffer

EthernetLAN91C111x 2

CF SLOT

ADDRESS , DATA bus

COMMAND

PC104bussub set

100Base-TxRJ-45

DipSW

LEDx3

CN9Power

3.3VReg

1.9VReg

+5V

+3.3V

+12,-12,-5V

JTAG

H-UDI

RESET

RESET(CA)

RESET,CA

RTC Reg

+2.0VCPU core

+1.9VCPU RTC

100Base-TxRJ-45

16.666MHz

32.768kHz

CR2032

1-5 メモリマップ(IOマップ)

SH3はリトルエンディアンでもビックエンディアンでも使用できますが、本ボードでは

リトルエンディアンを採用しています。

外部バスには 3.3Vの CMOS(74LCXxx)でバッファされた信号が出力されており、TTL

SH-2002ユーザーズガイド ハードウェア

Rev.1.0 4

レベルで動作するデバイスが接続可能です。

SH3は 32ビットの論理アドレスを持ち、4Gbyteの論理アドレス空間をアクセスできます。

論理アドレスの上位 3ビット(A31-A29)はMMUによるアドレス変換やキャッシングの

有無の判定に使用されます。MMUが有効のとき、(A28-A12)がMMUによって物理アド

レスに変換されます(ページサイズ4Kbyteのとき)。

物理アドレス(A28-A26)は CPU内部でデコードされ、周辺チップセレクト信号 CS0,CS2

~CS6になります。それぞれの CS信号は、64Mbyte の範囲でアクティブになりますので、

外部に接続できるデバイスの物理アドレス空間は(64x6)Mbyteになります。

詳しくは日立が提供している SH7709Sのユーザーズガイドをご覧ください。

メモリマップ(物理アドレス) デバイス 物理アドレス CS バス幅

0x08000000-0x0BFFFFFF CS2 32 SDRAM 0x0C000000 – 0x0FFFFFFF CS3 32

フラッシュROM 0x00000000 – 0x001FFFFF 注1 CS0 16 LAN0チップ 0x10000300 – 0x1000031F LAN1チップ 0x10000320 – 0x1000033F

32

USBチップ 0x12001020– 0x1200102F

CS4

16 コンパクトフラッシュカード 0x14200000 – 0x142FFFFF CS5 16 LED1 0x14A00000 CS5 8 LED2 0x14C00000 CS5 8 LED3 0x14E00000 CS5 8 LED3:1 0x14800000 CS5 8 外部バス(メモリ) 0x18000000 – 0x19FFFFFF 注2 CS6 8/16 外部バス(I/O) 0x1A000000 – 0x1BFFFFFF CS6 8/16 注意:物理アドレスは上位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に接続されています

SH-2002ユーザーズガイド ハードウェア

Rev.1.0 5

5 CPUのPTF2に接続されています 6 CPUのPTF3およびASEMD0に接続されて

います

7 フラッシュROMのWPに接続。CPUのPTD1にも接続されています

フラッシュROMのwriteプロテクト。

8 CS0エリアのデバイスおよびバス幅設定。CPUのPTD0にも接続されています

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空間 P2空間 メモリアクセス 0x98000000 – 0x99FFFFFF 0xB8000000 – 0xB9FFFFFF IOアクセス 0xBA000000 – 0xBBFFFFFF メモリアクセスの場合はメモリリードライトコマンド(MEMR/MEMW など)が出力されます。

IO アクセスの場合はIOリードライトコマンド(IORD/IOWR)が出力されます。

1-6 割り込み

SH-2002 では、外部割込みとして IRQ0~IRQ4 および PINT0~PINT7 を割り込み入力とし

て使用するようにしています。NMI はボード上でプルアップされています。詳しくは

SH7709S のユーザーズガイドをご覧ください。

割り込み線と割り込み要因

割り込み番号 デバイス ベクタ番号(kernelでの) IRQ0 LAN0インターフェース(LAN91C111) 32 IRQ1 LAN1インターフェース(LAN91C111) 33 IRQ2 CFカード 34 IRQ3 PC104準拠バスIRQ3 35 IRQ4 PC104準拠バスIRQ4 36 物理的 論理的