ewarm付録情報・c++ の使用 ・アプリケーションに関する考慮事項...

141
www.iar.com EWARM付録情報 IAR システムズ株式会社 改訂日: 2014年8月1日

Upload: others

Post on 06-Apr-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

IAR システムズ株式会社

改訂日: 2014年8月1日

Page 2: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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

Page 3: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• EWARMのマニュアルガイド

Page 4: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 4Copyright(C)2014 IAR SYSTEMS, All rights reserved.

EWARMのマニュアルガイド

インフォメーションセンタからのリンク

M0 / M0+ M3 / M4

Page 5: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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チェッカの使用方法・説明

Page 6: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 6Copyright(C)2014 IAR SYSTEMS, All rights reserved.

EWARMのマニュアルガイド

インフォメーションセンタ→ユーザガイド (2/3)

M0 / M0+ M3 / M4

・・・インストール手順・ライセンスのクイックガイド

・・・インストール手順・ライセンスの詳細

・・・エミュレータ(ICE)固有のマニュアル

・・・CMSIS規格説明(ARM社提供)

Page 7: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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プラグイン

設定 開発 デバッグ

Page 8: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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のスペック取り扱い方法

開発フェーズ

Page 9: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 9Copyright(C)2014 IAR SYSTEMS, All rights reserved.

EWARMのマニュアルガイド

IAR Embedded Workbenchの標準的なマニュアル構成

M0 / M0+ M3 / M4

Part.1関連モジュールの概要説明

Part.2関連モジュールの詳細説明

教科書

辞書

Page 10: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート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 リファレンス・一般オプション・コンパイラオプション・アセンブラオプション・出力コンバータオプション・カスタムビルドオプション・ビルドアクションオプション・リンカのオプション・ライブラリビルダオプション

Page 11: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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 の処理系定義の動作

Page 12: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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 ドライバについての追加情報・フラッシュローダの使用

Page 13: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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:日本語版上記がないものは英語版

Page 14: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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:日本語版上記がないものは英語版

Page 15: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• ARMの命令セット

Page 16: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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ファミリー毎の命令対応

Page 17: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• インストールファイルとドキュメント

Page 18: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 18Copyright(C)2014 IAR SYSTEMS, All rights reserved.

インストールファイル (1)

インストールファイルの構成

M0 / M0+ M3 / M4

EWARM 固有のファイル

EW 製品共通のファイル

ルートディレクトリ

各コンポーネントの実行ファイル

CMSIS関連ファイル

開発環境、プロジェクト設定に使用するファイル

リリースノート、ユーザガイド

C-SPYデバッガで必要なデバイスドライバ

サンプルプロジェクト

ヘッダファイル

ライブラリファイル

プラグインモジュール

RTOS関連ファイル

ライブラリ関連のソースファイル

チュートリアルプロジェクトファイル

共通コンポーネント用の実行ファイル

IDE設定保存用に使用されるファイル

リリースノート、ユーザガイド

プラグインモジュール

Page 19: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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

Page 20: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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

Page 21: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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プラグイン

設定 開発 デバッグ

Page 22: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• EWARMのオプション設定概要

Page 23: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 23Copyright(C)2014 IAR SYSTEMS, All rights reserved.

EWARMのオプション設定概要

ツールオプションとプロジェクトオプション

M0 / M0+ M3 / M4

PCに保存されるツール全般オプション

プロジェクト固有のオプション設定

Page 24: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 24Copyright(C)2014 IAR SYSTEMS, All rights reserved.

ツールオプション概要

M0 / M0+ M3 / M4

表⽰・操作性カスタマイズ

ビルドメッセージカスタマイズ

ビルド動作等カスタマイズ

ソースコード管理カスタマイズ

デバッグ時スタック解析動作等

カスタマイズ

デバッガ動作等カスタマイズ

Page 25: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 25Copyright(C)2014 IAR SYSTEMS, All rights reserved.

プロジェクトオプション概要

M0 / M0+ M3 / M4

開発フロー

ターゲット設定ライブラリ設定

コンパイラ設定※最適化など

リンカ設定※メモリ配置、チェックサム

デバッグ⽤設定ICE選択

書き込み設定

ICE固有の設定※リセット・速度

Page 26: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• ビルド時の生成ファイル

Page 27: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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++コンパイラ]→[リスト]→[リストファイルの出力]

Page 28: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 28Copyright(C)2014 IAR SYSTEMS, All rights reserved.

ビルド時の生成ファイル

.outファイル

M0 / M0+ M3 / M4

実⾏可能ファイル(Elf/Dwarf形式)

Page 29: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 29Copyright(C)2014 IAR SYSTEMS, All rights reserved.

ビルド時の生成ファイル

.aファイル

M0 / M0+ M3 / M4

ライブラリファイル

Page 30: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 30Copyright(C)2014 IAR SYSTEMS, All rights reserved.

ビルド時の生成ファイル

.srec(.hex, .sim)ファイル

M0 / M0+ M3 / M4

S010000070726F6A656374312E73726563ECS11300003804002019030000B3020000B30200000AS1130010B3020000B3020000B302000000000000BDS1130020000000000000000000000000B302000017S1130030B302000000000000B3020000B30200009DS113004038B52D2401201349486012490860022064S1130050040024B20A2C0FDA24B2200000F00DF8B8・・・S1130280A142F8D110BD00BF2C0000004C000000BAS11302B07047FEE7DDFFFFFF2C0000000800002070S11302C000000000BBFEFFFF080000005800000013S11302D0000000200000000000F009F8002801D010S11302E0FFF7C0FF0020FFF7ADFF00F002F8012088S11302F0704700F001B800000746384600F002F8E5S1130300FBE7000080B5FFF751FF024A11001820F7S1130310ABBEFBE726000200C046C046C046C0464ES10F0320FFF7DAFFFFFFFFFFFFFFFFFF06S9030319E0

Page 31: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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

Page 32: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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

Page 33: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• スタートアップシーケンス

Page 34: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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ランライムライブラリのコードただし上書き可能

ユーザコード

参照 ジャンプ

Page 35: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• CortexのCoreSight

Page 36: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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

Page 37: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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トレースバッファで収集され、実⾏が停⽌したタイミングで、表⽰更新されます。

Page 38: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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トレース

トレース情報が取得できない

⼀定間隔でサンプリング

プログラムが分岐するタイミングでトレースバッファに出⼒

Page 39: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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に対応していることが条件となります。

Page 40: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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 )上記に伴うコネクタ実装⾯積の現象

Page 41: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート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

Page 42: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• デバッグコネクタ情報

Page 43: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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供給可能

Page 44: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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番と同じ

Page 45: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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供給可能

Page 46: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 46Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグインタフェースコネクタ:JTAGjet-trace

ハーフピッチ20ピンコネクタ:MIPI-20(JTAG/,SWD, ETM)

M0 / M0+ M3 / M4

標準対応(ケーブル付)※ピン機能詳細は「ETMトレース機能」を参照

Page 47: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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供給可能

Page 48: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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から電源供給可能

Page 49: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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番と同じ

Page 50: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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と記述

Page 51: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• SWV(SWO) 機能

Page 52: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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

Page 53: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 53Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV対応コネクタ

M3 / M4

SWD接続

SWOピン

Page 54: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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が選択される

Page 55: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 55Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:SWVトレース

M3 / M4

■こんなときに・・・

• コードの流れをバックトレースしたい

• コード実⾏時のタイムスタンプを⾒たい

など

*補⾜• SWVトレースは1秒間に数千サンプリング程

度なので、実⾏コード全てを追うことできない。

Page 56: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 56Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:SWVトレース 使用方法

M3 / M4

1.SWOトレースウィンドウ設定

2. SWOトレース

3. デバッグ開始

3. 右クリックして[有効]

Page 57: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 57Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO) 機能:コードカバレッジ

M3 / M4

■こんなときに・・・

• 実装されているコードが想定通りに実⾏されているか確認したい。

など

*補⾜• デフォルトで有効となっている「コードカバ

レッジ」プラグインの機能を使⽤

• サンプリングタイミングにより、抜け落ちることがあるが、⻑時間トレースすることで信頼性のあるデータとなる。

Page 58: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 58Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:コードカバレッジ 使用方法

M3 / M4

※SWVトレースが可能な状態で・・

1.コードカバレッジ

2.右クリックして[有効化]

3.デバッグ実行

4.[更新]

コードカバレッジが更新表示される

Page 59: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 59Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO) 機能:データログ

M3 / M4

■こんなときに・・・

• 特定の変数やアドレスへの読み書きアクセスをロギングしたい。

• 上記アクセスの時間を知りたい

など

*補⾜• 変数またはアドレスは4つまで指定可能

Page 60: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 60Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:データアクセスサマリー

M3 / M4

■こんなときに・・・

• データアクセスが何回あったか、読み書きが何回あったか確認したい。

など

*補⾜• 「すべてのアクセス」数が読み書きアクセス

の合計より⼤きい場合、アクセスの属性情報が正確にとれなかったサンプリングがある。

Page 61: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 61Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:データアクセス:タイムライン

M3 / M4

■こんなときに・・・

• データの変わったタイミングを時間軸上でみたい

• 他の割り込みなどとの時間関係を⾒たい

など

*補⾜• ⾚い箇所はオーバフローが発⽣

Page 62: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 62Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:データログ 使用方法 (1/2)

M3 / M4

1.静的変数上で右クリック

2.’変数’のデータログブレークポイントを設定

3.[表示]→[ブレークポイント]

4.右クリックして[編集]5.ログ対象アクションを選択

Page 63: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 63Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:データログ 使用方法 (2/2)

M3 / M4

1.データログ

2.右クリックして有効化

1.デバッグ開始

Page 64: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 64Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:割り込みログ

M3 / M4

■こんなときに・・・

• プログラム実⾏中に発⽣した割り込みや例外をロギングしたい

• 割り込みハンドラ関数の処理でかかった時間を知りたい

など

Page 65: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 65Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:割り込みログ一覧

M3 / M4

■こんなときに・・・

• 各割れ込みの発⽣回数や発⽣頻度を確認したい

など

Page 66: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 66Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:割り込みログ:タイムライン

M3 / M4

■こんなときに・・・

• 割り込みの発⽣タイミングを時間軸上で⾒たい

• 割り込みハンドラの処理にかかった時間を時間軸上で⾒たい

• その他のイベントとの関係を時間軸上で⾒たい

など

Page 67: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 67Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:割込みログ 使用方法

M3 / M4

1.割込みログ 2.右クリックして[有効化]

3.デバッグ開始

Page 68: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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

Page 69: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 69Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:ITMイベント:サマリー

M3 / M4

■こんなときに・・・

• 各チャンネルのITMイベント発⽣回数や頻度を知りたい

• 実⾏時間が適正な間隔になっているか知りたい

• ウォッチしている値が適正な値になっているか知りたい

など

Page 70: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 70Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:ITMイベント:タイムライン

M3 / M4

■こんなときに・・・

• ITMイベントの発⽣タイミングを時間軸上で⾒たい

• 各ITMイベント間の関係や割り込みなどのと関係を時間軸上で⾒たい

• イベント間をドラッグドップで、経過時間を知りたい

など

Page 71: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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.ビルド&ダウンロード

Page 72: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 72Copyright(C)2014 IAR SYSTEMS, All rights reserved.

SWV(SWO)機能:タイムライン表示 使用方法

M3 / M4

1.タイムライン

2.表示したい機能の上で右クリックして[有効化]

3. 右クリックして[ズーム]→[任意の時間軸]

4. デバッグ開始

Page 73: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• ETMトレース機能

Page 74: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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

Page 75: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 75Copyright(C)2014 IAR SYSTEMS, All rights reserved.

ETMトレース対応コネクタ

M3 / M4

ETMトレース用クロック

ETMトレース用データポート

Page 76: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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]の特別な設定はなし

Page 77: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 77Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグ画面での[ETMトレース設定]

M3 / M4

※デフォルト設定で動作可能

設定項目の詳細は[ヘルプ]→[Embedded Workbench デバッグガイド]を参照

Page 78: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 78Copyright(C)2014 IAR SYSTEMS, All rights reserved.

ETMトレース用のブレークポイント設定

M3 / M4

トレース取得を開始したいコード上で右クリックし、[ブレークポイントの切り替え(トレース開始)]を指定

トレースを停止したいコード上で[ブレークポイントの切り替え(トレース停止)]を指定※ブレークしたときに、トレースデータがICEから読み出され画面に表示される

Page 79: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 79Copyright(C)2014 IAR SYSTEMS, All rights reserved.

ETMトレース機能:[ETMトレース]

M3 / M4

[ETMトレース]

実行されたコードを表示

Page 80: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 80Copyright(C)2014 IAR SYSTEMS, All rights reserved.

ETMトレース機能:[ETM関数トレース]

M3 / M4

[ETM関数トレース]

ETMトレースで取得したデータを関数遷移で表示

Page 81: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 81Copyright(C)2014 IAR SYSTEMS, All rights reserved.

ETMトレース機能:[コードカバレッジ]

M3 / M4

[逆アセンブリ]→[コードカバレッジ]

ETMトレースで通過したアドレスに◆を付ける。

Page 82: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 82Copyright(C)2014 IAR SYSTEMS, All rights reserved.

ETMトレース機能:[タイムライン]→[コールスタック]

M3 / M4

[タイムライン]

Page 83: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• デバッグウィンドウ

Page 84: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 84Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:ブレークポイント

M0 / M0+ M3 / M4

■こんなときに・・・

• ブレークポイントの⼀覧が⾒たい

• ブレークポイントを貼っているソースコードに⾶びたい

• ⼀時的にブレークポイントを全て無効にしてデバッグしたい。

• ブレークポイントを削除したい

• ブレークポイントを編集したい

など

Page 85: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 85Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:逆アセンブリ

M0 / M0+ M3 / M4

■こんなときに・・・

• アセンブラレベルでステップ実⾏したい

• 実⾏中のアドレスを⾒たい

• ライブラリなど、ソースファイルのないプログラムをデバッグしたい。

• 最適化の影響を確認したい

など

Page 86: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 86Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:メモリ

M0 / M0+ M3 / M4

■こんなときに・・・

• 現在のメモリの値を⾒たい

• メモリをPC上の保存したい

• メモリ上でデータを検索したい

など

Page 87: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 87Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:シンボルメモリ

M0 / M0+ M3 / M4

■こんなときに・・・

• アドレス順に変数や関数の⼀覧を⾒たい。

など

Page 88: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 88Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:レジスタ

M0 / M0+ M3 / M4

■こんなときに・・・

• 現在の各種レジスタの値が⾒たい

• デバッグ⽤にレジスタの値を変えてみたい

など

Page 89: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 89Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:ウォッチ

M0 / M0+ M3 / M4

■こんなときに・・・

• 特定の静的変数やグローバル変数の値をモニタリングしたい

• ローカル変数の値をスコープ内でモニタリングしたい

など

Page 90: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 90Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:ローカル

M0 / M0+ M3 / M4

■こんなときに・・・

• 関数内のローカル変数や引数を⾃動的にモニタリングしたい

など

Page 91: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 91Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:静的変数

M0 / M0+ M3 / M4

■こんなときに・・・

• プログラム内の静的変数やグローバル変数を⾃動的にモニタリングしたい

など

Page 92: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 92Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:自動(オート)

M0 / M0+ M3 / M4

■こんなときに・・・

• ステップ実⾏でデバッグをしているときに近辺の変数や関数情報を⾃動的にモニタリングしたい

など

Page 93: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 93Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:ライブウォッチ

M0 / M0+ M3 / M4

■こんなときに・・・

• 特定の静的変数やグローバル変数を、プログラム実⾏状態のまま定期的にモニタリングしたい

など

Page 94: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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 マクロの使⽤]を参照

Page 95: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 95Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:呼び出しスタック

M0 / M0+ M3 / M4

■こんなときに・・・

• 実⾏中の関数の呼び出し元を知りたい

• 各関数の引数も⾒たい

など

Page 96: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 96Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:スタック

M0 / M0+ M3 / M4

■こんなときに・・・

• 現在のスタック使⽤状況を⾒たい

• 現在のスタック使⽤率を⾒たい

• それまでの最⼤スタック使⽤量を知りたい

など

*補⾜• OSを搭載している場合、OS側で各タスクの

スタックを管理するので、別途プラグインなどを活⽤してスタック管理

Page 97: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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などに変更可能

Page 98: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 98Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグウィンドウ:イメージ

M0 / M0+ M3 / M4

■こんなときに・・・

• 現在のイメージ(デバッグ情報)を確認したい

など

*補⾜• ブートローダプロジェクトなどで複数バイナ

リをデバッグするとき以外は出番なし

Page 99: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• シミュレータ機能

Page 100: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 100Copyright(C)2014 IAR SYSTEMS, All rights reserved.

シミュレータの設定

M0 / M0+ M3 / M4

[設定]→[ドライバ]を[シミュレータ]を選択

Page 101: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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.メモリ

Page 102: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 102Copyright(C)2014 IAR SYSTEMS, All rights reserved.

割込みシミュレーション

M0 / M0+ M3 / M4

⑤必要な項目を設定して下さい。

ここでは、3の割込みシミュレーションの用い方を説明しますシミュレータ動作時に、①シミュレータ→②割込み設定割込み設定画面で、③割込みシミュレーションを有効にするをONに

④新規作成を押す

割込みの編集画面になるので、⑤初回の割込みを起こしたいサイクル、周期などを設定してください。あとは通常の手順でシミュレーションを実施ください。

Page 103: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 103Copyright(C)2014 IAR SYSTEMS, All rights reserved.

シミュレーションによる再現性

M0 / M0+ M3 / M4

CPUコア単体でのシミュレーションとなります。

EWARM_DebuggingGuide.JPN.pdfに「C-SPY シミュレー

タは、ターゲットプロセッサの機能をソフトウェアで完全にシミュレーションするため、ハードウェアがすべて揃っていなくてもプログラムロジックをデバッグできます。」と記載があるように、シミュレータは実機がない場合などに多く用いられており、実機がある場合には実機を用いてのソフト開発が適しています。

Page 104: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• EWARMの 適化

Page 105: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 105Copyright(C)2014 IAR SYSTEMS, All rights reserved.

適化

適化の設定

M0 / M0+ M3 / M4

Page 106: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 106Copyright(C)2014 IAR SYSTEMS, All rights reserved.

• なし

• 低 *1• 中

• 高(バランス) *2• 高(速度)

• 高(サイズ)

*1 ビルド構成がDebugの場合の初期値

*2 ビルド構成がReleaseの場合の初期値

※ デバッグ時は、「なし」か「低」に設定してください。

適化

適化レベル

M0 / M0+ M3 / M4

Page 107: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 107Copyright(C)2014 IAR SYSTEMS, All rights reserved.

• 変数の位置情報•変数のスコープおよび存在情報

• ステップポイント•ステップ実⾏時のソースコードと機械語の対応•関数のステップイン/アウト•ブレークポイントの設置

• コールスタック情報•関数を特定する情報およびコールスタック内での変数情報

適化

最適化とデバッグ⽤の情報保持

M0 / M0+ M3 / M4

最適化レベル 変数の位置情報 ステップポイント コールスタック情報なし 保持 保持 保持低 ほぼ保持 保持 保持中 保持されない 保持 保持⾼ 保持されない 保持されない 保持

Page 108: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 108Copyright(C)2014 IAR SYSTEMS, All rights reserved.

• プロジェクト全体• ソースグループ単位• ソースコード単位• 関数単位

適化

最適化の適⽤範囲

M0 / M0+ M3 / M4

プロジェクト全体

ソースグループ単位

ソースコード単位

関数単位

Page 109: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 109Copyright(C)2014 IAR SYSTEMS, All rights reserved.

• プロジェクト全体• ソースグループ単位• ソースコード単位• 関数単位

適化

最適化の適⽤範囲

M0 / M0+ M3 / M4

ダブルクリック

グループまたはソースコード個別に上書きする際には[継承した設定をオーバーライド]にチェック

Page 110: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 110Copyright(C)2014 IAR SYSTEMS, All rights reserved.

• プロジェクト全体• ソースグループ単位• ソースコード単位• 関数単位

適化

最適化の適⽤範囲

M0 / M0+ M3 / M4

関数単位

#pragma optimize の直下に記述された関数のみ適用される。

ファイルソースに適用されている 適化レベルを下げる方向にのみ指定可能。※ファイルの 適化レベルが[中]のコードに対して

#pragma optimize= high は適用できない。

Page 111: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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 を計算する関数を作成し、評価式とリターン値で結果を使用する。

Page 112: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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;

Page 113: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 113Copyright(C)2014 IAR SYSTEMS, All rights reserved.

適化の手法は、効果が一定の効果が保証されるものではなくコンパイラによって発見的、探索的に適用されます。

適化

適化の考え方

M0 / M0+ M3 / M4

デバッグのしやすさ、メンテナンスのしやすさを考慮し、サイズの削減が必要なコード、処理速度の追求が必要なコードごとに、適用範囲(ソースファイル/グループ)を限定して、高い 適化レベルを適用することを推奨いたします。

各適用モジュール毎に単体テストを行い、効果的な 適化オプションを試行してください。

適化の考え方

Page 114: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• EWARMの便利な開発テクニック

Page 115: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 115Copyright(C)2014 IAR SYSTEMS, All rights reserved.

RAM上での関数実行

__ramfunc キーワードを関数の前に追加するだけ

M0 / M0+ M3 / M4

__ramfunc void foo(void);

注意:main関数開始前には使用できません

Page 116: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 116Copyright(C)2014 IAR SYSTEMS, All rights reserved.

デバッグ開始と同時にプログラムをスタート

[デバッガ]→[Run to]に__exitを指定するだけ

M0 / M0+ M3 / M4

Page 117: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• EWARMの速度性能評価手順

Page 118: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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イベント)の利⽤

Page 119: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 119Copyright(C)2014 IAR SYSTEMS, All rights reserved.

1.プロジェクトのビルド設定

1.適切なCPUの選択

M0 / M0+ M3 / M4

Page 120: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 120Copyright(C)2014 IAR SYSTEMS, All rights reserved.

1.プロジェクトのビルド設定

2.コンパイラオプション設定

M0 / M0+ M3 / M4

最適化レベル[⾼]のときのみ[速度][サイズ][バランス]の選択が可能

[ 適化]

Page 121: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 121Copyright(C)2014 IAR SYSTEMS, All rights reserved.

1.プロジェクトのビルド設定

2.コンパイラオプション設定

M0 / M0+ M3 / M4

[複数ファイルのコンパイル] C C C

Cまとめてコンパイルすることで最適化の効率上昇

※デバッグは困難になる

Page 122: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 122Copyright(C)2014 IAR SYSTEMS, All rights reserved.

1.プロジェクトのビルド設定

3.リンカ設定

M0 / M0+ M3 / M4

[ 適化]

Page 123: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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 にコピーする)を参照

Page 124: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 124Copyright(C)2014 IAR SYSTEMS, All rights reserved.

1.プロジェクトのビルド設定

3.リンカ設定

M0 / M0+ M3 / M4

[リスト]

ビルド時にmapファイルが同時⽣成される

Page 125: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 125Copyright(C)2014 IAR SYSTEMS, All rights reserved.

1.プロジェクトのビルド設定

4.デバッガ設定

M0 / M0+ M3 / M4

[J-Link/J-Trace]→[設定]

CPUクロックを実際のクロックと合わせる

Page 126: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 126Copyright(C)2014 IAR SYSTEMS, All rights reserved.

1.プロジェクトのビルド設定

4.デバッガ設定

M0 / M0+ M3 / M4

[J-Link/J-Trace]→[SWD]

インタフェースでSWDを選択(ITMイベント⽤)

Page 127: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 127Copyright(C)2014 IAR SYSTEMS, All rights reserved.

2.ソースコード上の設定

1.CPUクロックの設定

M0 / M0+ M3 / M4

測定対象箇所の前でPLLの設定やプリスケーラの設定などを搭載しているクロックに合わせて⾏う。

※実際のコードやサンプルプロジェクトやデータシートを参照

Page 128: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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);

Page 129: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 129Copyright(C)2014 IAR SYSTEMS, All rights reserved.

2.ソースコード上の設定

3.RAM関数化

M0 / M0+ M3 / M4

__ramfuncを対象の関数の前に設定リンカ設定で[コードをRAMに展開]を適⽤している場合は効果なし。

Page 130: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 130Copyright(C)2014 IAR SYSTEMS, All rights reserved.

3.ビルド結果の評価

1.mapファイルからの情報

M0 / M0+ M3 / M4

Outoutフォルダのプロジェクト名.mapファイルをダブルクリック

Page 131: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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上にコードをコピーして実⾏するときのみ出現

Page 132: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 132Copyright(C)2014 IAR SYSTEMS, All rights reserved.

3.ビルド結果の評価

1.mapファイルからの情報

M0 / M0+ M3 / M4

最⼤スタック使⽤サイズの静的解析情報

確保する必要があるスタックサイズ

Page 133: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 133Copyright(C)2014 IAR SYSTEMS, All rights reserved.

4.処理時間の測定

1. SWOトレース(ITMイベント)の利⽤

M3 / M4

デバッグウィンドウを開く

Page 134: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 134Copyright(C)2014 IAR SYSTEMS, All rights reserved.

4.処理時間の測定

1. SWOトレース(ITMイベント)の利⽤

M3 / M4

イベントのペイン上で右クリック

Page 135: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com 135Copyright(C)2014 IAR SYSTEMS, All rights reserved.

4.処理時間の測定

1. SWOトレース(ITMイベント)の利⽤

M3 / M4

ITM_EVENT8_WITH_PCの経過時間が表⽰される

イベントの上でマウスオーバー

Page 136: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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とする※⼤きいほうが速い

Page 137: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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化が有効※有効な設定はプロジェクトによって異なる

Page 138: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

www.iar.com

EWARM付録情報

• EWARM関連情報URL

Page 139: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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]

Page 140: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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」

Page 141: EWARM付録情報・C++ の使用 ・アプリケーションに関する考慮事項 ・組込みアプリケーション用の効率的なコーディ ング パート2. リファレンス情報

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