TI Arm Clangは、将来のTI Armコンパイラを代表する、TI Arm Cortexマイコン向けの新しいコンパイラ・ツール・セットです。LLVMプロジェクトをベースにしたこの新しいツールチェーンは、C/C++フロント・エンドとしてClangを使用します。究極的には、この新しいツールチェーンによって、より効率的なアプリケーションを開発できるようになります。

LLVMClang

LLVMは、モジュール式で再利用可能なコンパイラ・ツールチェーン・テクノロジーを集めたオープンソース・プロジェクトです。言い換えると、コンパイラを作成するための各種構成要素からなるイニシアティブの1つです。

Clangは、LLVMのサブプロジェクトであり、C/C++コンパイラのフロント・エンドです。どちらのプロジェクトも非常に勢いがあり、Appleや、Arm、Google、マイクロソフトのような企業から何年にもわたり投資を受けています。

Clangに移行することによるメリットは多数ありますが、最も大きいのが、ソフトウェアの互換性とコード・サイズです。

まずは互換性について見ていきましょう。現在、GCCを使って書かれたソフトウェアが大量に存在しますが、このようなソフトウェアを活かすには、GCC拡張と互換性があるツールチェーンを使う必要があります。多くの場合にツールチェーンとしてGCCが選ばれるのはそのためです。ところが、これにはGCCが生成するコードの効率があまり良くないという悪影響が伴っており、作成されたアプリケーションは動作速度が遅く、メモリを余計に使用してしまうため、サイズも大きくなります。

TIの新しいツールチェーンでは、フロント・エンドとしてClangを使用することで、GCC向けに書かれたコードの使用が可能になります。Clangは大多数のGCC拡張をサポートしています。つまり、GCC向けに書かれたCコードのほとんどがClangを使って活用できるようになります。

TI Arm Clangソリューションでは、Clangフロント・エンドとLLVMオプティマイザを、TIのリンカや最適化されたCランタイム・ライブラリといったTI独自のテクノロジと結合することで、コード・サイズが最適化され、ランタイムのフットプリントが最小限まで縮小されます。これにより、このツールチェーンは、GCCとの互換性に加えて、効率の良いコードを生成することができます。図1に、ClangとLLVMオプティマイザがTIのリンカやCランタイム・ライブラリとどのように組み合わされるかを示します。

  1TI Arm Clangツールチェーンのブロック図

コード・サイズの重要性

マイコン・アプリケーションにとって、コンパクトで効率の良いコードを生成することには大きな意味があります。一般にデバイスのメモリには制約があるので、使えるメモリ容量内にアプリケーションを収めるのに苦労することがあるかもしれません。結果としてコストとのトレードオフになり、場合によっては高コストでもメモリが大きいデバイスを選択するしか方法がないかもしれません。

TI Arm Clangツールチェーンはまだ新しく、改良も絶えず行われていますが、現時点でも非常に効率の良いコードを生成します。図2は、SimpleLinkマイコン向けソフトウェア開発キット(SDK)に含まれるいくつかのソフトウェア・スタック(CoreSDK[リアルタイム・オペレーティング・システムおよびドライバ]、OpenThread、IEEE 802.15.4g)を選んでコード・サイズを測定したものです。この図では、TI Arm Clang(tiarmclang)が生成したコードのサイズを、GCCおよび旧来のTI Armコンパイラ(armcl)と比較しています。

  2:コード・サイズの評価グラフ

この図でわかるとおり、TI Arm Clangツールチェーンが生成するコードの方がコンパクトです。CoreSDKの場合、TI Arm ClangのコードはGCCよりも5%、armclよりも3.5%小さくなっています。これは大した数値ではないように思われるかもしれませんが、アプリケーションをメモリに収めようとするときには大きな差になり得ます。この他にも、2021年には、TI Arm Clangに対してコード・サイズに大きく影響するような多数の改良を行うことを予定しています。

ソフトウェア・サポート

新しいコンパイラが出てくるのは素晴らしいことですが、使用したいソフトウェアでサポートされていないコンパイラは使い物になりません。TI Arm Clangは、GCC向けに書かれたコードと互換性があり、CC3220、CC3230、CC3235、CC1312、CC1352、CC2642、CC2652向けの最新のソフトウェア開発キット(SDK)でサポートされています。SDKには、旧来のコンパイラのサポートに加えて、TI Arm Clang向けのサンプル・プロジェクトが含まれます。開発対象がWi-Fi®、Bluetooth® Low Energy、Zigbee、あるいは15.4アプリケーションのいずれであっても、今すぐTI Arm Clangを使用することができます。

その他のメリット

TIは、Clangを利用してC++14やC11などの現行のCおよびC++言語標準規格のサポートも活用するため、目的のアプリケーションに最新の言語機能を活かすことができます。

TI Arm Clangは、機能安全性アプリケーションで重要性が増している、関数、行、リージョン/ステートメント、分岐カバレッジなどの、コード・カバレッジのサポートを提供します。

現在armclを使用している場合、コードまたはプロジェクトのTI Arm Clangへの移行作業は、スムーズで簡単です。移行の際に助けになる点として、TI Arm Clangはarmclと同じTIリンカを使用しているため、リンカのコマンド・ファイルを修正する必要はありません。

現行のTI Armコンパイラをサポート

TIは、armclに対するバグ修正を継続します。新たに機能を追加することはありませんが、バグ修正用のメンテナンス・リリースを定期的に提供する予定です。TIの各デバイス・ファミリには、TI Arm Clangのサポートに関して個別にタイムラインが決まっています。

まとめ

これまで設計者は、ソフトウェアの互換性か効率の良いコンパイラかのどちらかを選ぶことを強いられていました。しかし、新しいTI Arm Clangツールチェーンがあれば、1つのツールチェーンでどちらも得られるようになります。これで、GCC向けに書かれたソース・コードを利用し、コード・ベースのポータビリティを維持できると同時に、効率の良いコードを生成するコンパイラを活用することもできます。

TI Arm Clangは、こちらからダウンロードできます。または、Code Composer Studio統合開発環境のResource Explorerから互換SDKをダウンロードするときに、ツールチェーンをダウンロードできるオプションもあります。

※すべての登録商標および商標はそれぞれの所有者に帰属します。 
※上記の記事はこちらの技術記事(2020年12月14日)より翻訳転載されました。 
※ご質問はE2E Support Forumにお願い致します。

Anonymous