SH-4上で動作する 組込みプログラムの クロス開発環境構築と その試作 5497041 金子恵 目次 1 2 3 4 5 6 組込みシステム 動機 目標 ターゲットマシン クロス開発環境の構築 プログラムの概要 1.組込みシステム (embedded system) ● 各種の機械や機器に組み込まれて、 その制御を行うコンピュータシステム ● ある目的に専門化されたコンピュータシステム 例 自動車 家電製品 AV機器 携帯電話など 自動車内の組込みシステム パワートレイン系(駆動系) エンジン制御 トランスミッション制御 シャシー系(走行系) ブレーキ制御 姿勢制御 サスペンション制御 ボディー系 ドアロック・ウィンドウ制御 照明・シート制御 情報・エンターテイメント系 カーオーディオ・カーナビゲーション 情報ー制御複合システム 情報系のシステムから得た情報を制御に活用 汎用コンピューターシステム 特別な用途のために設計されたのではない 多くの組込みシステムを含んでいる (モデム・キーボード・マウスなど) プラント制御システム パソコンベースのハードウェアが用いられる場合も多い 携帯電話機 JAVAをサポートしている物も販売されている 多種多様な組込みシステム システム規模の面においても、 要求事項の面においても、 多種多様な組込みシステムが存在する。 全ての組込みシステムに適用できる技術は多くない。 例 機器の製造個数が多い場合 システム1つの製造コストがトータルコストに大きい影響をもつ 機器の製造個数が少ない場合 開発コストを小さくする必要がある 組込みシステムの特性 ① 専用化されたシステム ・組込みソフトウェアは機器に固定されている →ソフトウェアが入れ替えられることは希である。 ・ハードウェアや OSはアプリケーションが用いる必要最低限の 機能のみを備えていればよい →最適化設計が出来る ② 厳しいリソース制約 ・コストダウン要請 ・動作条件の制約 ・低消費電力 ・小型化・軽量化 ③ リアルタイム性 ④ 高い信頼性 ←製造個数が多い物 ←自動車など(温度条件・ノイズ条件) ←人工衛星・非接触ICカード ←携帯機器 組込みソフトウェアの特性 ① ハードウェアに密着したプログラミング ② 開発環境とターゲットマシンの分離 ③ 多様なハードウェアと多様なOS PowerPC系 i86系 SHシリーズ V800シリーズ など OS9 μITRON WindowsCE など 組込みシステムのまとめ ① 最低でも1つのプロセッサとソフトウェアを含んでいる。 ② ソフトウェアをもつために、 ・実行コードを保存する領域 (ROM) ・実行時のデータ処理のため一時的な保存領域 (RAM) ③ 入力・出力をもっている メモリ 入力 プロセッサ 出力 2 動機 家電製品やAV機器などのコンシューマ機器の分野では、 世界的な有力メーカーの多くが日本企業である。 この意味で、組込みシステムは、日本が世界に先駆けて 研究に取り組むべき分野であり、日本が先進性・独自性 を発揮できる分野でもあるので、その基礎を学ぶことは将来 仕事をする上でとても大切なことであると思った。 3 目標 組込みシステムのソフトウェアを開発するための クロス開発環境を構築し、 その上で作成したプログラムをターゲットマシン上で 動かす。 4 ターゲットマシン CQ RISC評価キット/SH4 exeGCC評価版 SH7750 デバッガ メモリ CPUボード ROMライター PARTNER-J 日立純正C/C++ コンパイラ評価版 CPUボードとPARTNER-J マイクロプロセッサ(プロセッサコア) 汎用システム ←高速化に重点 組込みシステム ←高速化に加え、低消費電力や コード効率も重視 SH7750 (日立SuperH RISC engine SH7750) ● 日立製作所のSuperHシリーズのマイクロプロセッサ (32ビットRISCプロセッサ) SH-1 SH-2 SH-3 SH-4 ● コード効率を高めるために、16ビット固定長命令を採用 RISC系のプロセッサは一般的に32ビット固定長 ● デジタルスチルカメラ・カーナビゲーション・PDAなどの マルチメディア分野をはじめとして多く採用されている SH-1 SH-2 ・組込み用途としての ラインアップを充実 ・処理能力があり、 低消費電力で様々な 機能をオンチップ化 チップが小さい →低価格 ・SH-2E 自動車 SH-3 SH-4 ・キャッシュ・メモリ管理機構 を追加 ・コンピュータとしての機能 アップを実現 ・SH-3 モバイルコンピュータ 「パワーザウルス」 「カシオペア」 命令セット SH-4 91命令 SH-3 68命令 SH-2 62命令 SH-1 56命令 グラフィック演算命令 (ベクトル・内積) セガのドリームキャスト に採用された。 メモリ以外の 周辺モジュールの オンチップ化 SH7750(LSI)について 通信制御 クロックの発生 CPU 仮想記憶 割り込みの 制御 CPG INTC SCI カウント RTC TMU MMU BSC メモリ DMAC メモリやモ ジュールのデー タなどの受け渡 し メモリマップ 物理アドレス 0x0000_0000 0x0400_0000 0x0800_0000 エリア n 接続デバイス データバス幅 0 1 2 フラッシュROM 16ビット SDRAM 32ビット 0x0C00_0000 3 0x1000_0000 4 SRAM 8ビット 0x1400_0000 5 LED 8ビット 0x1800_0000 6 0x1C00_0000 7 予約 5 クロス開発環境の構築 クロス開発環境とは…? コピー コンパイルする 実行コード C言語 Windows なぜか?? Windowsの 実行コード 実行できない! UNIX そのマシン特有の機械語を生成している 他のマシンでは実行できない!! 今回のターゲットマシンで考えると コンパイル 実行できる! SH-4の C言語 実行コード SH-4の 実行コード パソコン SH-4 パソコン上でそのパソコン特有の機械語とは異なる、 ターゲットマシンの機械語を生成するようなコンパイル環境 環境構築のために用意したもの ・binutils アセンブラ・リンカ・ ユーティリティー ・GCC Cコンパイラー FSF(Free Software Foundation)という団体のGNUプロジェクトが 開発しているフリーソフトウェアのコンパイラ ・GDB デバッガ ・newlib 組込み用途に使える 標準ライブラリ これらは、UNIX系のOS上で動作する 今回の環境 LAN newlib configure --target=sh-coff GDB Windows FreeBSD GCC binutils PARTNER-J プ リ ン タ ー ケ ー ブ ル CPUボード RS232-C ROM化に使う リモートデバッグ時に使う ROM化するまでの流れ LAN コンパイル Sレコード・ FreeBSD バイナリ オブジェクト GDB C言語 レコード オブジェクト Windows リモートデバッグ GBDと通信して リモートデバッグ GDBのstub プログラム ROM オブジェクト RAM CPUボード ROM化 PARTNER-J 6 プログラムの概要 • 発光ダイオードを点滅させる • 初期化の流れ • メインプログラムの概要 初期化の流れ パワーオンリセット CPUによる初期化処理 プログラムによる初期化処理 メインプログラム 処理モード 例外発生 割り込み発生 リセット 特権モード ユーザーモード 復帰命令(RTE命令) CPU内の重要なレジスタ(32ビット) ①汎用レジスタ R0+R1 10 25 15 R0 R1 ・ ・ R15 R0の値+メモリの値 メモリ 15 ②ベクタベースレジスタ(VBR) CPUによるリセット時の初期化処理 VBR+0X000 リセット VBR+0X100 VBR+0X600 VBR+400 一般例外 割り込み TLBミス例外 パワーオンリセット 0x000 タイマー マニュアルリセット 0x020 リフレッシュ ベクタアドレステーブル ① ② 例外事象レジスタ 0x000 割り込み事象レジスタ ベクタベースレジスタ 0 例外コードを設定 0を設定 ③ 特権モード 割込み禁止 リセット ベクタアドレス テーブル ソフトウェアによる初期化処理 ① 例外コードの解釈 例外コード 例外事象レジスタ 解釈する パワーオンリセット(0x000)なら 以下を実行する ② バスステートコントローラ・キャッシュの初期化 BSC・キャッシュの初期化 外部メモリ 0x0000_0000 フラッシュROM 0x0800_0000 ワークエリア SDRAM 0x1000_0000 0x1400_0000 リセット時はエリア0のみ 使用可能 初期化する SRAM LED 予約領域 メモリの種類 バス幅 など 実効アドレス空間 外部メモリ 0x0000_0000 0x0000_0000 フラッシュROM P0 0x0800_0000 キャッシング可能 0x8000_0000 P1 キャッシング可能 32ビット 0x1000_0000 4G空間 0xA000_0000 0x1400_0000 SDRAM 実効アドレス空間 0x0000_0000 U0 キャッシング可能 0x7C00_0000 SRAM LED ユーザーモード P2 0xC000_0000 予約領域 P3 キャッシング可能 0xE000_0000 P4 0xFFFF_FFFF 特権モード 29ビット キャッシュの初期化 キャッシュを有効にする セクションの初期化 プログラム領域 ROM 定数領域 初期化データ領域 コピー RAM 初期化データ領域 未初期化データ領域 0で初期化 割り込みを許可する メインプログラム 初期化のまとめ CPU 例外コード 例外事象レジスタ 0x000 0 ベクタベースレジスタ 特権モード例外ブロック 0+0xA000_000 リセットベクタテーブル プログラム 例外コード解釈 0x000 リセットベクタテーブル BSC・キャッシュの初期化 セクションの初期化 ベクタテーブルの設定 例外ブロックなどの解除 メインプログラムへ プログラム概要(sample.c) 1秒間隔で点滅を繰り返す 消灯→点灯→消灯→点灯・・ 点灯:0~9までをカウントアップ メイン関数 Timer関数 TMU (タイマユニット) INTC (割り込みコントローラ) クロック数を決める CPUクロック、バスクロック、周辺モジュールクロックを決定する。 CPUクロック:200MHz CPU:バスクロック:周辺モジュール= 1 : 1/3 : 1/6 CPU=200MHz バス=66.6MHz 周辺モジュール=33.3MHz TMU(タイマユニット) 決められた時間をカウントダウンする カウントクロックを設定する Pφ=33.3MHz(周辺クロック数)として Pφ/16 1クロックは約480ナノ秒 今回 TMUは1ミリ秒をカウントするので Y:カウント数 480×Y=1,000,000ns 1msのカウント数=2,083 タイマースタート 割り込みの動作 TMU ベクタテーブル 1msカウント CPU 割り込み RTE 例外コードをセット 割り込みルーチン 割り込みサブルーチン 0x400 割り込みサブルーチン Timer関数 汎用レジスタ スタック Sample.cの流れ (Timer関数を呼び出してから) メイン関数 Timer関数 1秒間をカウントする Flag=TRUEのとき 消灯 点灯(1~9) 1msを1000回カウント 1秒間カウントしたら→TRUE それ以外 →FALSE Flag=TRUE 7セグメントLED D3 0x1400_0000 D2 D1 D0 ・ ・ 数値 D3 ・ ・ D2 DOT D1 D0 A 0~ ~ F9 0 1 点灯 消灯 消灯 点灯
© Copyright 2024 ExpyDoc