組み込みシステム

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
点灯
消灯
消灯
点灯