適用先: ARM 開発ツール
回答
この記事に含まれている情報の適用先:
- ARM 開発ツールの全バージョン
質問
Keil 社によって提供されている例の(全部ではないものの)ほとんどが Thumb モード用である理由を教えてください。
ARM デバイスの重要な特徴の 1 つは実行速度です。容量が大きなオンチップ Flash ROM デバイスを入手することが可能なため、Flash ROM サイズは一般にそれほど重要ではありません。
Thumb モードはサイズと性能の両方で ARM モードよりも優れているのでしょうか?
回答
各種 ARM ユーザーズ マニュアルには複数の相反する記述があります。Philips LPC2000 データシートから 2 例のみを以下に示します。
- Thumb コードは、ARM のコード サイズの最大 65% と、16ビット メモリ システムに接続されている同等の ARM プロセッサの性能の 160% を提供することが可能です。
- コード サイズが重要なアプリケーションの場合、代替の 16ビット Thumb モードでは最小限の性能低下でコード サイズが 30% 以上縮小されます。
命令のフェッチは命令の実行よりも時間がかかることにご注意ください。
同一プログラム上で、ARMモード中で多くのThumbモード命令が要求されます。しかし、すべてのThumb命令は16bit(ARMモードは32bit)のため、より少ないコードサイズが求められます。コードサイズが少なくなれば、その分より多くの命令がフェッチされる場合があります。
Philips LPC2000 デバイスが最大クロック(= 60MHz)でオンチップ Flash からコードを実行する場合、Flash サブシステムは 20MHz の速度で 128 ビット(4 個の ARM または 8 個の Thumb 命令)を供給します。連続的に実行する ARM コードは、ストール(コード フェッチのための待ち状態)を必要としません。しかし、実際のプログラムでは分岐が発生します(条件き、またはサブルーチン呼び出し)。Thumb コードの場合、同時により多くの命令をフェッチすることができ、必要なストールが少なくなります。Thumb と ARM の速度比較結果はありませんが、Philips 社は Thumb モードに集中すると当社に伝えてきました。
実際に、Thumb モードでは最小限の速度低下になります(35% のサイズ縮小との比較)。高速割り込みは ARM モードでコーディングされ、プログラムは CARM Compiler の属性 __ram を使用して RAM 内に保存できます。このように、タイムクリティカルなプログラム部分では最高の ARM 実行速度が使用される一方、コードの大部分では最小限の速度低下で最高のコード効率を提供する Thumb モードが使用されます。