EWARM 付録情報 IAR システムズ株式会社 www.iar.com 改訂日 : 2014 年 8 月 1 日
目次 EWARM のマニュアルガイド ARM の命令セット インストールファイルとドキュメント EWARM のオプション設定概要 ビルド時の生成ファイル スタートアップシーケンス Cortex の CoreSight デバッグコネクタ情報 SWV(SWO) 機能 ETM トレース機能 デバッグウィンドウ シミュレータ機能 EWARM の最適化 Update Update EWARM の便利な開発テクニック EWARM の速度性能評価手順 EWARM 関連情報 URL 2
EWARM 付録情報 EWARM のマニュアルガイド www.iar.com
EWARM のマニュアルガイド インフォメーションセンタからのリンク 4
EWARM のマニュアルガイド インフォメーションセンタ ユーザガイド (1/3) EWARMを使った開発の手順 アプリケーションとしてのIDEの使い方 EWARMのデバッグ設定 使い方 コンパイラ/ リンカの設定方法 使い方 アセンブラの設定方法 使い方 旧バージョンからのアップデート注意 MISRA-C:1998チェッカの使用方法 説明 MISRA-C:2004チェッカの使用方法 説明 5
EWARM のマニュアルガイド インフォメーションセンタ ユーザガイド (2/3) インストール手順 ライセンスのクイックガイド インストール手順 ライセンスの詳細 エミュレータ (ICE) 固有のマニュアル CMSIS 規格説明 (ARM 社提供 ) 6
EWARM のマニュアルガイド ソフトウェア構成とマニュアルの関係 IAR Embedd Workbench IDE IDE ツール ビルドツール IAR C-SPY デバッガ エディタ プロジェクトマネージャ ライブラリビルダ ライブラリアン IAR C/C++ コンパイラ アセンブラ リンカ シミュレータ ハードウェアシステムドライバ Power デバッグ RTOS プラグイン 設定開発デバッグ 7
発フェーズ取り扱い方法開EWARM のマニュアルガイド 推奨するマニュアル参照順序 EWARM 全体概要の把握 IAR Embedded Workbench の使用開始の手順 アプリ操作プロジェクト設定 コンパイラ設定リンカ設定 リンカ設定実践 デバッグ設定デバッグ手法 ICE のスペック IDE ユーザガイド C/C++ コンパイラリファレンスガイド ILINK 設定ガイド C-SPY デバッガガイド エミュレータ (ICE) 固有のマニュアル IAR 日本法人作成ガイド http://www.iar.com/global/kk_pages/ UserGuide/EW_IlinkGuide.JPN.pdf 8
EWARM のマニュアルガイド IAR Embedded Workbench の標準的なマニュアル構成 Part.1 関連モジュールの概要説明 教科書 Part.2 関連モジュールの詳細説明 辞書 9
EWARM のマニュアルガイド Embedded Workbench IDE ユーザガイド 章目次 パート 1. プロジェクト管理とビルド 開発環境 プロジェクト管理 ビルド 編集 パート 2. リファレンス情報 インストールファイル IAR Embedded Workbench IDE リファレンス 一般オプション コンパイラオプション アセンブラオプション 出力コンバータオプション カスタムビルドオプション ビルドアクションオプション リンカのオプション ライブラリビルダオプション 10
EWARM のマニュアルガイド C/C++ コンパイラリファレンスガイド パート 1. ビルドツール IAR ビルドツールの概要 組込みアプリケーションの開発 データ記憶 関数 ILINK を使用したリンク アプリケーションのリンク DLIB ランタイムライブラリ アセンブラ言語インタフェース C の使用 C++ の使用 アプリケーションに関する考慮事項 組込みアプリケーション用の効率的なコーディング 章目次 パート 2. リファレンス情報 外部インタフェースの詳細 コンパイラオプション リンカオプション データ表現 拡張キーワード プラグマディレクティブ 組込み関数 プリプロセッサ ライブラリ関数 リンカ設定ファイル セクションリファレンス スタック使用制御ファイル IAR ユーティリティ C 規格の処理系定義の動作 C89 の処理系定義の動作 11
EWARM のマニュアルガイド C-SPY デバッガガイド 章目次 IAR C-SPY デバッガ C-SPY を使用するにあたって アプリケーションの実行 変数と式の扱い ブレークポイントの使用 メモリとレジスタのモニタ JTAGjet ドライバでのトレースデータの収集と使用 トレースデータの収集と使用 プロファイラの使用 Power ドメインのデバッグ コードカバレッジ 割込み C-SPY マクロの使用 C-SPY コマンドラインユーティリティ cspybat デバッガオプション C-SPY ドライバについての追加情報 フラッシュローダの使用 12
EWARM のマニュアルガイド 同梱ドキュメント一覧 1/2 [Program Files] [IAR Systems] [IAR Embedded Workbench for ARM ***] [arm] [doc] AVIXPluginIarEwarm_v0500.pdf cmx_quickstart.pdf embos_iar_plugin.pdf EW_MisraC1998Reference.ENU.pdf EW_MisraC2004Reference.ENU.pdf EWARM_ADSMigrationGuide.ENU.pdf EWARM_AssemblerReference.ENU.pdf EWARM_AssemblerReference.JPN.pdf EWARM_DDFFormat.pdf EWARM_DebuggingGuide.ENU.pdf EWARM_DebuggingGuide.JPN.pdf EWARM_DevelopmentGuide.ENU.pdf EWARM_DevelopmentGuide.JPN.pdf EWARM_HeaderFormat.pdf EWARM_HeaderTemplate.pdf EWARM_IDEGuide.ENU.pdf EWARM_IDEGuide.JPN.pdf デバッガ用 DDF ファイルフォーマット ヘッダファイルフォーマット ヘッダファイルテンプレート ENU: 英語版 JPN: 日本語版上記がないものは英語版 13
EWARM のマニュアルガイド 同梱ドキュメント一覧 2/2 [Program Files] [IAR Systems] [IAR Embedded Workbench for ARM ***] [arm] [doc] EWARM_MigrationGuide.ENU.pdf EWARM_MigrationGuide.JPN.pdf EWARM_RealViewMigrationGuide.ENU.pdf FlashLoaderGuide.ENU.pdf FlashLoaderGuide.JPN.pdf フラッシュローダ開発ガイド IAR_KScard_QuickStart.pdf IAR_KScard_ROM_monitor_settings.pdf I-jet-ARM.ENU.pdf I-jet-ARM.JPN.pdf jet_usb_install.pdf JLink_J-TraceARM.pdf JLinkARM.pdf PEMicroSettings.pdf ThreadX_IAR_C-SPY_Plugin.pdf uc-os-ii-ka-cspy-userguide.pdf ENU: 英語版 JPN: 日本語版上記がないものは英語版 14
EWARM 付録情報 ARM の命令セット www.iar.com
ARM の命令セット ARM の命令種類 命令セットビット特徴 ARM Thumb Thumb2 32bit 16bit 16bit + 32bit フル命令セット * パフォーマンス いがコード密度低い ARM 命令のサブセット * コード密度 いがパフォーマンスやや低い Thumb 命令のスーパーセット * パフォーマンスおよびコード密度 い ARMv6-M Thumb 16bit + 32bit ARM ファミリー毎の命令対応 Thumb2 命令のサブセット 名称ビット特徴 ARM6 ARM 命令 ARM7 ARM9 ARM11 ARM 命令 +Thumb 命令 命令セットを使い分ける際には CPU のモード切替が必要 Cortex-M3/M4 Thumb2 命令 CPU モードを変えることなく必要に応じて 32bit 命令を使 Cortex- M0/M0+ ARMv6-M Thumb ほとんどの 16bitThumb 命令と 重要な 6 個の 32bit Thumb 命令 16
EWARM 付録情報 インストールファイルとドキュメント www.iar.com
インストールファイル (1) インストールファイルの構成 ルートディレクトリ EWARM 固有のファイル 各コンポーネントの実行ファイル CMSIS 関連ファイル開発環境 プロジェクト設定に使用するファイルリリースノート ユーザガイド C-SPYデバッガで必要なデバイスドライバサンプルプロジェクトヘッダファイルライブラリファイルプラグインモジュール RTOS 関連ファイルライブラリ関連のソースファイルチュートリアルプロジェクトファイル 共通コンポーネント用の実行ファイル EW 製品共通のファイル IDE 設定保存用に使用されるファイルリリースノート ユーザガイドプラグインモジュール 18
インストールファイル (2) arm ディレクトリの内容 oarm bin oarm config oarm doc oarm drivers oarm example oarm inc oarm lib oarm plugin oarm src oarm tutor 各コンポーネントの実行ファイル開発環境 プロジェクト設定に使用するファイルリリースノート ユーザガイド C-SPYデバッガで必要なデバイスドライバサンプルプロジェクトヘッダファイルライブラリファイルプラグインモジュールライブラリ関連のソースファイルチュートリアルプロジェクトファイル 19
インストールファイル (3) Common ディレクトリの内容 ocommon bin ocommon config ocommon doc ocommon plugin 共通コンポーネント用の実行ファイル IDE 設定保存用に使用されるファイルリリースノート ユーザガイドプラグインモジュール 20
重要マニュアル IAR Embedd Workbench IDE IDE ツール ビルドツール IAR C-SPY デバッガ エディタ プロジェクトマネージャ ライブラリビルダ ライブラリアン IAR C/C++ コンパイラ アセンブラ リンカ シミュレータ ハードウェアシステムドライバ Power デバッグ RTOS プラグイン 設定開発デバッグ 21
EWARM 付録情報 EWARM のオプション設定概要 www.iar.com
EWARM のオプション設定概要 ツールオプションとプロジェクトオプション PC に保存されるツール全般オプション プロジェクト固有のオプション設定 23
ツールオプション概要 表 操作性カスタマイズ ビルドメッセージカスタマイズ ビルド動作等カスタマイズ ソースコード管理カスタマイズ デバッガ動作等カスタマイズ デバッグ時スタック解析動作等カスタマイズ 24
プロジェクトオプション概要 ターゲット設定ライブラリ設定 開発フロー コンパイラ設定 最適化など リンカ設定 メモリ配置 チェックサム デバッグ 設定 ICE 選択書き込み設定 ICE 固有の設定 リセット 速度 25
EWARM 付録情報 ビルド時の生成ファイル www.iar.com
ビルド時の生成ファイル 生成ファイル一覧 生成ファイル 説明.out 実行可能ファイル (Elf/Dwarf 形式 ).a ライブラリファイル.srec (,.hex,.sim).map Flash ライター用などに変換されたファイル [ プロジェクト ] [ オプション ] [ 出力コンバータ ] [ 追加出力ファイルを生成 ] にチェック リンク後のマップファイル [ プロジェクト ] [ オプション ] [ リンカ ] [ リスト ] [ リンカマップファイルの表示 ] project1 Debug Exe project1.out project1.srec List project1.map Tutor.lst Utilities.lst tutor_library Debug Exe tutor_library.a.lst C ソースファイル毎の静的解析情報 [ プロジェクト ] [ オプション ] [C/C++ コンパイラ ] [ リスト ] [ リストファイルの出力 ] 27
ビルド時の生成ファイル.out ファイル 実 可能ファイル (Elf/Dwarf 形式 ) 28
ビルド時の生成ファイル.a ファイル ライブラリファイル 29
ビルド時の生成ファイル.srec(.hex,.sim) ファイル S010000070726F6A656374312E73726563EC S11300003804002019030000B3020000B30200000A S1130010B3020000B3020000B302000000000000BD S1130020000000000000000000000000B302000017 S1130030B302000000000000B3020000B30200009D S113004038B52D2401201349486012490860022064 S1130050040024B20A2C0FDA24B2200000F00DF8B8 S1130280A142F8D110BD00BF2C0000004C000000BA S11302B07047FEE7DDFFFFFF2C0000000800002070 S11302C000000000BBFEFFFF080000005800000013 S11302D0000000200000000000F009F8002801D010 S11302E0FFF7C0FF0020FFF7ADFF00F002F8012088 S11302F0704700F001B800000746384600F002F8E5 S1130300FBE7000080B5FFF751FF024A11001820F7 S1130310ABBEFBE726000200C046C046C046C0464E S10F0320FFF7DAFFFFFFFFFFFFFFFFFF06 S9030319E0 30
ビルド時の生成ファイル.map ファイル *** 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: 0x400 CSTACK 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 memory 44 bytes of readonly data memory 1 076 bytes of readwrite data memory Errors: none Warnings: none 31
ビルド時の生成ファイル.lst ファイル In section.bss, align 4 29 int callcount; callcount: 00000000 DS8 4 30 31 /* Increase the 'callcount' variable by one. */ In section.text, align 2, keep-with-next 32 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 DoForegroundProcess 8 -> GetFib 8 -> NextCounter 8 -> PutFib 0 NextCounter Section sizes: Bytes Function/Label ----- -------------- 4??DataTable2 24 DoForegroundProcess 12 NextCounter 4 callcount 28 main 4 bytes in section.bss 68 bytes in section.text 68 bytes of CODE memory 4 bytes of DATA memory Errors: none Warnings: none 32
EWARM 付録情報 スタートアップシーケンス www.iar.com
スタートアップシーケンス IAR DLIB ランライムライブラリのコードただし上書き可能 参照 ジャンプ Cortex-M0/M3/M4 Vector Table: thumb vector_table_m.s or thumb cstartup_m.c デフォルトプログラムエントリ : thumb cstartup_m.s or thumb cstartup_m.c Vector No. Vector Offset 例外 & 割り込み 値 00 0x00 Stack Top sfe (CSTACK) 01 0x04 Reset iar_program_start 02 0x08 NMI Default Handler 03 0x0C Hard Fault Default Handler 04 0x10 Memory Management Default Handler 05 0x14 Bus Fault Default Handler 06 0x18 Usage Fault Default Handler 07~10 0x1C~0x28 Reserved 0 11 0x2C SVCall Default Handler 12 0x30 Debug Monitor Default Handler 13 0x34 Reserved 0 14 0x38 PendSV Default Handler 15 0x3C SysTick Default Handler 16 ~ 255 0x40~0x3FC External Interrupts Interrupt Handlers iar_program_start: bl iar_init_core ; optional bl iar_init_vfp ; optional, enable VFP, thumb fpinit_m.s bl cmain main() 前の初期化 : thumb cmain.s cmain: bl low_level_init bl iar_data_init3 bl main ; low_level_init.c ; initialize data sections, init data_init3.c ユーザコード User s Application: int main (void) { } void xxx_interrupthandler (void) { } 34
EWARM 付録情報 Cortex の CoreSight www.iar.com
CoreSight テクノロジー : 機能 接続まとめ デバッグ制御 名称接続 ICE 基本機能特徴 JTAG SWD Serial Wire Debug TMS TCK TDO TDI nreset TMS TCK TDO TDI nreset SWDIO SWDCLK SWO - - SWDIO SWDCLK SWO - - I-jet J-Link JTAGjet I-jet J-Link JTAGjet バウンダリスキャン printf デバッグ 必要信号数 :2 本 SWV 使 可能 printf デバッグ 名称接続 ICE トレース 式特徴 トレース機能 *M3/M4 のみ Serial Wire Viewer SWV ETM Embedded Trace Macrocell TMS TCK TDO TDI nreset CLK D0 D1 D2 D3 SWDIO SWDCLK SWO - - 1,2,4 本から選択 I-jet J-Link JTAGjet Serial Wire Output JTAGjet -Trace J-Trace *JTAG-Trace は 4 本 (4bit) 固定 サンプリング 分岐トレース ( 実 ) パソコンにリアルタイム転送 PC( プログラムカウンタ ) 取得 特定データのサンプリング 例外処理のトレース ( 速 )prinf デバッグ ピン数 :1 データ 落可能性 ICE のメモリに保存 ブレーク時にパソコンに転送 実 履歴を確実に追跡 対応しているかは CPU 依存 タイムスタンプは誤差あり データ 落可能性 データ線の本数に依存する 36
CoreSight テクノロジー : 可能組み合わせ JTAG SWD SWV ETM TMS TCK TDO TDI nreset SWDIO SWDCLK SWO - - CLK D0 D1 D2 D3 TMS TCK TDO TDI nreset SWDIO SWDCLK SWO - - TMS TCK TDO TDI nreset SWDIO SWDCLK SWO - - TMS TCK TDO TDI nreset SWDIO SWDCLK SWO - - CLK D0 D1 D2 D3 TMS TCK TDO TDI nreset SWDIO SWDCLK SWO - - TMS TCK TDO TDI nreset SWDIO SWDCLK SWO - - CLK D0 D1 D2 D3 ETM および SWV を同時に使 する際は SWV のトレースデータは ETM トレースバッファで収集され 実 が停 したタイミングで 表 更新されます 37
CoreSight テクノロジー : トレースタイミング トレース情報が取得できない sub_2() SWV トレース sub_1() main() 定間隔でサンプリング sub_2() ETM トレース sub_1() main() プログラムが分岐するタイミングでトレースバッファに出 38
CoreSight テクノロジー : よくある質問 Q. デバッグに最 限必要なピン数は? デバイスと開発環境がSWDに対応していれば 3もしくは4 本 SWDデバッグで 最低限必要なピン数は3 本 (I/O クロック グラウンド ) もしくはこれにリセットを加えた4 本 リセット機能は必須機能ではないため 最低ということであれば3 本 グラウンドの本数が少ないと信号が弱くなったりノイズがのるリスクあります (Jtag だと通常 5 本程度使 ) 般的にはおそらくグラウンドは 1 本でも開発可能ですが この精度は 基板や ICE の品質にも関わってくるためユーザー様にて確認の必要があります SWD は 般的に Cortex A,R,M に対応していますが デバッガとデバイスが共に SWD に対応していることが条件となります 39
CoreSight テクノロジー : 機能 接続まとめ Q. SWD を使 すると信号線が減るが クロック差やスピード差はあるか? SWD や JTAG と べて信号線が減りますが 実際には CPU との通信以外の制御部分が処理の 半を占めるため デバッガの動作速度の低下を体感することはありません Q. JTAG と SWD を べて できることできないことは? [JTAG でできて SWD できないこと ] JTAG 本来の機能である端 のバウンダリスキャンテスト [SWD でできて JTAG でできないこと ] トレース機能である SWV トレース [ その他 SWD のメリット ] デバッグ の端 数の現象 ( 5->2 ) 上記に伴うコネクタ実装 積の現象 40
CoreSight テクノロジー : 関連 URL ARM 社 HP の解説 SWD ETM http://www.arm.com/ja/products/system-ip/debug-trace/coresight-soccomponents/serial-wire-debug.php http://www.arm.com/ja/products/system-ip/debug-trace/tracemacrocells-etm/index.php 41
EWARM 付録情報 デバッグコネクタ情報 www.iar.com
デバッグインタフェースコネクタ :I-jet(1) ハーフピッチ 20 ピンコネクタ :MIPI-20(JTAG, SWD/SWV) 標準対応 ( ケーブル付 ) 11pin, 13pin から 5V 供給可能 43
デバッグインタフェースコネクタ :I-jet(2) ハーフピッチ 10 ピンコネクタ :MIPI-10(JTAG, SWD/SWV) 標準対応 ( ケーブル付 ) ピン配置はハーフピッチ 19 ピンコネクタの 1~10 番と同じ 44
デバッグインタフェースコネクタ :I-jet(3) 標準ピッチ 20 ピン変換アダプタ :ARM-20(JTAG,SWD/SWV 用 ) アダプタ標準添付 19pin から 5V 供給可能 45
デバッグインタフェースコネクタ :JTAGjet-trace ハーフピッチ 20 ピンコネクタ :MIPI-20(JTAG/,SWD, ETM) 標準対応 ( ケーブル付 ) ピン機能詳細は ETM トレース機能 を参照 46
デバッグインタフェースコネクタ :J-Link(1) 標準ピッチ 20 ピンコネクタ (JTAG SWD/SWV 用 ) JTAG 接続 SWD/SWV 接続 J-Link J-Trace では標準対応 ( ケーブル付 ) 19pin から 5V 供給可能 47
デバッグインタフェースコネクタ :J-Link(2) ハーフピッチ 19 ピンコネクタ (JTAG SWD/SWV J-Trace では標準対応 ( ケーブル付 ) J-Link で使用する場合は変換ケーブル ( 別売 ) が必要 11pin, 13pin から電源供給可能 48
デバッグインタフェースコネクタ :J-Link(3) ハーフピッチ 9 ピンコネクタ (JTAG SWD/SWV 用 ) J-Link J-Trace で使用する場合は変換ケーブル ( 別売 ) が必要ピン配置はハーフピッチ 19 ピンコネクタの 1~10 番と同じ 49
デバッグインタフェースコネクタ例 コネクタ種類 ハーフピッチ 20(19)pin *MIPI-20 ハーフピッチ 10(9)pin *MIPI-10 フルピッチ 20(19)pin *ARM-20 コネクタ例 SAMTEC:FTSH-110-01-L-DV-K SAMTEC:FTSH-105-01-L-DV-K Harting:09185206803 Molex:90635-1202 Tyco Electronics:2-215882-0 *J-Link マニュアルではキー pin を除いて 19pin/9pin と記述 50
EWARM 付録情報 SWV(SWO) 機能 www.iar.com
SWV 機能の使用条件 MCU の対応 Cortex-M3/M4 SWV トレース対応エミュレータ (ICE) I-jet / I-jet-Lite / SEGGER 社 J-Link が対応 コネクタの対応 接続 式 SWO ピンの接続に対応したコネクタが必要 SWD 接続を選択 レジスタ設定による SWO ポートピンの有効化 MCU によっては SWO ポートピンが多重化されて他の機能に割り当てられていることがあるため FW またはマクロで有効化する必要がある 52
SWV 対応コネクタ SWD 接続 SWO ピン 53
SWV 機能使用時のプロジェクト設定 [ 設定 ] [ ドライバ ] を [I-jet/JTAGjet] を選択 [ デバッガ ] [I-jet/JTAGjet] [JTAG/SWD] でインタフェースに [SWD] を選択 [ 一般オプション ] ライブラリ設定 stdout/stderr が SWO 経由になっていると強制的に SWD が選択される [I-jet / JTAGjet] 54
SWV(SWO) 機能 :SWV トレース こんなときに コードの流れをバックトレースしたい コード実 時のタイムスタンプを たいなど * 補 SWV トレースは 1 秒間に数千サンプリング程度なので 実 コード全てを追うことできない 55
SWV(SWO) 機能 :SWV トレース 使用方法 1.SWO トレースウィンドウ設定 2. SWO トレース 3. デバッグ開始 3. 右クリックして [ 有効 ] 56
SWV(SWO) 機能 : コードカバレッジ こんなときに 実装されているコードが想定通りに実 されているか確認したい など * 補 デフォルトで有効となっている コードカバレッジ プラグインの機能を使 サンプリングタイミングにより 抜け落ちることがあるが 時間トレースすることで信頼性のあるデータとなる 57
SWV(SWO) 機能 : コードカバレッジ 使用方法 SWV トレースが可能な状態で 4.[ 更新 ] 1. コードカバレッジ コードカバレッジが更新表示される 3. デバッグ実行 2. 右クリックして [ 有効化 ] 58
SWV(SWO) 機能 : データログ こんなときに 特定の変数やアドレスへの読み書きアクセスをロギングしたい 上記アクセスの時間を知りたい など * 補 変数またはアドレスは 4 つまで指定可能 59
SWV(SWO) 機能 : データアクセスサマリー こんなときに データアクセスが何回あったか 読み書きが何回あったか確認したい など * 補 すべてのアクセス 数が読み書きアクセスの合計より きい場合 アクセスの属性情報が正確にとれなかったサンプリングがある 60
SWV(SWO) 機能 : データアクセス : タイムライン こんなときに データの変わったタイミングを時間軸上でみたい 他の割り込みなどとの時間関係を たい など * 補 い箇所はオーバフローが発 61
SWV(SWO) 機能 : データログ使用方法 (1/2) 1. 静的変数上で右クリック 2. 変数 のデータログブレークポイントを設定 3.[ 表示 ] [ ブレークポイント ] 4. 右クリックして [ 編集 ] 5. ログ対象アクションを選択 62
SWV(SWO) 機能 : データログ使用方法 (2/2) 2. 右クリックして有効化 1. デバッグ開始 1. データログ 63
SWV(SWO) 機能 : 割り込みログ こんなときに プログラム実 中に発 した割り込みや例外をロギングしたい 割り込みハンドラ関数の処理でかかった時間を知りたい など 64
SWV(SWO) 機能 : 割り込みログ一覧 こんなときに 各割れ込みの発 回数や発 頻度を確認したい など 65
SWV(SWO) 機能 : 割り込みログ : タイムライン こんなときに 割り込みの発 タイミングを時間軸上で たい 割り込みハンドラの処理にかかった時間を時間軸上で たい その他のイベントとの関係を時間軸上で たい など 66
SWV(SWO) 機能 : 割込みログ 使用方法 1. 割込みログ 2. 右クリックして [ 有効化 ] 3. デバッグ開始 67
SWV(SWO) 機能 :ITM イベント : ログ こんなときに コードの実 タイミングを正確に知りたい 実 時の変数の値を たい マルチタスクの各タスク り 出 に仕掛けて タスク状況を把握したい など * 補 ソースコード上で arm_itm.h を include ITM_EVENT8_WITH_PC(1,1) と記述 チャンネルは 1-4 * 参考 URL http://supp.iar.com/support/?note=26891 http://netstorage.iar.com/suppdb/public/support/004765/time%20measurement%20by%20swo.pdf 68
SWV(SWO) 機能 :ITM イベント : サマリー こんなときに 各チャンネルの ITM イベント発 回数や頻度を知りたい 実 時間が適正な間隔になっているか知りたい ウォッチしている値が適正な値になっているか知りたい など 69
SWV(SWO) 機能 :ITM イベント : タイムライン こんなときに ITM イベントの発 タイミングを時間軸上で たい 各 ITM イベント間の関係や割り込みなどのと関係を時間軸上で たい イベント間をドラッグドップで 経過時間を知りたいなど 70
SWV(SWO) 機能 :ITM イベント 使用方法 1.arm_itm.h をインクルード 5. 右クリックして [ 有効化 ] 2. マクロをコードに記述 3. ビルド & ダウンロード 4. イベントログ 6. デバッグ開始 71
SWV(SWO) 機能 : タイムライン表示 使用方法 2. 表示したい機能の上で右クリックして [ 有効化 ] 4. デバッグ開始 3. 右クリックして [ ズーム ] [ 任意の時間軸 ] 1. タイムライン 72
EWARM 付録情報 ETM トレース機能 www.iar.com
ETM トレース機能の使用条件 MCU の対応 ETM 機能の実装は MCU ベンダの選択による Trace Data ピン (1-4 本 ) は MCU ベンダの選択による トレース機能付きエミュレータ (ICE) を使 JTAGjet-Trace が対応 SEGGER 社 J-Trace が対応 コネクタの対応 トレースピンの接続に対応したコネクタが必要 レジスタ設定によるトレースポートピンの有効化 MCU によってはトレースポートピンが多重化されて他の機能に割り当てられていることがあるため FW またはマクロで有効化する必要がある 74
ETM トレース対応コネクタ ETM トレース用クロック ETM トレース用データポート 75
ETM トレース使用時のプロジェクト設定 : JTAGjet-trace [ 設定 ] [ ドライバ ] を [I-jet/JTAGjet] を選択 [ デバッガ ] [I-jet/JTAGjet] の特別な設定はなし [I-jet / JTAGjet] 76
デバッグ画面での [ETM トレース設定 ] デフォルト設定で動作可能 設定項目の詳細は [ ヘルプ ] [Embedded Workbench デバッグガイド ] を参照 77
ETM トレース用のブレークポイント設定 トレース取得を開始したいコード上で右クリックし [ ブレークポイントの切り替え ( トレース開始 )] を指定 トレースを停止したいコード上で [ ブレークポイントの切り替え ( トレース停止 )] を指定 ブレークしたときに トレースデータが ICE から読み出され画面に表示される 78
ETM トレース機能 :[ETM トレース ] [ETM トレース ] 実行されたコードを表示 79
ETM トレース機能 :[ETM 関数トレース ] [ETM 関数トレース ] ETM トレースで取得したデータを関数遷移で表示 80
ETM トレース機能 :[ コードカバレッジ ] [ 逆アセンブリ ] [ コードカバレッジ ] ETM トレースで通過したアドレスに を付ける 81
ETM トレース機能 : [ タイムライン ] [ コールスタック ] [ タイムライン ] 82
EWARM 付録情報 デバッグウィンドウ www.iar.com
デバッグウィンドウ : ブレークポイント こんなときに ブレークポイントの 覧が たい ブレークポイントを貼っているソースコードに びたい 時的にブレークポイントを全て無効にしてデバッグしたい ブレークポイントを削除したい ブレークポイントを編集したい など 84
デバッグウィンドウ : 逆アセンブリ こんなときに アセンブラレベルでステップ実 したい 実 中のアドレスを たい ライブラリなど ソースファイルのないプログラムをデバッグしたい 最適化の影響を確認したい など 85
デバッグウィンドウ : メモリ こんなときに 現在のメモリの値を たい メモリをPC 上の保存したい メモリ上でデータを検索したいなど 86
デバッグウィンドウ : シンボルメモリ こんなときに アドレス順に変数や関数の 覧を たい など 87
デバッグウィンドウ : レジスタ こんなときに 現在の各種レジスタの値が たい デバッグ にレジスタの値を変えてみたいなど 88
デバッグウィンドウ : ウォッチ こんなときに 特定の静的変数やグローバル変数の値をモニタリングしたい ローカル変数の値をスコープ内でモニタリングしたい など 89
デバッグウィンドウ : ローカル こんなときに 関数内のローカル変数や引数を 動的にモニタリングしたい など 90
デバッグウィンドウ : 静的変数 こんなときに プログラム内の静的変数やグローバル変数を 動的にモニタリングしたい など 91
デバッグウィンドウ : 自動 ( オート ) こんなときに ステップ実 でデバッグをしているときに近辺の変数や関数情報を 動的にモニタリングしたい など 92
デバッグウィンドウ : ライブウォッチ こんなときに 特定の静的変数やグローバル変数を プログラム実 状態のまま定期的にモニタリングしたい など 93
デバッグウィンドウ : クイックウォッチ こんなときに 変数を簡単な式で評価したい * data > 200 など真なら 1 任意のタイミングで C-Spy マクロを実 したい など * 補 C-Spy マクロは 常に強 かつ柔軟 [ ヘルプ ] [Embedded Workbench デバッグガイド ] の [C-SPY マクロの使 ] を参照 94
デバッグウィンドウ : 呼び出しスタック こんなときに 実 中の関数の呼び出し元を知りたい 各関数の引数も たいなど 95
デバッグウィンドウ : スタック こんなときに 現在のスタック使 状況を たい 現在のスタック使 率を たい それまでの最 スタック使 量を知りたいなど * 補 OS を搭載している場合 OS 側で各タスクのスタックを管理するので 別途プラグインなどを活 してスタック管理 96
デバッグウィンドウ : ブレークポイント こんなときに printf デバッグがしたい デバッグ にパラメータなどを scanf で EWARM の画 上から したいなど * 補 <stdio.h> を include コードサイズが きくなってしまう場合は [ プロジェクト ] [ オプション ] [ 般オプション ] [ ライブラリオプション ] から調整可能 printf はデフォルトだとターミナル IO に出 されるが putchar にユーザコードで実装することで UART などに変更可能 97
デバッグウィンドウ : イメージ こんなときに 現在のイメージ ( デバッグ情報 ) を確認したい など * 補 ブートローダプロジェクトなどで複数バイナリをデバッグするとき以外は出番なし 98
EWARM 付録情報 シミュレータ機能 www.iar.com
シミュレータの設定 [ 設定 ] [ ドライバ ] を [ シミュレータ ] を選択 100
シュミレータでできること C-SPYシミュレータで出来ることは以下の通りとなります 1. 命令レベルのシミュレーション 2. メモリの構成 検証 3. 割込みシミュレーション 4. イミディエイトブレークポイントとC-SPY マクロシステムを使用した周辺シミュレーションデフォルトではCPUコア単体 + メモリの状態でのシミュレーションが可能です 周辺や割込みを使うシミュレーションは3または4に関してユーザ側で準備が必要となります 1.CPU コア 2. メモリ 3. 割込みを疑似発生 4.C-SPY マクロ周辺の模擬 101
割込みシミュレーション ここでは 3の割込みシミュレーションの用い方を説明しますシミュレータ動作時に 1シミュレータ 2 割込み設定割込み設定画面で 3 割込みシミュレーションを有効にするをONに 4 新規作成を押す割込みの編集画面になるので 5 初回の割込みを起こしたいサイクル 周期などを設定してください あとは通常の手順でシミュレーションを実施ください 1 2 3 4 5 必要な項目を設定して下さい 102
シミュレーションによる再現性 CPU コア単体でのシミュレーションとなります EWARM_DebuggingGuide.JPN.pdf に C-SPY シミュレータは ターゲットプロセッサの機能をソフトウェアで完全にシミュレーションするため ハードウェアがすべて揃っていなくてもプログラムロジックをデバッグできます と記載があるように シミュレータは実機がない場合などに多く用いられており 実機がある場合には実機を用いてのソフト開発が適しています 103
EWARM 付録情報 EWARM の最適化 www.iar.com
最適化 最適化の設定 105
最適化 最適化レベル なし 低 *1 中 高 ( バランス ) *2 高 ( 速度 ) 高 ( サイズ ) *1 ビルド構成がDebugの場合の初期値 *2 ビルド構成がReleaseの場合の初期値 デバッグ時は なし か 低 に設定してください 106
最適化 最適化とデバッグ の情報保持 変数の位置情報 変数のスコープおよび存在情報 ステップポイント ステップ実 時のソースコードと機械語の対応 関数のステップイン / アウト ブレークポイントの設置 コールスタック情報 関数を特定する情報およびコールスタック内での変数情報 最適化レベル 変数の位置情報 ステップポイント コールスタック情報 なし 保持 保持 保持 低 ほぼ保持 保持 保持 中 保持されない 保持 保持 保持されない 保持されない 保持 107
最適化 最適化の適 範囲 プロジェクト全体 ソースグループ単位 ソースコード単位 関数単位 プロジェクト全体 ソースグループ単位 関数単位 ソースコード単位 108
最適化 最適化の適 範囲 プロジェクト全体 ソースグループ単位 ソースコード単位 関数単位 グループまたはソースコード個別に上書きする際には [ 継承した設定をオーバーライド ] にチェック ダブルクリック 109
最適化 最適化の適 範囲 プロジェクト全体 ソースグループ単位 ソースコード単位 関数単位 #pragma optimize の直下に記述された関数のみ適用される ファイルソースに適用されている最適化レベルを下げる方向にのみ指定可能 ファイルの最適化レベルが [ 中 ] のコードに対して #pragma optimize= high は適用できない 関数単位 110
最適化 最適化例 1: 共通部分式除去 if ( a - b * c / 150 % 12 == 5) do_something(); : : return(a - b * c / 150 + 5); コンパイラは 予め a - b * c / 150 を計算する関数を作成し 評価式とリターン値で結果を使用する 111
最適化 最適化例 2: ループ展開 for ( i = 0; i < 3; i++) { j[i] = i; } j[0] = 0; j[0] = 1; j[0] = 2; 112
最適化 最適化の考え方 最適化の手法は 効果が一定の効果が保証されるものではなくコンパイラによって発見的 探索的に適用されます 最適化の考え方 デバッグのしやすさ メンテナンスのしやすさを考慮し サイズの削減が必要なコード 処理速度の追求が必要なコードごとに 適用範囲 ( ソースファイル / グループ ) を限定して 高い最適化レベルを適用することを推奨いたします 各適用モジュール毎に単体テストを行い 効果的な最適化オプションを試行してください 113
EWARM 付録情報 EWARM の便利な開発テクニック www.iar.com
RAM 上での関数実行 ramfunc キーワードを関数の前に追加するだけ ramfunc void foo(void); 注意 : main 関数開始前には使用できません 115
デバッグ開始と同時にプログラムをスタート [ デバッガ ] [Run to] に exit を指定するだけ 116
EWARM 付録情報 EWARM の速度性能評価手順 www.iar.com
速度の性能評価の全体手順 1. プロジェクトのビルド設定 1. 適切なCPUの選択 2. コンパイラオプション設定 3. リンカ設定 4. デバッガ設定 2. ソースコード上の設定 1. CPU クロックの設定 2. ITMイベントの埋め込み *M3/M4のみ 3. RAM 関数化 3. ビルド結果の評価 1..map ファイルからの情報 4. 処理時間の測定 *M3/M4 のみ 1. SWO トレース (ITM イベント ) の利 118
1. プロジェクトのビルド設定 1. 適切な CPU の選択 119
1. プロジェクトのビルド設定 2. コンパイラオプション設定 [ 最適化 ] 最適化レベル [ ] のときのみ [ 速度 ][ サイズ ][ バランス ] の選択が可能 120
1. プロジェクトのビルド設定 2. コンパイラオプション設定 [ 複数ファイルのコンパイル ] C C C まとめてコンパイルすることで最適化の効率上昇 C デバッグは困難になる 121
1. プロジェクトのビルド設定 3. リンカ設定 [ 最適化 ] 122
1. プロジェクトのビルド設定 3. リンカ設定 [ コードを RAM に展開 ] リンカ設定ファイルの中 をエディタで編集 例 //initialize by copy { readwrite }; initialize by copy { readonly, readwrite }; 詳細は [ ヘルプ ] [Embedded Workbench C/C++ 開発ガイド ] コードを初期化する (ROM から RAM にコピーする ) を参照 123
1. プロジェクトのビルド設定 3. リンカ設定 [ リスト ] ビルド時に map ファイルが同時 成される 124
1. プロジェクトのビルド設定 4. デバッガ設定 [J-Link/J-Trace] [ 設定 ] CPU クロックを実際のクロックと合わせる 125
1. プロジェクトのビルド設定 4. デバッガ設定 [J-Link/J-Trace] [SWD] インタフェースで SWD を選択 (ITM イベント ) 126
2. ソースコード上の設定 1.CPU クロックの設定 測定対象箇所の前で PLL の設定やプリスケーラの設定などを搭載しているクロックに合わせて う 実際のコードやサンプルプロジェクトやデータシートを参照 127
2. ソースコード上の設定 2.ITM イベントの埋め込み #include arn_itm.h を記述 ITM_EVENT8_WITH_PC(1,0); 測定対象箇所 ITM_EVENT8_WITH_PC(1,100); と記述 ITM_EVENTn_WITH_PC(Channel,value); 128
2. ソースコード上の設定 3.RAM 関数化 ramfunc を対象の関数の前に設定リンカ設定で [ コードを RAM に展開 ] を適 している場合は効果なし 129
3. ビルド結果の評価 1.map ファイルからの情報 Outout フォルダのプロジェクト名.map ファイルをダブルクリック 130
3. ビルド結果の評価 1.map ファイルからの情報 ROM サイズ RAM サイズの確認 必要な ROM サイズ 896 + 5,124 = 6020 必要な RAM サイズ 5,088 + 13,828 = 18,916 RAM 上にコードをコピーして実 するときのみ出現 131
3. ビルド結果の評価 1.map ファイルからの情報 最 スタック使 サイズの静的解析情報 確保する必要があるスタックサイズ 132
4. 処理時間の測定 1. SWO トレース (ITM イベント ) の利 デバッグウィンドウを開く 133
4. 処理時間の測定 1. SWO トレース (ITM イベント ) の利 イベントのペイン上で右クリック 134
4. 処理時間の測定 1. SWO トレース (ITM イベント ) の利 ITM_EVENT8_WITH_PC の経過時間が表 される イベントの上でマウスオーバー 135
参考サンプルプロジェクトの実測値 Drhystone を独 にカスタマイズしたプロジェクト コンパイラ最適化 * 追加オプション 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 とする きいほうが速い 136
参考サンプルプロジェクトの実測値 Drhystone を独 にカスタマイズしたプロジェクト コンパイラ最適化 * 追加オプション 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 化が有効 有効な設定はプロジェクトによって異なる 137
EWARM 付録情報 EWARM 関連情報 URL www.iar.com
EWARM 関連情報 URL IAR システムズ株式会社 HP http://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/ サポート窓口メールアドレス support.jp@iar.com 139
EWARM 関連情報 URL FAQ http://www.iarsys.co.jp/customer/faqs 技術情報のページ http://www.iar.com/jp/service-center/resources/ 参考になる検索キーワードの例 : Coresight technique debug Trace 140
EWARM 関連情報 URL ARM 社 HP( 日本 ) http://www.arm.com/ja/index.php シリアルワイヤデバッグ解説 http://www.arm.com/ja/products/system-ip/debug-trace/coresight-soccomponents/serial-wire-debug.php ETM 解説 http://www.arm.com/ja/products/system-ip/debug-trace/trace-macrocellsetm/index.php CMSIS 解説 http://www.arm.com/ja/products/processors/cortex-m/cortex-microcontrollersoftware-interface-standard.php 141