2015-01-12 17 views
8

私は、プロジェクトでCを使用してSTM32プロセッサ上のCortex-Mコアのファームウェアを開発しようとしています。ウェブ上で検索しています。 Keil、IAR 、Linaro、YagartoおよびGNU Tools for ARM Embedded ProcessorsARM Cortex-Mコンパイラの相違点

私の選択に影響を与える可能性のあるこれらのコンパイラの間には、どのような機能的な違いがあるのでしょうか?たとえば、愛好家のように私はベンダーからのサポートや支援は必要ありません。コードサイズの制限は現時点では問題ありません。また、使いやすさは、私が学ぶことが大好きではありません(そして、Keil LiteとEclipseをGNU ARMで設定して動作させている瞬間です)。

生成されたコードは、これらのコンパイラ間のサイズ/速度の点で大きく異なりますか?比較表はありますか? (私はウェブ上に古い情報しか見つけられていません)

+0

あなたの主な関心事は学習ですか?それでは、なぜコンパイラのパフォーマンスが気になりますか? LinaroとYagartoはgccの2つのバージョン(異なるライブラリ)です。私は最後の[あなたにリンクした人](https://launchpad.net/gcc-armembedded)を選択します。スピード/サイズの数値は常に合成ベンチマークに基づいています。コードを作成して別のコンパイラでコンパイルします。一般に、あなたがコードする方法は、コンパイラよりも結果を反映します。つまり、異なる 'C'実装の同じアルゴリズムです。 –

+0

私の主な関心事は明らかに学んでいますが、パフォーマンスは達成するのが悪いことではありません(そして多くの楽しみに取り組んでいます)。しかし、私は同じコードを別のコンパイラに持っていくというあなたの提案に従うでしょう。そして、私がもっとよく知っているものをチェックします。コメントありがとう –

+0

質問は学習コンテキスト外でも同様に有効ですので、「学習している場合はどちらを選択するかは問題ではありません」と却下しないでください。私は学んでいませんが、私の質問は非常に似ています。たとえば、商用オプションがGNU ARMツールチェーンに比べてパフォーマンスやコードサイズの違いが大きいかどうかを知りたいと思います。 –

答えて

3

ベンチマークは、それ自体がアートフォームであり、通常は結果を操作して任意のものを表示するのは簡単です。私はコンパイラが非常に小さなテストケースを除いて同じ結果を生成するとは期待していませんし、時にはそれらの小さなテストケースでは、テスト結果が同じか、時には大幅に異なります。他にはない。

たとえば、dhrystoneを使ってそのようなもの(コンパイラのパフォーマンス番号)を追跡していましたが、既知のベンチマークの場合(dhrystoneはこれ以上意味がありませんでしたが)、コンパイラによってはおそらく他の何かを犠牲にしてベンチマークの下でよく見える。

正解はなく、普遍的な「最高」はありません。見る人の目の中に、あなたは皆です。どちらのツールを使うのが簡単ですが、GUIやかわいい色やサウンドカードの音などの方が好きですか?そこから行く。

私がテストしたアプリケーションの一般的なgnuコンパイラは、他のベンチマークと比較して "高速"なコードを生成しませんが、ウェブページやフォーラムの数や例のために。また、サイズ制限もありませんが、それ以上の学習が必要な場合があります。

cortex-msはarmv6mファミリとarmv7mファミリに分割され、v6m(cortex-m0)は少数のthumb2エクステンション、armv7mには約150個のthumbv2エクステンションがありますので、あなたのツールがサポートしているものを理解し、間違ったチップで間違ったものを使用する必要はありません。コンパイラはこれを知っていれば、同じソースコードから異なる命令ミックスを生成することができます。さらに、異なるコンパイル・オプションを使用して同じコンパイラまたはファミリ内では、大幅に異なるコードを取得できます。そして、それを超えてキャッシュを持つm4の場合は、キャッシュラインにコードがどのようにあるのかによって、パフォーマンスが大きく異なる可能性があるので、ベンチマークは各ブロブのためのリサーチプロジェクトですベンチマークするCコード単一のコンパイラ内のパフォーマンス範囲は、別のコンパイラをシャドウすることがあります。または、重複が問題ではない場合もあります。

あなたがツールにアクセスできるのであれば、競合するツールを使い、職場や職場内に入ることを学ぶことで、職業や歩き方に適したツールを選択することができますKielの家に入ってすぐに仕事をしたり、すぐに仕事をすることができます。あなたがgnuだけで、仕事がキールの家のためのものであれば、あなたは仕事を失うかもしれません。

+0

非常に詳細なコメントありがとう! thumb2の拡張機能とコンパイラのサポートの互換性をチェックします。 –

3

いくつかの比較を行った。 IARとKeilは通常、デフォルト設定でGCCより優れています。しかし、コンパイラのフラグによっては、GCCをIARとKeilの結果にかなり近づけることができます。

あなたが言及しているコンパイラの中には、統合開発環境があります。他は単純なコンパイラです。 コンパイラ、エディタ、デバッガが統合された環境を好む人もいます。他の人は、自分の環境を設定することを好みます。それは味の問題です。

Yagartoに加えて、ARMのGCCの「Code Sourcery」ディストリビューションもあります。