マイクロコンピュータとそのソフトウェア • 組込み計算機 – – – • 組込み計算機のソフトウェア開発 – – – – – • バイトコード コンパイラとバイトコードのインタプリタ 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
© Copyright 2024 ExpyDoc