|
|
|
| 2008/10/07 11:41||▲
|
|
|
今回は、"h8300-hms"ターゲットのgccの癖について調べてみたいと思います。コンパイラの癖を予め知っておくことで、コードの最適化がやりやすくなります。
癖1 浮動小数点型は単精度しかサポートされていません。float型は一般的な処理系と同様、IEC 60559の単精度浮動小数点フォーマットですが、double型やlong double型もfloat型と同じで単精度しかありません。これは、厳密には標準規格に合致していないのでしょうが、用途を考えるとこれでも十分な気はします。
癖2 バイトオーダーはビッグエンディアンです。Windowsにせよ、Linuxにせよ、Intelが主流になってしまった今日ではビッグエンディアンのプロセッサに触れたことがない方もおられるかもしれませんが、H8はビッグエンディアンなのです。
癖3 H8シリーズは、1ビット単位のシフト命令しかないため、シフト演算は決して速くありません。シフトを使うか、乗除算を使うか、微妙なケースもあるかもしれません。
癖4 wchar_t型は16ビットで、ワイド文字の内部表現はUTF-16です。組み込み用途にはオーバースペックかもしれませんが、<wchar.h>や<wctype.h>の関数は、そのつもりで実装する必要がありそうです。
癖5 CPUキャッシュ、パイプライン、スーパースカラといった近代的な機能はありません。それらの影響を考慮する必要はなさそうです。
癖6 文字列定数への書き込みはできません。昔のgccでは可能だったようですが、gcc-3.4.xやgcc-4.0.xではエラーになります。
癖7 -mint32を指定した場合、H8/300では、int型の読み書きがアトミックオペレーションになりません。sig_atomic_t型を決めるときには注意が必要そうです。
何か、強引に七癖にしてしまった感がありますが、他にも癖と呼べる特性が結構あります。それらについては追々お話しすることにしたいと思います。
|
| 2006/01/23 19:13|処理系の特性|TB:0|CM:1|▲
|
|
|
開発環境の構築の話もそろそろ飽きてきました。本来なら、ターゲットボードの接続、モニターの書き込み、実際のプログラムのダウンロードから実行までをここでやっておくべきかもしれませんが、実際に使う段階まで先送りにして、しばらく処理系の特性を見ていきたいと思います。
今回は「コンパイルオプション」を知るということで、gccの主なコンパイルオプションを押さえておきたいと思います。まずは、ターゲットが"h8300-hms"の場合に特有のものから見ていきましょう。
まずはプロセッサの種類および動作モードを指定するオプションからです。
-mh, -ms, -mn これらのオプションがなければ、プロセッサはH8/300とみなされます。-mhオプションを付けるとH8/300Hを、-msオプションを付けるとH8Sを指定します。-mnオプションは、-mhまたは-msと一緒に使用し、ノーマルモードであることを指定します。gcc-4.0以降では、H8SX用のオプションも加わっていますが、今回は扱わないものとします。
次に、C言語の仕様に関するオプションです。
-mint32 これはint型が32ビットであることを指定します。このオプションがなければ、int型は16ビットしてコンパイルされます。
-std=<standard> <standard>で指定した標準規格に従います。指定できる主な値は、"c89", "c99", "gnu89", "gnu99"です。文字通り、"c89"を指定すればANSI X3.159-1989に、"c99"を指定すればISO/IEC 9899:1999に従います。"gnu89"および"gnu99"は、それぞれ"c89"と"c99"にGNU拡張を加えたものです。このオプションがなければ、"gnu89"が選択されます。
-fsigned-char char型が符号付きであることを指定します。このオプションがなければ、("h8300-hms"がターゲットの場合)char型は符号なしになります。
今回、ターゲットとして使用するAKI-H8/3069FフラッシュマイコンLANボードでは、コンパイルオプションとして、"-mh -mint32"が必須となります。ただし、可能な限り"h8300-hms"の範疇での移植性は持たせようと思います。とはいえ、今回扱うボードに対応するもの以外は、最低限かつ無難な実装に収めると思います。
|
| 2006/01/23 13:30|処理系の特性|TB:0|CM:0|▲
|
|
|
|
|
ホーム
全記事一覧
<< 前ページ
|