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)
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿