ewarm付録情報・c++ の使用 ・アプリケーションに関する考慮事項...
TRANSCRIPT
www.iar.com
EWARM付録情報
IAR システムズ株式会社
改訂日: 2014年8月1日
www.iar.com 2Copyright(C)2014 IAR SYSTEMS, All rights reserved.
目次
• EWARMのマニュアルガイド• ARMの命令セット• インストールファイルとドキュメント• EWARMのオプション設定概要• ビルド時の生成ファイル• スタートアップシーケンス• CortexのCoreSight• デバッグコネクタ情報• SWV(SWO)機能• ETMトレース機能• デバッグウィンドウ• シミュレータ機能• EWARMの 適化• EWARMの便利な開発テクニック• EWARMの速度性能評価手順• EWARM関連情報URL
Update
Update
www.iar.com
EWARM付録情報
• EWARMのマニュアルガイド
www.iar.com 4Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのマニュアルガイド
インフォメーションセンタからのリンク
M0 / M0+ M3 / M4
www.iar.com 5Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのマニュアルガイド
インフォメーションセンタ→ユーザガイド (1/3)
M0 / M0+ M3 / M4
・・・EWARMを使った開発の手順
・・・アプリケーションとしてのIDEの使い方
・・・EWARMのデバッグ設定・使い方
・・・コンパイラ/リンカの設定方法・使い方
・・・アセンブラの設定方法・使い方
・・・旧バージョンからのアップデート注意
・・・MISRA-C:1998チェッカの使用方法・説明
・・・MISRA-C:2004チェッカの使用方法・説明
www.iar.com 6Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのマニュアルガイド
インフォメーションセンタ→ユーザガイド (2/3)
M0 / M0+ M3 / M4
・・・インストール手順・ライセンスのクイックガイド
・・・インストール手順・ライセンスの詳細
・・・エミュレータ(ICE)固有のマニュアル
・・・CMSIS規格説明(ARM社提供)
www.iar.com 7Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのマニュアルガイド
ソフトウェア構成とマニュアルの関係
M0 / M0+ M3 / M4
IAR Embedd Workbench IDEIAR Embedd Workbench IDE
IDEツールIDEツール
エディタ
プロジェクトマネージャ
ライブラリビルダ
ライブラリアン
ビルドツール
ビルドツール
IAR C/C++ コンパイラ
アセンブラ
リンカ
IAR C-SPY
デバッガ
IAR C-SPY
デバッガ
シミュレータ
ハードウェアシステムドライバ
Powerデバッグ
RTOSプラグイン
設定 開発 デバッグ
www.iar.com 8Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのマニュアルガイド
推奨するマニュアル参照順序
M0 / M0+ M3 / M4
IAR Embedded Workbenchの使用開始の手順
IDEユーザガイド
C/C++コンパイラリファレンスガイド
C-SPYデバッガガイド
エミュレータ(ICE)固有のマニュアル
ILINK設定ガイド※IAR日本法人作成ガイドhttp://www.iar.com/Global/KK_pages/UserGuide/EW_IlinkGuide.JPN.pdf
EWARM全体概要の把握
アプリ操作プロジェクト設定
コンパイラ設定リンカ設定
リンカ設定実践
デバッグ設定デバッグ手法
ICEのスペック取り扱い方法
開発フェーズ
www.iar.com 9Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのマニュアルガイド
IAR Embedded Workbenchの標準的なマニュアル構成
M0 / M0+ M3 / M4
Part.1関連モジュールの概要説明
Part.2関連モジュールの詳細説明
教科書
辞書
www.iar.com 10Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのマニュアルガイド
Embedded Workbench IDEユーザガイド 章目次
M0 / M0+ M3 / M4
パート1. プロジェクト管理とビルド・開発環境・プロジェクト管理・ビルド・編集
パート2. リファレンス情報・インストールファイル・IAR Embedded Workbench IDE リファレンス・一般オプション・コンパイラオプション・アセンブラオプション・出力コンバータオプション・カスタムビルドオプション・ビルドアクションオプション・リンカのオプション・ライブラリビルダオプション
www.iar.com 11Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのマニュアルガイド
C/C++コンパイラリファレンスガイド 章目次
M0 / M0+ M3 / M4
パート1. ビルドツール・IAR ビルドツールの概要・組込みアプリケーションの開発・データ記憶・関数・ILINK を使用したリンク・アプリケーションのリンク・DLIB ランタイムライブラリ・アセンブラ言語インタフェース・C の使用・C++ の使用・アプリケーションに関する考慮事項
・組込みアプリケーション用の効率的なコーディング
パート2. リファレンス情報・外部インタフェースの詳細・コンパイラオプション・リンカオプション・データ表現・拡張キーワード・プラグマディレクティブ・組込み関数・プリプロセッサ・ライブラリ関数・リンカ設定ファイル・セクションリファレンス・スタック使用制御ファイル・IAR ユーティリティ・C 規格の処理系定義の動作・C89 の処理系定義の動作
www.iar.com 12Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのマニュアルガイド
C-SPYデバッガガイド 章目次
M0 / M0+ M3 / M4
IAR C-SPY デバッガ・C-SPY を使用するにあたって・アプリケーションの実行・変数と式の扱い・ブレークポイントの使用・メモリとレジスタのモニタ・JTAGjet ドライバでのトレースデータの収集と使用・トレースデータの収集と使用・プロファイラの使用・Power ドメインのデバッグ・コードカバレッジ・割込み・C-SPY マクロの使用・C-SPY コマンドラインユーティリティ — cspybat・デバッガオプション・C-SPY ドライバについての追加情報・フラッシュローダの使用
www.iar.com 13Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのマニュアルガイド
同梱ドキュメント一覧 1/2
M0 / M0+ M3 / M4
AVIXPluginIarEwarm_v0500.pdfcmx_quickstart.pdfembOS_IAR_Plugin.pdfEW_MisraC1998Reference.ENU.pdfEW_MisraC2004Reference.ENU.pdfEWARM_ADSMigrationGuide.ENU.pdfEWARM_AssemblerReference.ENU.pdfEWARM_AssemblerReference.JPN.pdfEWARM_DDFFormat.pdfEWARM_DebuggingGuide.ENU.pdfEWARM_DebuggingGuide.JPN.pdfEWARM_DevelopmentGuide.ENU.pdfEWARM_DevelopmentGuide.JPN.pdfEWARM_HeaderFormat.pdfEWARM_HeaderTemplate.pdfEWARM_IDEGuide.ENU.pdfEWARM_IDEGuide.JPN.pdf
[Program Files]→[IAR Systems]→[IAR Embedded Workbench for ARM ***]→[arm]→[doc]
・・・デバッガ用DDFファイルフォーマット
・・・ヘッダファイルフォーマット・・・ヘッダファイルテンプレート
ENU:英語版JPN:日本語版上記がないものは英語版
www.iar.com 14Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのマニュアルガイド
同梱ドキュメント一覧 2/2
M0 / M0+ M3 / M4
EWARM_MigrationGuide.ENU.pdfEWARM_MigrationGuide.JPN.pdfEWARM_RealViewMigrationGuide.ENU.pdfFlashLoaderGuide.ENU.pdfFlashLoaderGuide.JPN.pdfIAR_KScard_QuickStart.pdfIAR_KScard_ROM_monitor_settings.pdfI-jet-ARM.ENU.pdfI-jet-ARM.JPN.pdfjet_usb_install.pdfJLink_J-TraceARM.pdfJLinkARM.pdfPEMicroSettings.pdfThreadX_IAR_C-SPY_Plugin.pdfuC-OS-II-KA-CSPY-UserGuide.pdf
[Program Files]→[IAR Systems]→[IAR Embedded Workbench for ARM ***]→[arm]→[doc]
・・・フラッシュローダ開発ガイド
ENU:英語版JPN:日本語版上記がないものは英語版
www.iar.com
EWARM付録情報
• ARMの命令セット
www.iar.com 16Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ARMの命令セット
M0 / M0+ M3 / M4
ARMの命令種類
命令セット ビット 特徴
ARM 32bit フル命令セット*パフォーマンス⾼いがコード密度低い
Thumb 16bit ARM命令のサブセット*コード密度⾼いがパフォーマンスやや低い
Thumb2 16bit + 32bit Thumb命令のスーパーセット*パフォーマンスおよびコード密度⾼い
ARMv6-MThumb
16bit + 32bit Thumb2命令のサブセット
名称 ビット 特徴
ARM6ARM命令
ARM7 ARM9 ARM11
ARM命令+Thumb命令
命令セットを使い分ける際にはCPUのモード切替が必要
Cortex-M3/M4 Thumb2命令 CPUモードを変えることなく必要に応じて32bit命令を使⽤
Cortex-M0/M0+
ARMv6-MThumb
ほとんどの16bitThumb命令と、重要な6個の32bit Thumb命令
ARMファミリー毎の命令対応
www.iar.com
EWARM付録情報
• インストールファイルとドキュメント
www.iar.com 18Copyright(C)2014 IAR SYSTEMS, All rights reserved.
インストールファイル (1)
インストールファイルの構成
M0 / M0+ M3 / M4
EWARM 固有のファイル
EW 製品共通のファイル
ルートディレクトリ
各コンポーネントの実行ファイル
CMSIS関連ファイル
開発環境、プロジェクト設定に使用するファイル
リリースノート、ユーザガイド
C-SPYデバッガで必要なデバイスドライバ
サンプルプロジェクト
ヘッダファイル
ライブラリファイル
プラグインモジュール
RTOS関連ファイル
ライブラリ関連のソースファイル
チュートリアルプロジェクトファイル
共通コンポーネント用の実行ファイル
IDE設定保存用に使用されるファイル
リリースノート、ユーザガイド
プラグインモジュール
www.iar.com 19Copyright(C)2014 IAR SYSTEMS, All rights reserved.
oarm¥bin 各コンポーネントの実行ファイル
oarm¥config 開発環境、プロジェクト設定に使用するファイル
oarm¥doc リリースノート、ユーザガイド
oarm¥drivers C-SPYデバッガで必要なデバイスドライバ
oarm¥example サンプルプロジェクト
oarm¥inc ヘッダファイル
oarm¥lib ライブラリファイル
oarm¥plugin プラグインモジュール
oarm¥src ライブラリ関連のソースファイル
oarm¥tutor チュートリアルプロジェクトファイル
インストールファイル(2)
arm ディレクトリの内容
M0 / M0+ M3 / M4
www.iar.com 20Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ocommon¥bin 共通コンポーネント用の実行ファイル
ocommon¥config IDE設定保存用に使用されるファイル
ocommon¥doc リリースノート、ユーザガイド
ocommon¥plugin プラグインモジュール
インストールファイル (3)
Commonディレクトリの内容
M0 / M0+ M3 / M4
www.iar.com 21Copyright(C)2014 IAR SYSTEMS, All rights reserved.
重要マニュアル
M0 / M0+ M3 / M4
IAR Embedd Workbench IDEIAR Embedd Workbench IDE
IDEツールIDEツール
エディタ
プロジェクトマネージャ
ライブラリビルダ
ライブラリアン
ビルドツール
ビルドツール
IAR C/C++ コンパイラ
アセンブラ
リンカ
IAR C-SPY
デバッガ
IAR C-SPY
デバッガ
シミュレータ
ハードウェアシステムドライバ
Powerデバッグ
RTOSプラグイン
設定 開発 デバッグ
www.iar.com
EWARM付録情報
• EWARMのオプション設定概要
www.iar.com 23Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARMのオプション設定概要
ツールオプションとプロジェクトオプション
M0 / M0+ M3 / M4
PCに保存されるツール全般オプション
プロジェクト固有のオプション設定
www.iar.com 24Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ツールオプション概要
M0 / M0+ M3 / M4
表⽰・操作性カスタマイズ
ビルドメッセージカスタマイズ
ビルド動作等カスタマイズ
ソースコード管理カスタマイズ
デバッグ時スタック解析動作等
カスタマイズ
デバッガ動作等カスタマイズ
www.iar.com 25Copyright(C)2014 IAR SYSTEMS, All rights reserved.
プロジェクトオプション概要
M0 / M0+ M3 / M4
開発フロー
ターゲット設定ライブラリ設定
コンパイラ設定※最適化など
リンカ設定※メモリ配置、チェックサム
デバッグ⽤設定ICE選択
書き込み設定
ICE固有の設定※リセット・速度
www.iar.com
EWARM付録情報
• ビルド時の生成ファイル
www.iar.com 27Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ビルド時の生成ファイル
生成ファイル一覧
M0 / M0+ M3 / M4
project1└─Debug
├─Exe│ project1.out│ project1.srec│└─List
project1.mapTutor.lstUtilities.lst
tutor_library└─Debug
└─Exetutor_library.a
生成ファイル 説明
.out 実行可能ファイル(Elf/Dwarf形式)
.a ライブラリファイル
.srec (, .hex, .sim) Flashライター用などに変換されたファイル[プロジェクト]→[オプション]→[出力コンバータ]→[追加出力ファイルを生成]にチェック
.map リンク後のマップファイル[プロジェクト]→[オプション]→[リンカ]→[リスト]→[リンカマップファイルの表示]
.lst Cソースファイル毎の静的解析情報[プロジェクト]→[オプション]→[C/C++コンパイラ]→[リスト]→[リストファイルの出力]
www.iar.com 28Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ビルド時の生成ファイル
.outファイル
M0 / M0+ M3 / M4
実⾏可能ファイル(Elf/Dwarf形式)
www.iar.com 29Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ビルド時の生成ファイル
.aファイル
M0 / M0+ M3 / M4
ライブラリファイル
www.iar.com 30Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ビルド時の生成ファイル
.srec(.hex, .sim)ファイル
M0 / M0+ M3 / M4
S010000070726F6A656374312E73726563ECS11300003804002019030000B3020000B30200000AS1130010B3020000B3020000B302000000000000BDS1130020000000000000000000000000B302000017S1130030B302000000000000B3020000B30200009DS113004038B52D2401201349486012490860022064S1130050040024B20A2C0FDA24B2200000F00DF8B8・・・S1130280A142F8D110BD00BF2C0000004C000000BAS11302B07047FEE7DDFFFFFF2C0000000800002070S11302C000000000BBFEFFFF080000005800000013S11302D0000000200000000000F009F8002801D010S11302E0FFF7C0FF0020FFF7ADFF00F002F8012088S11302F0704700F001B800000746384600F002F8E5S1130300FBE7000080B5FFF751FF024A11001820F7S1130310ABBEFBE726000200C046C046C046C0464ES10F0320FFF7DAFFFFFFFFFFFFFFFFFF06S9030319E0
www.iar.com 31Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ビルド時の生成ファイル
.mapファイル
M0 / M0+ M3 / M4
*** PLACEMENT SUMMARY***
"A1": place at 0x00000000 { ro section .intvec };"P1": place in [from 0x00000000 to 0x0007ffff] { ro };"P2": place in [from 0x20000000 to 0x2000ffff] { rw, block CSTACK, block HEAP };
Section Kind Address Size Object------- ---- ------- ---- ------
"A1": 0x40.intvec ro code 0x00000000 0x40 vector_table_M.o [4]
- 0x00000040 0x40
"P2", part 3 of 3: 0x400CSTACK 0x20000038 0x400 <Block>CSTACK uninit 0x20000038 0x400 <Block tail>
- 0x20000438 0x400
********************************************************************************** STACK USAGE***
Program entry__iar_program_start: 0x00000319
Maximum call chain 112 bytes
********************************************************************************** MODULE SUMMARY***
768 bytes of readonly code memory44 bytes of readonly data memory
1 076 bytes of readwrite data memory
Errors: noneWarnings: none
www.iar.com 32Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ビルド時の生成ファイル
.lstファイル
M0 / M0+ M3 / M4
¥ In section .bss, align 429 int callCount;
¥ callCount:¥ 00000000 DS8 4
30 31 /* Increase the 'callCount' variable by one. */
¥ In section .text, align 2, keep-with-next32 void NextCounter(void)33 {34 callCount += 1;
¥ NextCounter:¥ 00000000 0x.... LDR.N R0,??DataTable2¥ 00000002 0x6800 LDR R0,[R0, #+0]¥ 00000004 0x1C40 ADDS R0,R0,#+1¥ 00000006 0x.... LDR.N R1,??DataTable2¥ 00000008 0x6008 STR R0,[R1, #+0]
35 }¥ 0000000A 0x4770 BX LR ;; return
Maximum stack usage in bytes:.cstack Function------- --------
8 DoForegroundProcess8 -> GetFib8 -> NextCounter8 -> PutFib
0 NextCounterSection sizes:Bytes Function/Label----- --------------
4 ??DataTable224 DoForegroundProcess12 NextCounter4 callCount
28 main
4 bytes in section .bss68 bytes in section .text
68 bytes of CODE memory4 bytes of DATA memory
Errors: noneWarnings: none
www.iar.com
EWARM付録情報
• スタートアップシーケンス
www.iar.com 34Copyright(C)2014 IAR SYSTEMS, All rights reserved.
スタートアップシーケンス
M0 / M0+ M3 / M4
Vector No. Vector Offset 例外& 割り込み 値
00 0x00 Stack Top sfe (CSTACK)01 0x04 Reset __iar_program_start02 0x08 NMI Default Handler03 0x0C Hard Fault Default Handler04 0x10 Memory Management Default Handler05 0x14 Bus Fault Default Handler06 0x18 Usage Fault Default Handler07~10 0x1C~0x28 Reserved 011 0x2C SVCall Default Handler12 0x30 Debug Monitor Default Handler13 0x34 Reserved 014 0x38 PendSV Default Handler15 0x3C SysTick Default Handler16 ~ 255 0x40~0x3FC External Interrupts Interrupt Handlers
__iar_program_start:bl __iar_init_core ; optionalbl __iar_init_vfp ; optional, enable VFP, thumb¥fpinit_M.sbl __cmain
__cmain:bl __low_level_init ; low_level_init.cbl __iar_data_init3 ; initialize data sections, init¥data_init3.cbl main
int main (void) { …… }
void xxx_InterruptHandler (void) { …… }
Cortex-M0/M3/M4Vector Table:
thumb¥vector_table_M.sor thumb¥cstartup_M.c
デフォルトプログラムエントリ:
thumb¥cstartup_M.sor thumb¥cstartup_M.c
main()前の初期化:
thumb¥cmain.s
User’s Application:
IAR DLIBランライムライブラリのコードただし上書き可能
ユーザコード
参照 ジャンプ
www.iar.com
EWARM付録情報
• CortexのCoreSight
www.iar.com 36Copyright(C)2014 IAR SYSTEMS, All rights reserved.
CoreSight™テクノロジー:機能・接続まとめ
M0 / M0+ M3 / M4
名称 接続 ICE 基本機能 特徴
JTAG
I-jetJ-LinkJTAGjet
○ ・バウンダリスキャン・printfデバッグ
SWD
I-jetJ-LinkJTAGjet
○ ・必要信号数:2本・SWV使⽤可能・printfデバッグ
TMSTCKTDOTDI
nRESET
SWDIOSWDCLKSWO--
TMSTCKTDOTDI
nRESET
SWDIOSWDCLKSWO--
名称 接続 ICE トレース⽅式 特徴
SWV
I-jetJ-LinkJTAGjet
サンプリング ・パソコンにリアルタイム転送・PC(プログラムカウンタ)取得・特定データのサンプリング・例外処理のトレース・(⾼速)prinfデバッグ・ピン数:1・データ⽋落可能性→⼤
ETM
JTAGjet-Trace
J-Trace
分岐トレース(実⾏)
・ICEのメモリに保存→ブレーク時にパソコンに転送・実⾏履歴を確実に追跡・対応しているかはCPU依存・タイムスタンプは誤差あり・データ⽋落可能性→⼩
※データ線の本数に依存する
TMSTCKTDOTDI
nRESET
SWDIOSWDCLKSWO--
CLKD0D1D2D3
デバッグ制御
トレース機能*M3/M4のみ
Serial Wire Debug
Serial Wire Viewer
Serial Wire Output
1,2,4本から選択
*JTAG-Traceは4本(4bit)固定Embedded Trace Macrocell
www.iar.com 37Copyright(C)2014 IAR SYSTEMS, All rights reserved.
CoreSight™テクノロジー:可能組み合わせ
M3 / M4
JTAG SWD SWV ETMTMSTCKTDOTDI
nRESET
SWDIOSWDCLKSWO--
TMSTCKTDOTDI
nRESET
SWDIOSWDCLKSWO--
TMSTCKTDOTDI
nRESET
SWDIOSWDCLKSWO--
TMSTCKTDOTDI
nRESET
SWDIOSWDCLKSWO--
TMSTCKTDOTDI
nRESET
SWDIOSWDCLKSWO--
TMSTCKTDOTDI
nRESET
SWDIOSWDCLKSWO--
CLKD0D1D2D3
CLKD0D1D2D3
CLKD0D1D2D3
※ETMおよびSWVを同時に使⽤する際は、SWVのトレースデータはETMトレースバッファで収集され、実⾏が停⽌したタイミングで、表⽰更新されます。
www.iar.com 38Copyright(C)2014 IAR SYSTEMS, All rights reserved.
CoreSight™テクノロジー:トレースタイミング
M3 / M4
main()
sub_1()
sub_2()
main()
sub_1()
sub_2()
SWVトレース
ETMトレース
トレース情報が取得できない
⼀定間隔でサンプリング
プログラムが分岐するタイミングでトレースバッファに出⼒
www.iar.com 39Copyright(C)2014 IAR SYSTEMS, All rights reserved.
CoreSight™テクノロジー:よくある質問
M0 / M0+ M3 / M4
Q. デバッグに最⼩限必要なピン数は?デバイスと開発環境がSWDに対応していれば、3もしくは4本。
SWDデバッグで、最低限必要なピン数は3本(I/O、クロック、グラウンド)、もしくはこれにリセットを加えた4本。リセット機能は必須機能ではないため、最低ということであれば3本。
※グラウンドの本数が少ないと信号が弱くなったりノイズがのるリスクあります。(Jtagだと通常5本程度使⽤)。⼀般的にはおそらくグラウンドは1本でも開発可能ですが、この精度は、基板やICEの品質にも関わってくるためユーザー様にて確認の必要があります。
※SWDは、⼀般的にCortex A,R,Mに対応していますが、デバッガとデバイスが共にSWDに対応していることが条件となります。
www.iar.com 40Copyright(C)2014 IAR SYSTEMS, All rights reserved.
CoreSight™テクノロジー:機能・接続まとめ
M0 / M0+ M3 / M4
Q. SWDを使⽤すると信号線が減るが、クロック差やスピード差はあるか?
SWDやJTAGと⽐べて信号線が減りますが、実際にはCPUとの通信以外の制御部分が処理の⼤半を占めるため、デバッガの動作速度の低下を体感することはありません。
Q. JTAGとSWDを⽐べて、できることできないことは?
[JTAGでできてSWDできないこと]JTAG本来の機能である端⼦のバウンダリスキャンテスト
[SWDでできてJTAGでできないこと]トレース機能であるSWVトレース
[その他SWDのメリット]デバッグ⽤の端⼦数の現象( 5->2 )上記に伴うコネクタ実装⾯積の現象
www.iar.com 41Copyright(C)2014 IAR SYSTEMS, All rights reserved.
CoreSight™テクノロジー:関連URL
M0 / M0+ M3 / M4
ARM社HPの解説
SWD
http://www.arm.com/ja/products/system-ip/debug-trace/coresight-soc-components/serial-wire-debug.php
ETM
http://www.arm.com/ja/products/system-ip/debug-trace/trace-macrocells-etm/index.php
www.iar.com
EWARM付録情報
• デバッグコネクタ情報
www.iar.com 43Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグインタフェースコネクタ:I-jet(1)
ハーフピッチ20ピンコネクタ:MIPI-20(JTAG, SWD/SWV)
M0 / M0+ M3 / M4
標準対応(ケーブル付)11pin, 13pinから5V供給可能
www.iar.com 44Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグインタフェースコネクタ:I-jet(2)
ハーフピッチ10ピンコネクタ:MIPI-10(JTAG, SWD/SWV)
M0 / M0+ M3 / M4
標準対応(ケーブル付)ピン配置はハーフピッチ19ピンコネクタの1~10番と同じ
www.iar.com 45Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグインタフェースコネクタ:I-jet(3)
標準ピッチ20ピン変換アダプタ:ARM-20(JTAG,SWD/SWV用)
M0 / M0+ M3 / M4
アダプタ標準添付19pinから5V供給可能
www.iar.com 46Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグインタフェースコネクタ:JTAGjet-trace
ハーフピッチ20ピンコネクタ:MIPI-20(JTAG/,SWD, ETM)
M0 / M0+ M3 / M4
標準対応(ケーブル付)※ピン機能詳細は「ETMトレース機能」を参照
www.iar.com 47Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグインタフェースコネクタ:J-Link(1)
標準ピッチ20ピンコネクタ(JTAG、SWD/SWV用)
M0 / M0+ M3 / M4
JTAG接続 SWD/SWV接続
J-Link、J-Traceでは標準対応(ケーブル付)19pinから5V供給可能
www.iar.com 48Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグインタフェースコネクタ:J-Link(2)
ハーフピッチ19ピンコネクタ(JTAG、SWD/SWV
M0 / M0+ M3 / M4
J-Traceでは標準対応(ケーブル付)J-Linkで使用する場合は変換ケーブル(別売)が必要11pin, 13pinから電源供給可能
www.iar.com 49Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグインタフェースコネクタ:J-Link(3)
ハーフピッチ9ピンコネクタ(JTAG、SWD/SWV用)
M0 / M0+ M3 / M4
J-Link、J-Traceで使用する場合は変換ケーブル(別売)が必要ピン配置はハーフピッチ19ピンコネクタの1~10番と同じ
www.iar.com 50Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグインタフェースコネクタ例
M0 / M0+ M3 / M4
コネクタ種類 コネクタ例
ハーフピッチ20(19)pin*MIPI-20
SAMTEC:FTSH-110-01-L-DV-K
ハーフピッチ10(9)pin*MIPI-10
SAMTEC:FTSH-105-01-L-DV-K
フルピッチ20(19)pin*ARM-20
Harting:09185206803Molex:90635-1202Tyco Electronics:2-215882-0
*J-Linkマニュアルではキーpinを除いて19pin/9pinと記述
www.iar.com
EWARM付録情報
• SWV(SWO) 機能
www.iar.com 52Copyright(C)2014 IAR SYSTEMS, All rights reserved.
MCUの対応• Cortex-M3/M4
SWVトレース対応エミュレータ(ICE)• I-jet / I-jet-Lite / SEGGER社 J-Linkが対応
コネクタの対応• SWOピンの接続に対応したコネクタが必要
接続⽅式• SWD接続を選択
レジスタ設定によるSWOポートピンの有効化• MCUによってはSWOポートピンが多重化されて他の機能に割り当てられていることがあるため、FWまたはマクロで有効化する必要がある
SWV機能の使用条件
M3 / M4
www.iar.com 53Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV対応コネクタ
M3 / M4
SWD接続
SWOピン
www.iar.com 54Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV機能使用時のプロジェクト設定
M3 / M4
[デバッガ]
[I-jet / JTAGjet]
[設定]→[ドライバ]を[I-jet/JTAGjet]を選択
[I-jet/JTAGjet] → [JTAG/SWD]でインタフェースに[SWD]を選択
※[一般オプション]→ライブラリ設定stdout/stderrがSWO経由になっていると強制的にSWDが選択される
www.iar.com 55Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:SWVトレース
M3 / M4
■こんなときに・・・
• コードの流れをバックトレースしたい
• コード実⾏時のタイムスタンプを⾒たい
など
*補⾜• SWVトレースは1秒間に数千サンプリング程
度なので、実⾏コード全てを追うことできない。
www.iar.com 56Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:SWVトレース 使用方法
M3 / M4
1.SWOトレースウィンドウ設定
2. SWOトレース
3. デバッグ開始
3. 右クリックして[有効]
www.iar.com 57Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO) 機能:コードカバレッジ
M3 / M4
■こんなときに・・・
• 実装されているコードが想定通りに実⾏されているか確認したい。
など
*補⾜• デフォルトで有効となっている「コードカバ
レッジ」プラグインの機能を使⽤
• サンプリングタイミングにより、抜け落ちることがあるが、⻑時間トレースすることで信頼性のあるデータとなる。
www.iar.com 58Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:コードカバレッジ 使用方法
M3 / M4
※SWVトレースが可能な状態で・・
1.コードカバレッジ
2.右クリックして[有効化]
3.デバッグ実行
4.[更新]
コードカバレッジが更新表示される
www.iar.com 59Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO) 機能:データログ
M3 / M4
■こんなときに・・・
• 特定の変数やアドレスへの読み書きアクセスをロギングしたい。
• 上記アクセスの時間を知りたい
など
*補⾜• 変数またはアドレスは4つまで指定可能
www.iar.com 60Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:データアクセスサマリー
M3 / M4
■こんなときに・・・
• データアクセスが何回あったか、読み書きが何回あったか確認したい。
など
*補⾜• 「すべてのアクセス」数が読み書きアクセス
の合計より⼤きい場合、アクセスの属性情報が正確にとれなかったサンプリングがある。
www.iar.com 61Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:データアクセス:タイムライン
M3 / M4
■こんなときに・・・
• データの変わったタイミングを時間軸上でみたい
• 他の割り込みなどとの時間関係を⾒たい
など
*補⾜• ⾚い箇所はオーバフローが発⽣
www.iar.com 62Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:データログ 使用方法 (1/2)
M3 / M4
1.静的変数上で右クリック
2.’変数’のデータログブレークポイントを設定
3.[表示]→[ブレークポイント]
4.右クリックして[編集]5.ログ対象アクションを選択
www.iar.com 63Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:データログ 使用方法 (2/2)
M3 / M4
1.データログ
2.右クリックして有効化
1.デバッグ開始
www.iar.com 64Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:割り込みログ
M3 / M4
■こんなときに・・・
• プログラム実⾏中に発⽣した割り込みや例外をロギングしたい
• 割り込みハンドラ関数の処理でかかった時間を知りたい
など
www.iar.com 65Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:割り込みログ一覧
M3 / M4
■こんなときに・・・
• 各割れ込みの発⽣回数や発⽣頻度を確認したい
など
www.iar.com 66Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:割り込みログ:タイムライン
M3 / M4
■こんなときに・・・
• 割り込みの発⽣タイミングを時間軸上で⾒たい
• 割り込みハンドラの処理にかかった時間を時間軸上で⾒たい
• その他のイベントとの関係を時間軸上で⾒たい
など
www.iar.com 67Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:割込みログ 使用方法
M3 / M4
1.割込みログ 2.右クリックして[有効化]
3.デバッグ開始
www.iar.com 68Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:ITMイベント:ログ
M3 / M4
■こんなときに・・・
• コードの実⾏タイミングを正確に知りたい
• 実⾏時の変数の値を⾒たい
• マルチタスクの各タスク⼊り⼝出⼝に仕掛けて、タスク状況を把握したい
など
*補⾜• ソースコード上で
arm_itm.hをincludeITM_EVENT8_WITH_PC(1,1)と記述
• チャンネルは1-4
*参考URLhttp://supp.iar.com/Support/?note=26891http://netstorage.iar.com/SuppDB/Public/SUPPORT/004765/Time%20measurement%20by%20SWO.pdf
www.iar.com 69Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:ITMイベント:サマリー
M3 / M4
■こんなときに・・・
• 各チャンネルのITMイベント発⽣回数や頻度を知りたい
• 実⾏時間が適正な間隔になっているか知りたい
• ウォッチしている値が適正な値になっているか知りたい
など
www.iar.com 70Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:ITMイベント:タイムライン
M3 / M4
■こんなときに・・・
• ITMイベントの発⽣タイミングを時間軸上で⾒たい
• 各ITMイベント間の関係や割り込みなどのと関係を時間軸上で⾒たい
• イベント間をドラッグドップで、経過時間を知りたい
など
www.iar.com 71Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:ITMイベント 使用方法
M3 / M4
1.arm_itm.hをインクルード
2.マクロをコードに記述
4.イベントログ
5.右クリックして[有効化]
6.デバッグ開始3.ビルド&ダウンロード
www.iar.com 72Copyright(C)2014 IAR SYSTEMS, All rights reserved.
SWV(SWO)機能:タイムライン表示 使用方法
M3 / M4
1.タイムライン
2.表示したい機能の上で右クリックして[有効化]
3. 右クリックして[ズーム]→[任意の時間軸]
4. デバッグ開始
www.iar.com
EWARM付録情報
• ETMトレース機能
www.iar.com 74Copyright(C)2014 IAR SYSTEMS, All rights reserved.
MCUの対応• ETM機能の実装はMCUベンダの選択による• Trace Dataピン(1-4本)はMCUベンダの選択による
トレース機能付きエミュレータ(ICE)を使⽤• JTAGjet-Traceが対応• SEGGER社J-Traceが対応
コネクタの対応• トレースピンの接続に対応したコネクタが必要
レジスタ設定によるトレースポートピンの有効化• MCUによってはトレースポートピンが多重化されて他の機能に割り当てられていることがあるため、FWまたはマクロで有効化する必要がある
ETMトレース機能の使用条件
M3 / M4
www.iar.com 75Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ETMトレース対応コネクタ
M3 / M4
ETMトレース用クロック
ETMトレース用データポート
www.iar.com 76Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ETMトレース使用時のプロジェクト設定:JTAGjet-trace
M3 / M4
[デバッガ]
[I-jet / JTAGjet]
[設定]→[ドライバ]を[I-jet/JTAGjet]を選択
[I-jet/JTAGjet]の特別な設定はなし
www.iar.com 77Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグ画面での[ETMトレース設定]
M3 / M4
※デフォルト設定で動作可能
設定項目の詳細は[ヘルプ]→[Embedded Workbench デバッグガイド]を参照
www.iar.com 78Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ETMトレース用のブレークポイント設定
M3 / M4
トレース取得を開始したいコード上で右クリックし、[ブレークポイントの切り替え(トレース開始)]を指定
トレースを停止したいコード上で[ブレークポイントの切り替え(トレース停止)]を指定※ブレークしたときに、トレースデータがICEから読み出され画面に表示される
www.iar.com 79Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ETMトレース機能:[ETMトレース]
M3 / M4
[ETMトレース]
実行されたコードを表示
www.iar.com 80Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ETMトレース機能:[ETM関数トレース]
M3 / M4
[ETM関数トレース]
ETMトレースで取得したデータを関数遷移で表示
www.iar.com 81Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ETMトレース機能:[コードカバレッジ]
M3 / M4
[逆アセンブリ]→[コードカバレッジ]
ETMトレースで通過したアドレスに◆を付ける。
www.iar.com 82Copyright(C)2014 IAR SYSTEMS, All rights reserved.
ETMトレース機能:[タイムライン]→[コールスタック]
M3 / M4
[タイムライン]
www.iar.com
EWARM付録情報
• デバッグウィンドウ
www.iar.com 84Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:ブレークポイント
M0 / M0+ M3 / M4
■こんなときに・・・
• ブレークポイントの⼀覧が⾒たい
• ブレークポイントを貼っているソースコードに⾶びたい
• ⼀時的にブレークポイントを全て無効にしてデバッグしたい。
• ブレークポイントを削除したい
• ブレークポイントを編集したい
など
www.iar.com 85Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:逆アセンブリ
M0 / M0+ M3 / M4
■こんなときに・・・
• アセンブラレベルでステップ実⾏したい
• 実⾏中のアドレスを⾒たい
• ライブラリなど、ソースファイルのないプログラムをデバッグしたい。
• 最適化の影響を確認したい
など
www.iar.com 86Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:メモリ
M0 / M0+ M3 / M4
■こんなときに・・・
• 現在のメモリの値を⾒たい
• メモリをPC上の保存したい
• メモリ上でデータを検索したい
など
www.iar.com 87Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:シンボルメモリ
M0 / M0+ M3 / M4
■こんなときに・・・
• アドレス順に変数や関数の⼀覧を⾒たい。
など
www.iar.com 88Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:レジスタ
M0 / M0+ M3 / M4
■こんなときに・・・
• 現在の各種レジスタの値が⾒たい
• デバッグ⽤にレジスタの値を変えてみたい
など
www.iar.com 89Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:ウォッチ
M0 / M0+ M3 / M4
■こんなときに・・・
• 特定の静的変数やグローバル変数の値をモニタリングしたい
• ローカル変数の値をスコープ内でモニタリングしたい
など
www.iar.com 90Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:ローカル
M0 / M0+ M3 / M4
■こんなときに・・・
• 関数内のローカル変数や引数を⾃動的にモニタリングしたい
など
www.iar.com 91Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:静的変数
M0 / M0+ M3 / M4
■こんなときに・・・
• プログラム内の静的変数やグローバル変数を⾃動的にモニタリングしたい
など
www.iar.com 92Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:自動(オート)
M0 / M0+ M3 / M4
■こんなときに・・・
• ステップ実⾏でデバッグをしているときに近辺の変数や関数情報を⾃動的にモニタリングしたい
など
www.iar.com 93Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:ライブウォッチ
M0 / M0+ M3 / M4
■こんなときに・・・
• 特定の静的変数やグローバル変数を、プログラム実⾏状態のまま定期的にモニタリングしたい
など
www.iar.com 94Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:クイックウォッチ
M0 / M0+ M3 / M4
■こんなときに・・・
• 変数を簡単な式で評価したい* data > 200 など 真なら1
• 任意のタイミングでC-Spyマクロを実⾏したい
など
*補⾜• C-Spyマクロは⾮常に強⼒かつ柔軟
[ヘルプ]→[Embedded Workbench デバッグガイド]の[C-SPY マクロの使⽤]を参照
www.iar.com 95Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:呼び出しスタック
M0 / M0+ M3 / M4
■こんなときに・・・
• 実⾏中の関数の呼び出し元を知りたい
• 各関数の引数も⾒たい
など
www.iar.com 96Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:スタック
M0 / M0+ M3 / M4
■こんなときに・・・
• 現在のスタック使⽤状況を⾒たい
• 現在のスタック使⽤率を⾒たい
• それまでの最⼤スタック使⽤量を知りたい
など
*補⾜• OSを搭載している場合、OS側で各タスクの
スタックを管理するので、別途プラグインなどを活⽤してスタック管理
www.iar.com 97Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:ブレークポイント
M0 / M0+ M3 / M4
■こんなときに・・・
• printfデバッグがしたい
• デバッグ⽤にパラメータなどをscanfでEWARMの画⾯上から⼊⼒したい
など
*補⾜• <stdio.h>をinclude
• コードサイズが⼤きくなってしまう場合は、[プロジェクト]→[オプション]→[⼀般オプション]→[ライブラリオプション]から調整可能。
• printfはデフォルトだとターミナルIOに出⼒されるが、putcharにユーザコードで実装することでUARTなどに変更可能
www.iar.com 98Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグウィンドウ:イメージ
M0 / M0+ M3 / M4
■こんなときに・・・
• 現在のイメージ(デバッグ情報)を確認したい
など
*補⾜• ブートローダプロジェクトなどで複数バイナ
リをデバッグするとき以外は出番なし
www.iar.com
EWARM付録情報
• シミュレータ機能
www.iar.com 100Copyright(C)2014 IAR SYSTEMS, All rights reserved.
シミュレータの設定
M0 / M0+ M3 / M4
[設定]→[ドライバ]を[シミュレータ]を選択
www.iar.com 101Copyright(C)2014 IAR SYSTEMS, All rights reserved.
シュミレータでできること
M0 / M0+ M3 / M4
3.割込みを疑似発生
C-SPYシミュレータで出来ることは以下の通りとなります。1. 命令レベルのシミュレーション2. メモリの構成、検証3. 割込みシミュレーション4. イミディエイトブレークポイントとC-SPY マクロシステムを使用した周辺シミュレーション
1.CPUコア
4.C-SPYマクロ周辺の模擬
デフォルトではCPUコア単体+メモリの状態でのシミュレーションが可能です。周辺や割込みを使うシミュレーションは3または4に関してユーザ側で準備が必要となります。
2.メモリ
www.iar.com 102Copyright(C)2014 IAR SYSTEMS, All rights reserved.
割込みシミュレーション
M0 / M0+ M3 / M4
①
②
③
④
⑤必要な項目を設定して下さい。
ここでは、3の割込みシミュレーションの用い方を説明しますシミュレータ動作時に、①シミュレータ→②割込み設定割込み設定画面で、③割込みシミュレーションを有効にするをONに
④新規作成を押す
割込みの編集画面になるので、⑤初回の割込みを起こしたいサイクル、周期などを設定してください。あとは通常の手順でシミュレーションを実施ください。
www.iar.com 103Copyright(C)2014 IAR SYSTEMS, All rights reserved.
シミュレーションによる再現性
M0 / M0+ M3 / M4
CPUコア単体でのシミュレーションとなります。
EWARM_DebuggingGuide.JPN.pdfに「C-SPY シミュレー
タは、ターゲットプロセッサの機能をソフトウェアで完全にシミュレーションするため、ハードウェアがすべて揃っていなくてもプログラムロジックをデバッグできます。」と記載があるように、シミュレータは実機がない場合などに多く用いられており、実機がある場合には実機を用いてのソフト開発が適しています。
www.iar.com
EWARM付録情報
• EWARMの 適化
www.iar.com 105Copyright(C)2014 IAR SYSTEMS, All rights reserved.
適化
適化の設定
M0 / M0+ M3 / M4
www.iar.com 106Copyright(C)2014 IAR SYSTEMS, All rights reserved.
• なし
• 低 *1• 中
• 高(バランス) *2• 高(速度)
• 高(サイズ)
*1 ビルド構成がDebugの場合の初期値
*2 ビルド構成がReleaseの場合の初期値
※ デバッグ時は、「なし」か「低」に設定してください。
適化
適化レベル
M0 / M0+ M3 / M4
www.iar.com 107Copyright(C)2014 IAR SYSTEMS, All rights reserved.
• 変数の位置情報•変数のスコープおよび存在情報
• ステップポイント•ステップ実⾏時のソースコードと機械語の対応•関数のステップイン/アウト•ブレークポイントの設置
• コールスタック情報•関数を特定する情報およびコールスタック内での変数情報
適化
最適化とデバッグ⽤の情報保持
M0 / M0+ M3 / M4
最適化レベル 変数の位置情報 ステップポイント コールスタック情報なし 保持 保持 保持低 ほぼ保持 保持 保持中 保持されない 保持 保持⾼ 保持されない 保持されない 保持
www.iar.com 108Copyright(C)2014 IAR SYSTEMS, All rights reserved.
• プロジェクト全体• ソースグループ単位• ソースコード単位• 関数単位
適化
最適化の適⽤範囲
M0 / M0+ M3 / M4
プロジェクト全体
ソースグループ単位
ソースコード単位
関数単位
www.iar.com 109Copyright(C)2014 IAR SYSTEMS, All rights reserved.
• プロジェクト全体• ソースグループ単位• ソースコード単位• 関数単位
適化
最適化の適⽤範囲
M0 / M0+ M3 / M4
ダブルクリック
グループまたはソースコード個別に上書きする際には[継承した設定をオーバーライド]にチェック
www.iar.com 110Copyright(C)2014 IAR SYSTEMS, All rights reserved.
• プロジェクト全体• ソースグループ単位• ソースコード単位• 関数単位
適化
最適化の適⽤範囲
M0 / M0+ M3 / M4
関数単位
#pragma optimize の直下に記述された関数のみ適用される。
ファイルソースに適用されている 適化レベルを下げる方向にのみ指定可能。※ファイルの 適化レベルが[中]のコードに対して
#pragma optimize= high は適用できない。
www.iar.com 111Copyright(C)2014 IAR SYSTEMS, All rights reserved.
適化
適化例1:共通部分式除去
M0 / M0+ M3 / M4
if ( a - b * c / 150 % 12 == 5) do_something();: :
return(a - b * c / 150 + 5);
コンパイラは 、予め a - b * c / 150 を計算する関数を作成し、評価式とリターン値で結果を使用する。
www.iar.com 112Copyright(C)2014 IAR SYSTEMS, All rights reserved.
適化
適化例2:ループ展開
M0 / M0+ M3 / M4
for ( i = 0; i < 3; i++){
j[i] = i;}
j[0] = 0;j[0] = 1;j[0] = 2;
www.iar.com 113Copyright(C)2014 IAR SYSTEMS, All rights reserved.
適化の手法は、効果が一定の効果が保証されるものではなくコンパイラによって発見的、探索的に適用されます。
適化
適化の考え方
M0 / M0+ M3 / M4
デバッグのしやすさ、メンテナンスのしやすさを考慮し、サイズの削減が必要なコード、処理速度の追求が必要なコードごとに、適用範囲(ソースファイル/グループ)を限定して、高い 適化レベルを適用することを推奨いたします。
各適用モジュール毎に単体テストを行い、効果的な 適化オプションを試行してください。
適化の考え方
www.iar.com
EWARM付録情報
• EWARMの便利な開発テクニック
www.iar.com 115Copyright(C)2014 IAR SYSTEMS, All rights reserved.
RAM上での関数実行
__ramfunc キーワードを関数の前に追加するだけ
M0 / M0+ M3 / M4
__ramfunc void foo(void);
注意:main関数開始前には使用できません
www.iar.com 116Copyright(C)2014 IAR SYSTEMS, All rights reserved.
デバッグ開始と同時にプログラムをスタート
[デバッガ]→[Run to]に__exitを指定するだけ
M0 / M0+ M3 / M4
www.iar.com
EWARM付録情報
• EWARMの速度性能評価手順
www.iar.com 118Copyright(C)2014 IAR SYSTEMS, All rights reserved.
速度の性能評価の全体手順
M0 / M0+ M3 / M4
1. プロジェクトのビルド設定1. 適切なCPUの選択2. コンパイラオプション設定3. リンカ設定4. デバッガ設定
2. ソースコード上の設定1. CPUクロックの設定2. ITMイベントの埋め込み *M3/M4のみ3. RAM関数化
3. ビルド結果の評価1. .mapファイルからの情報
4. 処理時間の測定 *M3/M4のみ1. SWOトレース(ITMイベント)の利⽤
www.iar.com 119Copyright(C)2014 IAR SYSTEMS, All rights reserved.
1.プロジェクトのビルド設定
1.適切なCPUの選択
M0 / M0+ M3 / M4
www.iar.com 120Copyright(C)2014 IAR SYSTEMS, All rights reserved.
1.プロジェクトのビルド設定
2.コンパイラオプション設定
M0 / M0+ M3 / M4
最適化レベル[⾼]のときのみ[速度][サイズ][バランス]の選択が可能
[ 適化]
www.iar.com 121Copyright(C)2014 IAR SYSTEMS, All rights reserved.
1.プロジェクトのビルド設定
2.コンパイラオプション設定
M0 / M0+ M3 / M4
[複数ファイルのコンパイル] C C C
Cまとめてコンパイルすることで最適化の効率上昇
※デバッグは困難になる
www.iar.com 122Copyright(C)2014 IAR SYSTEMS, All rights reserved.
1.プロジェクトのビルド設定
3.リンカ設定
M0 / M0+ M3 / M4
[ 適化]
www.iar.com 123Copyright(C)2014 IAR SYSTEMS, All rights reserved.
1.プロジェクトのビルド設定
3.リンカ設定
M0 / M0+ M3 / M4
[コードをRAMに展開]
※例//initialize by copy { readwrite };initialize by copy { readonly, readwrite };
リンカ設定ファイルの中⾝をエディタで編集
詳細は[ヘルプ]→[Embedded Workbench C/C++開発ガイド]コードを初期化する(ROM から RAM にコピーする)を参照
www.iar.com 124Copyright(C)2014 IAR SYSTEMS, All rights reserved.
1.プロジェクトのビルド設定
3.リンカ設定
M0 / M0+ M3 / M4
[リスト]
ビルド時にmapファイルが同時⽣成される
www.iar.com 125Copyright(C)2014 IAR SYSTEMS, All rights reserved.
1.プロジェクトのビルド設定
4.デバッガ設定
M0 / M0+ M3 / M4
[J-Link/J-Trace]→[設定]
CPUクロックを実際のクロックと合わせる
www.iar.com 126Copyright(C)2014 IAR SYSTEMS, All rights reserved.
1.プロジェクトのビルド設定
4.デバッガ設定
M0 / M0+ M3 / M4
[J-Link/J-Trace]→[SWD]
インタフェースでSWDを選択(ITMイベント⽤)
www.iar.com 127Copyright(C)2014 IAR SYSTEMS, All rights reserved.
2.ソースコード上の設定
1.CPUクロックの設定
M0 / M0+ M3 / M4
測定対象箇所の前でPLLの設定やプリスケーラの設定などを搭載しているクロックに合わせて⾏う。
※実際のコードやサンプルプロジェクトやデータシートを参照
www.iar.com 128Copyright(C)2014 IAR SYSTEMS, All rights reserved.
2.ソースコード上の設定
2.ITMイベントの埋め込み
M3 / M4
#include “arn_itm.h”を記述
ITM_EVENT8_WITH_PC(1,0);測定対象箇所ITM_EVENT8_WITH_PC(1,100);と記述
※ITM_EVENTn_WITH_PC(Channel,value);
www.iar.com 129Copyright(C)2014 IAR SYSTEMS, All rights reserved.
2.ソースコード上の設定
3.RAM関数化
M0 / M0+ M3 / M4
__ramfuncを対象の関数の前に設定リンカ設定で[コードをRAMに展開]を適⽤している場合は効果なし。
www.iar.com 130Copyright(C)2014 IAR SYSTEMS, All rights reserved.
3.ビルド結果の評価
1.mapファイルからの情報
M0 / M0+ M3 / M4
Outoutフォルダのプロジェクト名.mapファイルをダブルクリック
www.iar.com 131Copyright(C)2014 IAR SYSTEMS, All rights reserved.
3.ビルド結果の評価
1.mapファイルからの情報
M0 / M0+ M3 / M4
ROMサイズ、RAMサイズの確認必要なROMサイズ896 + 5,124 = 6020
必要なRAMサイズ5,088 + 13,828 = 18,916
RAM上にコードをコピーして実⾏するときのみ出現
www.iar.com 132Copyright(C)2014 IAR SYSTEMS, All rights reserved.
3.ビルド結果の評価
1.mapファイルからの情報
M0 / M0+ M3 / M4
最⼤スタック使⽤サイズの静的解析情報
確保する必要があるスタックサイズ
www.iar.com 133Copyright(C)2014 IAR SYSTEMS, All rights reserved.
4.処理時間の測定
1. SWOトレース(ITMイベント)の利⽤
M3 / M4
デバッグウィンドウを開く
www.iar.com 134Copyright(C)2014 IAR SYSTEMS, All rights reserved.
4.処理時間の測定
1. SWOトレース(ITMイベント)の利⽤
M3 / M4
イベントのペイン上で右クリック
www.iar.com 135Copyright(C)2014 IAR SYSTEMS, All rights reserved.
4.処理時間の測定
1. SWOトレース(ITMイベント)の利⽤
M3 / M4
ITM_EVENT8_WITH_PCの経過時間が表⽰される
イベントの上でマウスオーバー
www.iar.com 136Copyright(C)2014 IAR SYSTEMS, All rights reserved.
※参考 サンプルプロジェクトの実測値
Drhystoneを独⾃にカスタマイズしたプロジェクト
M0 / M0+ M3 / M4
コンパイラ最適化 *追加オプション1 *追加オプション2 ROM(CODE)
ROM→RAM(CODE)
ROM(DATA)
RAM(DATA) 最⼤Stack 経過時間
(μ秒) 相対効率
なし 6548 0 144 13830 240 128,500 1.0 低 6488 0 144 13830 232 122,500 1.1 中 6172 0 16 13832 248 97,375 1.3 ⾼(速度) 6064 0 16 13828 248 65,000 2.0 ⾼(速度) 複数コンパイル 5860 0 16 13828 240 32,000 4.0 ⾼(速度) リンカ最適化 5852 0 16 13828 248 65,000 2.0 ⾼(速度) RAMコピー 850 5088 5126 13828 248 57,125 2.2 ⾼(速度) 複数コンパイル RAMコピー 1556 4188 4224 13828 240 32,625 3.9 ⾼(速度) RAM実⾏ 6104 0 16 13828 248 53,500 2.4 ⾼(速度) 複数コンパイル RAM実⾏ 5860 0 16 13828 240 26,500 4.8
デバッグ⽤に全てをRAMに
最適化を何もしないときを1とする※⼤きいほうが速い
www.iar.com 137Copyright(C)2014 IAR SYSTEMS, All rights reserved.
※参考 サンプルプロジェクトの実測値
Drhystoneを独⾃にカスタマイズしたプロジェクト
M0 / M0+ M3 / M4
コンパイラ最適化 *追加オプション1 *追加オプション2 ROM(CODE)
ROM→RAM(CODE)
ROM(DATA)
RAM(DATA) 最⼤Stack 経過時間
(μ秒) 相対効率
なし 6548 0 144 13830 240 128,500 1.0 低 6488 0 144 13830 232 122,500 1.1 中 6172 0 16 13832 248 97,375 1.3 ⾼(速度) 6064 0 16 13828 248 65,000 2.0 ⾼(速度) 複数コンパイル 5860 0 16 13828 240 32,000 4.0 ⾼(速度) リンカ最適化 5852 0 16 13828 248 65,000 2.0 ⾼(速度) RAMコピー 850 5088 5126 13828 248 57,125 2.2 ⾼(速度) 複数コンパイル RAMコピー 1556 4188 4224 13828 240 32,625 3.9 ⾼(速度) RAM実⾏ 6104 0 16 13828 248 53,500 2.4 ⾼(速度) 複数コンパイル RAM実⾏ 5860 0 16 13828 240 26,500 4.8
このアプリケーションにおいては・最適化:⾼(速度)が有効・複数コンパイルが有効・ROMのアクセスがボトルネックになっている(Waitがある)ため、コードのRAM化が有効※有効な設定はプロジェクトによって異なる
www.iar.com
EWARM付録情報
• EWARM関連情報URL
www.iar.com 139Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARM関連情報URL
M0 / M0+ M3 / M4
IARシステムズ株式会社HPhttp://www.iar.com/jp
製品ページhttp://www.iar.com/jp/Products/
マイページhttp://www.iarsys.co.jp/customer/
お問い合わせhttp://www.iarsys.co.jp/customer/inquiries
評価版ダウンロードページhttp://www.iar.com/jp/Service-center/Downloads/
サポート窓口メールアドレス[email protected]
www.iar.com 140Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARM関連情報URL
M0 / M0+ M3 / M4
FAQhttp://www.iarsys.co.jp/customer/faqs
技術情報のページhttp://www.iar.com/jp/Service-center/Resources/
参考になる検索キーワードの例: 「Coresight」、「technique」、「debug」、「Trace」
www.iar.com 141Copyright(C)2014 IAR SYSTEMS, All rights reserved.
EWARM関連情報URL
M0 / M0+ M3 / M4
ARM社HP(日本)http://www.arm.com/ja/index.php
シリアルワイヤデバッグ解説http://www.arm.com/ja/products/system-ip/debug-trace/coresight-soc-components/serial-wire-debug.php
ETM解説http://www.arm.com/ja/products/system-ip/debug-trace/trace-macrocells-etm/index.php
CMSIS解説http://www.arm.com/ja/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php