2009年7月9日木曜日

LPC2388 GNU GCC 浮動小数点の扱い

CQ出版、Interface誌 付録基板 LPC2388 を あいも変わらず、暇をみてはいじっています。
 以前に組み込んだプログラムの一つに不具合があり、これを調べていて、その原因が浮動小数点(float、double)の扱いにあることが判りました。

 今のところ、まだ解決の目途は立っていません。

1.コンパイルオプション -mhard-float について。
 LPC2388を触り始めたころ、浮動小数点の扱いで、-mhard-float  をコンパイルオプションに加えるようになった。
 どうもこのコンパイルオプションが問題と思われるようになった。
 1)コンパイルオプション -mhard-float なしで、問題のプログラムを Make する。
   標準Cライブラリ(libc.a、libm.a、、)の関数を使用しているサブルーチン、関数、では、依然、不具合は解消されず。しかし、標準Cライブラリ(libc.a、libm.a、、)の関数を使用しないサブルーチンでは不具合は解消していた。
 2)コンパイルオプション -msoft-float を加えて、問題のプログラムを Make する。
   Make時、リンクでエラーが起こる。(標準Cライブラリが不適合)

2.msoft-float 環境のgcc開発環境について、
  標準Cライブラリを msoft-float で構成すれば、問題解決と思い。gcc開発環境の再インストールを行った。
 (gccのインストールで、configure の オプションに --with-float=soft を加えた。)
 1.2)のMakeエラーは解消、でも不具合は残った。


3.ARM7TDMI-Sの浮動小数点対応について。
 Interface 2009/5 P58 の 「機能を拡張するコプロセッサ」の節 表2 コプロセッサ番号 CP11、CP12 で 倍精度/単精度浮動小数点 の記載があり、LPC2388が浮動小数点処理機能をハードで実現すると思われ、コンパイルオプション -mhard-float  は妥当と思われた。
 しかし ARM7TDMI-S Revision r4p3 Technical Reference Manual の 4.1.1 「Coprocessor abailability」では、CP14 Debug controller と CP15 System contorol だけの記載  やはり コンパイルオプション -msoft-float が正解なのか。。。


※ もともと、gccの開発環境は、同じCQ出版 DW誌の STM32F103(Cortex-M3)の開発環境です。
 LPC2388で使う場合、CPUのアーキテクチャの差異を考慮して、gccの再インストールしなければならないと思います。

 今回、-msoft-float 対応 で gccのインストールのみ、configure の オプションに --with-float=soft を加えたが、newlibについては行わなかった。(makeが通ったのでかまわなかったと判断)
 次は、newlibの再インストールでも行おうと思います。(指定可能かどうか不明ながら)。。

 現時点では コンパイルオプション -mhard-float  の適否は不明。(-msoft-floatが正解と言い切る自信無し。)


ひまを見てボチボチと、、、、

 >>追加検証 
  gccとnewlibのインストール configureオプションに --with-float=soft を追加。 + コンパイルオプション -msoft-float の make。
   浮動小数点でこけていた箇所が通るようになった。 一応動作確認。(7/10)

0 件のコメント:

コメントを投稿