そこでほぼ4年前の基板CQ-STARMを引っ張り出し、電源ON、するとその当時組んだプログラムが動きだしました。「お久しぶり」といった感じでした。
この基板に搭載されたMCUはSTM32F103で
動作クロック72MHz、RAM 20KB、フラッシュROM 128KB
本年の「FM3マイコン基板」に搭載されるMCUはMB9BF618T(予定)で、
動作クロック144MHz、RAM 128KB、フラッシュROM 1MB
かなりのスペックです。 今年は本腰を入れていろいろ遊びたいと思います。
さて、STM32基板ですが、若干物足りないスペック、開発環境はIARのWorkbench(使用制限)、追加部品の水晶発振子の入手性 等で、その当時、動作確認程度の開発にとどめていました。
そのような扱いのSTM32基板、稼働したプログラムのプログラムソースをビルドすると、案の定、ビルドエラーが発生しました。他のARM基板(LPC2388、LM3S8962)での開発でGNU GCCの開発環境(GCC ver.3.4. => ver.4.3 )を組み直したのが原因だと思われます。
今年のFM3基板の準備として、GNU GCCの開発環境の組み直しを行いました。
1.GNU GCC 開発環境について
◎GCCは、ARM対応版を整備する。
ARM7TDMI、Cortex-M3、、、、各MCUコア共通
◎コードセットはThumb
GNU GCC はThumb-2に非対応 GCC Vre4.6.3のインストールで Thumb-2のコードセットがインストールされることを秘かに期待していたのですが残念、、、、Thumb-2は2003年の発表で、そろそろGNU GCCでThumb-2の対応があっても良いのではと思います。
Interface編集部、ARM社、富士通、、、、どこでも良いから、GNU GCCのThumb-2対応版をリリースしてほしいものです。
◎FPU (Floating Poing Unit; 浮動小数点演算ユニット)無しで整備する。
GNU GCCでビルドすると。「…m-elf/4.6.3/thumb/lib**.a(_******.o) uses hardware FP, whereas main uses software FP」のビルドエラー発生 安直にコンパイルオプション -mhard-float を付加、これはCortex-M3ではNG。
そこで、binutils、gcc、newlibでconfigureオプション --with-float=soft を指定して再インストールしました。
2.GNU GCC(Vre4.6.3) 開発環境整備 手順
1)Cygwinのインストール
gccに加え、binutils、(libiconv)等のパッケージをインストールする。
※出来るだけGNU GCCの開発環境(Cygwin上で動くソフトウエアを開発する環境)を整えてしまう。
2)gccビルド準備( 1)の補足 )
gccビルド用に以下のパッケージをインストールする。
①gmpのインストール
②mpfrのインストール
③mpcのインストール
④libiconvのインストール
※今回はCygwinのインストールでは組み込まず、ここでインストール
3)gccビルド
ここでビルドするgccは、Cygwin上で稼働し、ARM MCUで動くソフトウエアを出力する。
①binutilsのインストール
binutils ver.2.22ではインストール失敗(初回)、ver.2.21.1で成功
一旦GNU GCCをインストール後再度 ver.2.22をインストールで成功
②gccのインストール
③newlibのインストール
newlib ver.1.20.0ではインストール失敗(初回)、ver.1.18.0で成功
その後、ver.1.19.0をインストール 成功
その後、ver.1.20.0をインストール 成功
③gccのインストール
configureでオプション --with-newlib を追加して再インストール
※ST32F103 LCD出力プログラム
メモ
※configureオプション --with-float=
--with-float=soft 浮動小数点演算をライブラリを使って実行
--with-float=hard 浮動小数点演算をFPUを使って実行
※Cortex-M3では Thumb の一部の命令がサポートされていない。コンパイル オプション -mcpu=cortex-m3 指定がこの問題に対応してくれると良いのですが。後々手こずることになりそうです。
Windows環境で自分でコンパイラを作成するのではないのであれば
返信削除GNU toolchain の Sourcery CodeBench Lite Edition for ARM を使うとオプションの設定で Thumb-2 に対応したコンパイル結果ができるようです。
https://sourcery.mentor.com/sgpp/lite/arm/portal/subscription?@template=lite
Interface 2008年11月号の記事ですが、GCCはThumb-2対応出来ているようですよ。
返信削除http://www.cqpub.co.jp/interface/sample/200811/if11_094.pdf
連投ですみません。
返信削除決定的な情報が見つかったもので…
GCC 4.3.xから Thumb-2に対応されているようです。
http://gcc.gnu.org/gcc-4.3/changes.html
juj*r*uさん コメントありがとうございます。
返信削除GCCはThumb-2に対応しているようです。
ご指摘のInterface誌の記事からは、GCC の開発環境では、binutilsがThumb-2未対応で実質Thumb-2の開発まだ出来ないと読み取りました。
また、今回のGCCのインストール後、各ライブラリ(libgcc、libc等)が ARMコード(lib/fpu)とThumbコード(lib/thumb)の2組のみ組み込まれていたのでThumb-2未対応と判断しました。ブログでは言葉足らずでした。
このライブラリについては、GCCがThumb-2対応可なので、GCC及びnewlibのインストール(configure)を工夫すれば解決するのかも知れません。
私、GNU GCCについては、まだまだ勉強中といったところです、皆様のフォロー頼りです。よろしくお願いします。