134
IAR システムズ株式会社 改訂日:Oct. 1 st , 2015 IAR Embedded Workbench for ARMのTIPS集 V1.00.2

IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

IAR システムズ株式会社

改訂日:Oct. 1st, 2015

IAR Embedded Workbench for ARMのTIPS集 V1.00.2

Page 2: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

はじめに本資料の位置づけと読み方

【位置づけ】

IAR Embedded Workbench for ARMのマニュアルの補足説明資料です。

【読み方】

TIPSには5ケタまたは6ケタのIDが振られています。

資料更新があってもIDの上位5ケタは固定です。

バージョンアップなどにより内容が変わる場合には6ケタ目に差分を示します。

2

中項目 大項目 Version差ID

(option) 小項目番号

Page 3: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

TIPSの概略構成

B. 基本設定/一般オプション/マニュアル資料

C. C/C++コンパイラ

D. デバッグ/ICE

E. リンカ

F. アプリケーション

G. アセンブラ

H. 補助ツール

I. 他ツール連携

J. Windowsなどとの関係

K. C-STAT/C-RUNなど

L. マイコン/CPU

3

Page 4: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

目次

• はじめに本資料の位置づけと読み方 2 • TIPSの概略構成 3 • BA-001 : マニュアルの参照方法 10 • BA-002a: メニューからマニュアルを開く 11 • BA-003 : IAR Embedded Workbench for ARM上でヘルプ 12 • BA-004a: インフォメーションセンターからマニュアルを開く 13 • BA-005 : IAR Embedded Workbench for ARMのマニュアルの基本構成 14 • BA-006a: IDE プロジェクト管理およびビルドガイド章目次 16 • BA-007a: IAR C/C++ 開発ガイド章目次 17 • BA-008a: C-SPYデバッガガイド章目次 18 • BA-009a: IAR Embedded Workbench for ARMのオプション設定概要 19 • BA-010a: ツールオプション概要 20 • BA-011a: プロジェクトオプション概要 21 • BA-012 : ビルド時の生成ファイル 22 • BA-013 : 行番号を表示したい 28

4

Page 5: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

目次

• CA-001: 最適化設定画面 30

• CA-002: 最適化レベルとデバッグ情報の保持 31

• CA-003: 最適化の適用範囲と個別設定 33

• CA-004: 最適化手法について 36

• CA-005: 最適化の考え方 40

• CA-006: インクルードパスを指定するには? 41

• CB-001: RAM上への関数配置 43

• CB-002: 変数や関数が最終的になくなってしまう 44

• CB-003: 構造体のパッキングを変更するには? 45

• CB-004: セクションのアドレスをプログラムで使用するには 46

• CB-005: IAR Embedded Workbench for ARMのenum型の大きさは? 47

• CB-006: charの符号は? 48

• CB-007: 割込みハンドラを記述するには? 49

• DA-001: CoreSight テクノロジ機能・接続まとめ 52

• DA-002: CoreSight テクノロジトレースタイミング 53

• DA-003: デバッグに最小限必要なピン数は? 54

• DA-004: SWDとJTAGのデバッグ差はあるのか? 55

• DA-005: CoreSight テクノロジー 関連URL 56

• DA-006: デバッグインタフェースコネクタ I-jet 57

• DA-007: デバッグインタフェースコネクタ例 60

5

Page 6: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

目次

• DB-001: SWV機能の使用条件 61

• DB-002: SWV対応コネクタ 62

• DB-003: SWV機能使用時のプロジェクト設定 63

• DB-004: SWV(SWO)トレース 64

• DB-005: SWV(SWO)トレースでコードカバレッジ 66

• DB-006: SWV(SWO)機能 データログ 68

• DB-007: SWV(SWO)機能 データログ使用方法 69

• DB-008: SWV(SWO)機能 データログ一覧 71

• DB-009: SWV(SWO)機能 データログのタイムライン表示 72

• DB-010: 割込みログ 73

• DB-011: 割込みログ一覧 75

• DB-011: 割込みログ タイムライン表示 76

• DB-012: ITMイベント ログ 77

• DB-013: ITMイベント 一覧 78

• DB-013: ITMイベント タイムライン 79

• DC-001: トレース機能の使用条件 83

• DC-002: Cortex-M用ETMトレース対応コネクタ 84

• DC-003a: ETMトレース使用時のプロジェクト設定 85

• DC-004:ETMトレース表示 87

• DC-005: ETM関数トレース表示 88

• DC-006: コードカバレッジ:C言語 89

• DC-007: コードカバレッジ:アセンブラ 90

• DC-008:ETMトレース用のブレークポイント設定 91

• DC-009: ETMトレース タイムラインでコールスタック表示 92

6

Page 7: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

目次

• DD-001: デバッグウィンドウ:ブレークポイント 93

• DD-002: デバッグウィンドウ:逆アセンブリ 94

• DD-003: デバッグウィンドウ:メモリ 95

• DD-004: デバッグウィンドウ:シンボルメモリ 96

• DD-005: デバッグウィンドウ:レジスタ 97

• DD-006: デバッグウィンドウ:ウォッチ 98

• DD-007: デバッグウィンドウ:ローカル 99

• DD-008: デバッグウィンドウ:静的変数 100

• DD-009: デバッグウィンドウ:自動(オート) 101

• DD-010: デバッグウィンドウ:ライブウォッチ 102

• DD-011: デバッグウィンドウ:クイックウォッチ 103

• DD-012: デバッグウィンドウ:コールスタック 104

• DD-013: デバッグウィンドウ:スタック 105

• DD-014: デバッグウィンドウ:ターミナルI/O 107

• DD-015: デバッグウィンドウ:イメージ 108

• DE-001: シミュレータの設定 109

• DE-002: シミュレータの出来る事 110

• DE-003: 割込みシミュレーション 111

• DE-004:シミュレーションによる再現性 112

• DF-001: デバッグ開始と同時にプログラムをスタート 113

• DF-002:ソースコードデバッグが出来ない? 114

• DF-003:ローカル変数はデバッグ時に観測できる? 115

7

Page 8: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

目次

• EA-001:リンカ設定に関する資料は? 117

• EA-002:リンカ設定で変数/関数を必ず出力するには? 118

• EA-003:スタックサイズを変更するには? 119

• EA-004:静的なスタック解析を実施するには? 120

• EA-005:静的なスタック解析の補助情報を与える 121

• EA-006:領域の定義方法 124

• EA-007:未使用領域を特定のコードで埋めたい 125

• EA-008:ファイルごとにコードセクションを定義したい 126

• EA-009:変数をC言語で記述した順序で配置したい 127

• EA-010:リンカマップを出力するには? 128

• EA-011:ライブラリを組込むとコードサイズが大きい?! 129

• EA-012:チェックサムの実装法がわからない 130

• LA-001:ARMの命令セット 132

• LA-002:IAR Embedded Workbench for ARMでCPUコアの選択と命令の選択 133

• LA-003:IAR Embedded Workbench for ARMのスタートアップシーケンス 134

8

Page 9: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

B.基本設定/一般オプション/ マニュアル資料

9

Page 10: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-001: マニュアルの参照方法

• IAR Embedded Workbench for ARMはPDFのマニュアルとオンラインマニュアルがあります

•PDFのマニュアルに関しては、 BA-002、BA-004をご確認ください

•オンラインマニュアルに関しては、 BA-003をご確認ください

10

Page 11: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-002a: メニューからマニュアルを開く

• ソフトウェア構成とマニュアルの関係

11 *IAR Embedded Workbench for ARM 7.40.3での情報

IAR Embedded Workbench for ARM

IDEツール

エディタ

プロジェクト

マネージャ

ライブラリ

ビルダ

ライブラリアン

ビルドツール

IAR C/C++

コンパイラ

アセンブラ

リンカ

IAR C-SPY

デバッガ

シミュレータ

ハードウェア

システムドライバ

Powerデバッグ

RTOSプラグイン

I-jet JTAGjet-trace

静的解析ツール C-STAT

Page 12: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-003: IAR Embedded Workbench for ARM上でヘルプ

• IAR Embedded Workbench for ARM画面上でF1キーを押すことで、ヘルプが表示。

12

たとえば、ここでF1キーを押す

Page 13: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-004a: インフォメーションセンターからマニュアルを開く

• IAR Embedded Workbench for ARMのメニュから [ヘルプ]→[インフォメーションセンタ]

• ユーザガイドを選択

13

*IAR Embedded Workbench for ARM 7.40.3の情報

Page 14: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成

• 推奨するマニュアル参照順序

14

IAR Embedded Workbenchの使用開始の手順

IDEユーザガイド

C/C++コンパイラリファレンスガイド

C-SPYデバッガガイド

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

ILINK設定ガイド ※IAR日本法人作成ガイド

http://www.iar.com/jp/ilink-setting-guide/

IAR Embedded Workbench for ARM

全体概要の把握

アプリ操作 プロジェクト設定

コンパイラ設定 リンカ設定

リンカ設定実践

デバッグ設定 デバッグ手法

ICEのスペック 取り扱い方法

開発フェーズ

Page 15: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成

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

15

Part.1

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

Part.2

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

教科書的的な説明

辞書的な説明

Page 16: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-006a: IDE プロジェクト管理およびビルドガイド章目次

パート1.

プロジェクト管理とビルド

• 開発環境

• プロジェクト管理

• プロジェクトのビルド

• 編集

パート2.

リファレンス情報

• インストールファイル

• メニューリファレンス

• 一般オプション

• C-STAT オプション

• コンパイラオプション

• アセンブラオプション

• 出力コンバータオプション

• カスタムビルドオプション

• ビルドアクションオプション

• リンカオプション

• ライブラリビルダオプション

16

*IAR Embedded Workbench for ARM 7.40.3の情報

Page 17: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-007a: IAR C/C++ 開発ガイド章目次

パート1.

ビルドツールの使用

• IAR ビルドツールの概要 • 組込みアプリケーションの開発 • データ記憶 • 関数 • ILINK を使用したリンク • アプリケーションのリンク • DLIB ランタイムライブラリ • アセンブラ言語インタフェース • C の使用 • C++ の使用 • アプリケーションに関する考慮事項 • 組込みアプリケーション用の効率的な

コーディング

パート2.

リファレンス情報

• 外部インタフェースの詳細 • コンパイラオプション • リンカオプション • データ表現 • 拡張キーワード • プラグマディレクティブ • 組込み関数 • プリプロセッサ • ライブラリ関数 • リンカ設定ファイル • セクションリファレンス • スタック使用制御ファイル • IAR ユーティリティ • C 規格の処理系定義の動作 • C89 の処理系定義の動作

17

*IAR Embedded Workbench for ARM 7.40.3の情報

Page 18: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-008a: C-SPYデバッガガイド章目次

パート1. 基本デバッグ • IAR C-SPY デバッガ • C-SPY を使用するにあたって • アプリケーションの実行 • 変数と式 • ブレークポイント • メモリとレジスタ

パート2. アプリケーションの解析 • トレース • プロファイリング • コードカバレッジ • Power デバッグ • C-RUN ランタイムエラー解析

パート3. 高度なデバッグ • マルチコアデバッグ • 割込み • C-SPY マクロ • C-SPY コマンドラインユーティリティ --

cspybat • フラッシュローディング機構

パート4. 追加リファレンス情報 • [デバッガ]オプション • C-SPY ドライバについての追加情報

18

*IAR Embedded Workbench for ARM 7.40.3の情報

Page 19: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-009a: IAR Embedded Workbench for ARMの オプション設定概要

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

19

ツール関係全般オプション

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

*IAR Embedded Workbench for ARM 7.40.3の情報

Page 20: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-010a: ツールオプション概要

20

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

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

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

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

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

カスタマイズ

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

Page 21: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-011a: プロジェクトオプション概要

21

開発フロー

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

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

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

デバッグ用設定 ICE選択

書き込み設定

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

Page 22: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-012:ビルド時の生成ファイル

22

project1

└─Debug

├─Exe

│ project1.out

│ project1.srec

└─List

project1.map

Tutor.lst

Utilities.lst

tutor_library

└─Debug

└─Exe

tutor_library.a

生成ファイル 説明

.out 実行可能ファイル(Elf/Dwarf形式)

.a ライブラリファイル

.srec (, .hex, .sim)

Flashライター用などに変換されたファイル [プロジェクト]→[オプション]→[出力コンバータ]→ [追加出力ファイルを生成]にチェック

.map リンク後のマップファイル [プロジェクト]→[オプション]→[リンカ]→[リスト]→ [リンカマップファイルの表示]

.lst Cソースファイル毎の静的解析情報 [プロジェクト]→[オプション]→[C/C++コンパイラ]→ [リスト]→[リストファイルの出力]

Page 23: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-012:ビルド時の生成ファイル

• 実行可能ファイル(Elf/Dwarf形式) .outファイル

23

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

Page 24: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-012:ビルド時の生成ファイル

• ライブラリファイル .aファイル

24

ライブラリファイル

Page 25: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-012:ビルド時の生成ファイル

• モトローラ/インテル形式ファイル

25

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

S010000070726F6A656374312E73726563EC

S11300003804002019030000B3020000B30200000A

S1130010B3020000B3020000B302000000000000BD

S1130020000000000000000000000000B302000017

S1130030B302000000000000B3020000B30200009D

S113004038B52D2401201349486012490860022064

S1130050040024B20A2C0FDA24B2200000F00DF8B8

・・・

S1130280A142F8D110BD00BF2C0000004C000000BA

S11302B07047FEE7DDFFFFFF2C0000000800002070

S11302C000000000BBFEFFFF080000005800000013

S11302D0000000200000000000F009F8002801D010

S11302E0FFF7C0FF0020FFF7ADFF00F002F8012088

S11302F0704700F001B800000746384600F002F8E5

S1130300FBE7000080B5FFF751FF024A11001820F7

S1130310ABBEFBE726000200C046C046C046C0464E

S10F0320FFF7DAFFFFFFFFFFFFFFFFFF06

S9030319E0

Page 26: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-012:ビルド時の生成ファイル

26

.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

Page 27: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-012:ビルド時の生成ファイル

27

.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

Page 28: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

BA-013: 行番号を表示したい

• IAR Embedded Workbench for ARMのメニュー [ツール]-[オプション] でIDEオプションを開き、 [エディタ]-[行番号の表示]にチェックを入れることで 行番号が表示されます。

28

Page 29: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

C.コンパイラ

29

Page 30: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CA-001: 最適化設定画面

• 最適化の設定

30

Page 31: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CA-002: 最適化レベルとデバッグ情報の保持

• 最適化レベル •なし

•低 *1

•中

•高(バランス) *2

•高(速度)

•高(サイズ)

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

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

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

31

Page 32: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CA-002: 最適化レベルとデバッグ情報の保持

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

• ステップポイント •ステップ実行時のソースコードと機械語の対応

•関数のステップイン/アウト

•ブレークポイントの設置

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

32

最適化レベル 変数の位置情報 ステップポイント コールスタック情報

なし 保持 保持 保持

低 ほぼ保持 保持 保持

中 保持されない 保持 保持

高 保持されない 保持されない 保持

Page 33: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CA-003: 最適化の適用範囲と個別設定

• プロジェクト全体

• ソースグループ単位

• ソースコード単位

• 関数単位

33

プロジェクト全体

ソースグループ単位

ソースコード単位

関数単位

Page 34: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

• プロジェクト全体ではなく、ソースグループ単位やソースコード単位で最適化レベルを変更する場合には以下の設定を実施します。

CA-003: 最適化の適用範囲と個別設定

34

ダブルクリック

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

Page 35: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CA-003: 最適化の適用範囲と個別設定

• 関数単位で最適化レベルを設定するには#pragma optimizeを使用します。

35

関数単位

#pragma optimize の直下に記述された関数のみ 適用される。 ファイルソースに適用されている最適化レベルを 下げる方向にのみ指定可能。 ※ファイルの最適化レベルが[中]のコードに対して #pragma optimize= high は適用できない。

Page 36: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CA-004: 最適化手法について

次ページ以降で以下の手法について内容をご紹介

• 共通部分式除去

• ループ展開

• 関数インライン化

36

Page 37: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CA-004: 最適化手法について

37

最適化例1:共通部分式除去

if ( a - b * c / 150 % 12 == 5) do_something();

・・・

return(a - b * c / 150 + 5);

コンパイラは 、予め a - b * c / 150 を計算する関数を作成し、評価式とリターン値で結果を使用する。

入力ソースコード

t = a - b * c / 150 ;

if ( t % 12 == 5) do_something();

・・・

return(t + 5);

最適化イメージ

Page 38: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

最適化例2:ループ展開

CA-004: 最適化手法について

38

for ( i = 0; i < 3; i++)

{

j[i] = i;

}

j[0] = 0;

j[1] = 1;

j[2] = 2;

入力ソースコード

最適化イメージ

ループを展開することで、ループ処理のオーバーヘッドを削減

Page 39: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CA-004: 最適化手法について

39

関数インライン化

int foo(int a) {

return a+1;

}

int foo2( ) {

int i;

for (i=0; i<10; i++ ) {

dat[i]= foo(dat[i]);

}

}

入力ソースコード

int foo2( ) {

int i;

for (i=0; i<10; i++ ) {

dat[i]= dat[i]+1;

}

}

最適化イメージ

関数呼出fooをインラインで展開することで 関数呼出のオーバーヘッドを削減

Page 40: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CA-005: 最適化の考え方

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

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

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

40

Page 41: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CA-006: インクルードパスを指定するには?

• [C/C++コンパイラ]-[プリプロセッサ]で [追加インクルードディレクトリ]に指定をします。

41

Page 42: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

42

Page 43: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CB-001: RAM上への関数配置

• __ramfunc キーワードを関数の前に追加。

43

__ramfunc void foo(void);

注意: main関数開始前には使用できません。 初期化処理で変数の初期化が終わるまではその関数を呼び出すことができません。

Page 44: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CB-002: 変数や関数が最終的になくなってしまう

• IAR Embedded Workbench for ARMでは、明示的に参照されない変数や関数は最適化の設定によっても変わりますが、削除されることがあります。

• 絶対削除されたくない変数や関数には、以下の指定を利用できます。

• 拡張キーワード__root • #pragma required=xxxx

• リンカで同様のことをする場合にはEA-002をご覧ください。

44

int gc5;

#pragma required=gc5

__root int gc6;

Page 45: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CB-003: 構造体のパッキングを変更するには?

• C記述で#pragma packが使えます

45

#pragma

pack(2)

struct {

char a0;

int a1;

short a2;

int a3;

char a4;

int a5;

short a6;

int a7;

}ST_B;

#pragma pack(1)

struct {

char a0;

int a1;

short a2;

int a3;

char a4;

int a5;

short a6;

int a7;

}ST_C;

*詳しくは C/C++開発ガイドの プラグマディレクティブを ご確認ください

Page 46: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CB-004: セクションのアドレスをプログラムで使用するには

• IAR Embedded Workbench for ARMでは__section_beginや__section_endでセクションの開示及び終了アドレスの取得,__section_sizeで大きさを取得できます。

46

#pragma section = "MYSECTION"

#pragma section = "MYSECTION_init"

void DoInit()

{

char * from = __section_begin("MYSECTION_init");

char * to = __section_begin("MYSECTION");

memcpy(to, from, __section_size("MYSECTION"));

}

Page 47: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CB-005: IAR Embedded Workbench for ARMのenum型の大きさは?

• C/C++ 開発ガイドに記載があります。

• また、処理系定義の動作の詳細にて、

47

コンパイラでは、enum 定数の保持に必要な最小の型を使用し、unsigned よりもsigned を優先します。 IAR システムズの言語拡張が有効化されている場合や、C++ においては、enum 定数および型をlong、unsigned long、long long、unsigned longlong 型にすることも可能です。

列挙型を表すときに使用される整数型 (6.7.2.2) 特定の列挙型用に選択される整数型は、列挙型用に定義された列挙定数によって異なります。最小の整数型が選択されます。

例としては、enum Cards{Spade1, Spade2};では1バイトとなります。 2バイトにしたい場合には、enum Cards{Spade1, Spade2,DontUseChar=257};とします。 もしくは、--enum_is_intでint型のサイズとすることが出来ます。

Page 48: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CB-006: charの符号は?

• IAR Embedded Workbench for ARMではオプションで 整数型charを変更することが出来ます。

48

Page 49: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

CB-007: 割込みハンドラを記述するには?

• Cortex-Mの場合 •特別なキーワードは不要です。ベクタテーブルに対応する関数名を記述します。

• ARM7,9,11,Cortex-R/A(Cortex-M以外)の場合 •__irqキーワードを記述し、ベクタテーブルに対応する関数名を記述します。

49

void SysTick_Handler (void)

{

/* Something to do */

}

__irq __arm void IRQ_Handler(void)

{

/* Something to do */

}

Page 50: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

50

Page 51: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

D.デバッグ/ICE

51

Page 52: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DA-001: CoreSightテクノロジ機能・接続まとめ

52

名称 接続 ICE 基本機能 特徴

JTAG

I-jet I-jet-trace J-Link JTAGjet

○ ・バウンダリスキャン ・printfデバッグ

SWD

I-jet I-jet-trace J-Link JTAGjet

○ ・必要信号数:2本 ・SWV使用可能 ・printfデバッグ

TMS TCK TDO TDI

nRESET

SWDIO SWDCLK SWO - -

TMS TCK TDO TDI

nRESET

SWDIO SWDCLK SWO - -

名称 接続 ICE トレース方式

特徴

SWV

I-jet I-jet-trace J-Link JTAGjet

サンプリング

・パソコンにリアルタイム転送 ・PC(プログラムカウンタ)取得 ・特定データのサンプリング ・例外処理のトレース ・(高速)prinfデバッグ ・ピン数:1 ・データ欠落可能性→大

ETM

JTAGjet-Trace I—jet-trace J-Trace

分岐トレース

(実行)

・ICEのメモリに保存 →ブレーク時にパソコンに転送 ・実行履歴を確実に追跡 ・対応しているかはCPU依存 ・タイムスタンプは誤差あり ・データ欠落可能性→小 ※データ線の本数に依存する

TMS TCK TDO TDI

nRESET

SWDIO SWDCLK SWO - -

CLK D0 D1 D2 D3

デバッグ制御

トレース機能 *M3/M4のみ

Serial Wire Debug

Serial Wire Viewer

Serial Wire Output

1,2,4本 から選択 *JTAG-Traceは4本(4bit)固定

Embedded Trace Macrocell

Page 53: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DA-002: CoreSightテクノロジトレースタイミング

53

main()

sub_1()

sub_2()

main()

sub_1()

sub_2()

SWVトレース

ETMトレース

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

一定間隔でサンプリング

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

Page 54: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DA-003:デバッグに最小限必要なピン数は?

• デバイスがSWDに対応していれば、3もしくは4本。 SWDデバッグで、最低限必要なピン数は3本(I/O、クロック、グラウンド)、もしくはこれにリセットを加えた4本。リセット機能は必須機能ではないため、最低ということであれば3本。

• グラウンドの本数が少ないと信号が弱くなったりノイズがのるリスクあります。(JTAGだと通常5本程度使用)一般的には おそらくグラウンドは1本でも開発可能ですが、この精度は、基板やICEの品質にも関わってくるためユーザー様にて確認の必要があります。

• SWDは、一般的にCortex-A,R,Mに対応していますが、 デバッガとデバイスが共にSWDに対応していることが条件となります。

54

Page 55: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DA-004: SWDとJTAGのデバッグ差はあるのか?

Q. SWDを使用すると信号線が減るが、クロック差やスピード差はあるか? SWDやJTAGと比べて信号線が減りますが、実際にはCPUとの通信以外の制御部分が処理の大半を占めるため、デバッガの動作速度の低下を体感することはありません。

Q. JTAGとSWDを比べて、できることできないことは?

[JTAGでできてSWDできないこと] JTAG本来の機能である端子のバウンダリスキャンテスト [SWDでできてJTAGでできないこと] トレース機能であるSWVトレース [その他SWDのメリット] デバッグ用の端子数の減少( 5線式 ⇒ 2線式 ) 上記に伴うコネクタ実装面積の削減が可能

55

Page 56: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DA-005: CoreSight テクノロジー 関連URL

• ARM社Websiteの解説

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

56

Page 57: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DA-006:デバッグインタフェースコネクタ I-jet

57

標準対応(ケーブル付) 11pin, 13pinから5V供給可能

ハーフピッチ20ピンコネクタ:MIPI-20

Page 58: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DA-006:デバッグインタフェースコネクタ I-jet

58

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

標準対応(ケーブル付) ピン配置はハーフピッチ19ピンコネクタの1~10番と同じ

Page 59: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DA-006:デバッグインタフェースコネクタ I-jet

59

標準ピッチ20ピン変換アダプタ:ARM-20(JTAG,SWD/SWV用)

アダプタ標準添付 19pinから5V供給可能

Page 60: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DA-007:デバッグインタフェースコネクタ例

60

コネクタ種類 コネクタ例

ハーフピッチ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:09185206803 Molex:90635-1202 Tyco Electronics:2-215882-0

Page 61: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-001: SWV機能の使用条件

• MCUの対応 • Cortex-M3/M4

• SWVトレース対応エミュレータ(ICE) • I-jet / I-jet Lite / SEGGER社 J-Linkが対応

• コネクタの対応 • SWOピンの接続に対応したコネクタが必要

• 接続方式 • SWD接続を選択

• レジスタ設定によるSWOポートピンの有効化 • MCUによってはSWOポートピンが多重化されて他の機能に割り当てられていることがあるため、FWまたはマクロで有効化する必要がある

61

Page 62: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-002: SWV対応コネクタ

• SWV機能はSWOピンを使用します

62

MIPI-20 MIPI-10

Page 63: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-003: SWV機能使用時のプロジェクト設定

63

[設定]→[ドライバ]を[I-jet/JTAGjet]を選択

[I-jet/JTAGjet] → [JTAG/SWD]で インタフェースに[SWD]を選択 ※ [一般オプション]→ライブラリ設定

stdout/stderrがSWO経由になっていると強制的にSWDが選択される

Page 64: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-004: SWV(SWO)トレース

64

■こんなときに・・・

• コードの流れをバックトレースしたい • コード実行時のタイムスタンプを見たい など

*補足 SWVトレースは1秒間に数千サンプリング程度なので、実行コード全てを追うことできない。

Page 65: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-004: SWV(SWO)トレース

65

使用方法

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

2. SWOトレース

4. デバッグ開始

3. 右クリックして[有効] PCSampleがSWOトレースになります

Page 66: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-005: SWV(SWO)トレースでコードカバレッジ

66

■こんなときに・・・

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

など

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

ドカバレッジ」プラグインの機能を使用

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

赤色のひし形 モジュールや関数の0% が実行されたことを示します。 緑色のひし形 モジュールや関数の100% が実行されたことを示します。 赤と緑のひし形 モジュールや関数の一部が実行されたことを示します。 黄色のひし形 文が1つも実行されていないことを示します。

Page 67: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-005: SWV(SWO)トレースでコードカバレッジ

67

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

1.コードカバレッジ

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

3.デバッグ実行

4.[更新]

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

使用方法

Page 68: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

68

■こんなときに・・・

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

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

など

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

可能

メニューから[I-jet/JTAGjet]-[データログ]

Page 69: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-007: SWV(SWO)機能 データログ使用方法

69

1.グローバルや静的変数上で右クリック

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

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

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

(基本)観測したい変数をデータブレークポイントに設定します。

(Option)Read時のみ観測やWrite時のみ観測したい場合には以下の設定を実施ください

Page 70: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-007: SWV(SWO)機能 データログ使用方法

70

1.データログ

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

3.デバッグ開始

Page 71: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-008: SWV(SWO)機能 データログ一覧

71

■こんなときに・・・

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

など

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

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

メニューから[I-jet/JTAGjet]-[データログ一覧]

Page 72: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-009: SWV(SWO)機能 データログの タイムライン表示

72

■こんなときに・・・

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

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

など

メニューより[I-jet/JTAG-jet]-[タイムライン] タイムラインのデータログ領域を右クリックし、有効化を選択。

Page 73: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-010: 割込みログ

73

■こんなときに・・・

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

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

など

*ハンドラの実行時間が短い場合には“入る”と“抜ける”が対応取れないことがあります。 *SWOの制約を受けますので、すべての情報が取得できない場合があります。

メニューから[I-jet/JTAGjet]-[割込みログ]

Page 74: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-010: 割込みログ

74

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

3.デバッグ開始

Page 75: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-011: 割込みログ一覧

75

■こんなときに・・・

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

など

メニューから[I-jet/JTAGjet]-[割込みログ一覧]

Page 76: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-011: 割込みログ タイムライン表示

76

■こんなときに・・・

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

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

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

など

Page 77: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-012: ITMイベント ログ

77

■こんなときに・・・

• コードの実行タイミングを正確に知りたい

• 実行時の変数の値を見たい

• マルチタスクの各タスク入り口出口に仕掛けて、タスク状況を把握したい

など

*補足 • ソースコード上で

arm_itm.hをinclude ITM_EVENT8_WITH_PC(1,1) と記述

• チャンネルは1-4が使用可能

*参考URL http://supp.iar.com/Support/?note=26891

ITM_EVENT8(channel, value)

ITM_EVENT16(channel, value)

ITM_EVENT32(channel, value)

ITM_EVENT8_WITH_PC(channel, value)

ITM_EVENT16_WITH_PC(channel, value)

ITM_EVENT32_WITH_PC(channel, value)

使用できるAPI

Page 78: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-013: ITMイベント 一覧

78

■こんなときに・・・

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

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

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

など

Page 79: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-013: ITMイベント タイムライン

79

■こんなときに・・・

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

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

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

など

Page 80: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-013: ITMイベント タイムライン

80

1.arm_itm.hをインクルード

2.マクロをコードに記述

4.イベントログ

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

6.デバッグ開始 3.ビルド&ダウンロード

Page 81: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DB-013: ITMイベント タイムライン

81

1.タイムライン

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

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

4. デバッグ開始

Page 82: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

82

Page 83: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DC-001: トレース機能の使用条件

• MCUの対応 •ETM機能の実装はMCUベンダの選択による

•Trace Dataピン(1-4本)はMCUベンダの選択による

• トレース機能付きエミュレータ(ICE)を使用 • I-jet Trace, JTAGjet-Traceが対応

•SEGGER社J-Traceが対応

• コネクタの対応 •トレースピンの接続に対応したコネクタが必要

• レジスタ設定によるトレースポートピンの有効化 •MCUによってはトレースポートピンが多重化されて他の機能に割り当てられていることがあるため、FWまたはマクロで有効化する必要がある

83

Page 84: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DC-002: Cortex-M用ETMトレース対応コネクタ

• MIPI-20

84

ETMトレース用クロック

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

Page 85: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DC-003a: ETMトレース使用時のプロジェクト設定

85

[デバッガ]-[設定]

[I-jet / JTAGjet]-[Trace]

[設定]→[ドライバ]を[I-jet/JTAGjet]を選択

ETMを選択

*IAR Embedded Workbench for ARM 7.40.3での情報

Page 86: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DC-003a: ETMトレース使用時のプロジェクト設定

86

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

[I-jet/JTAGjet]-[ETMトレース設定]。 ETM Trace settingで、[設定を試す]をクリック。クロック周波数のトレースの値が設定されます。

Page 87: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DC-004:ETMトレース表示

87

[ETMトレース]

実行された命令を表示

Page 88: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DC-005: ETM関数トレース表示

88

[ETM関数トレース]

実行された関数を表示

Page 89: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DC-006: コードカバレッジ:C言語

89

Page 90: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DC-007: コードカバレッジ:アセンブラ

90

コードカバレッジ 命令プロファイリング

Page 91: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DC-008:ETMトレース用のブレークポイント設定

91

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

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

Page 92: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DC-009: ETMトレース タイムラインで コールスタック表示

92

Page 93: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

93

■こんなときに・・・

• ブレークポイントの一覧が見たい

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

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

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

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

など

Page 94: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

94

■こんなときに・・・

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

• 実行中のアドレスを見たい

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

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

など

Page 95: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

95

■こんなときに・・・

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

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

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

など

Page 96: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

96

■こんなときに・・・

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

など

Page 97: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

97

■こんなときに・・・

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

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

など

Page 98: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DD-006: デバッグウィンドウ:ウォッチ

98

■こんなときに・・・

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

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

など

Page 99: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

99

■こんなときに・・・

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

など

Page 100: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

100

■こんなときに・・・

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

など

Page 101: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

101

■こんなときに・・・

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

など

Page 102: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

102

■こんなときに・・・

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

など

更新間隔は、[ツール]-[オプション] [デバッグ]で更新間隔にて設定

Page 103: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DD-011: デバッグウィンドウ:クイックウォッチ

103

■こんなときに・・・

• 変数を簡単な式で評価したい Int_Glob> 1 など 真なら1

• 任意のタイミングでC-Spyマクロを実行したい

など

*補足 • C-Spyマクロは非常に強力かつ柔軟

[ヘルプ]→[Embedded Workbench デバッグガイド]の[C-SPY マクロの使用]を参照

Page 104: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DD-012: デバッグウィンドウ:コールスタック

104

■こんなときに・・・

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

• 各関数の引数も見たい

など

Page 105: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

105

■こんなときに・・・

• 現在のスタック使用状況を見たい

• 現在のスタック使用率を見たい

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

など

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

スタックを管理するので、別途プラグインなどを活用してスタックを確認ください

Page 106: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

• RTOSを未使用の場合には、動的スタック使用量の解析が使用できます。

• 有効にするには、[ツール]-[オプション] [スタック]-[グラフィカルスタックの表示・・・]をオンにします。

106

動的なスタック使用量の解析

動的な解析の表示

Page 107: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DD-014: デバッグウィンドウ:ターミナルI/O

107

■こんなときに・・・

• printfデバッグがしたい

• デバッグ用にパラメータなどをscanfでIAR Embedded Workbench for ARMの画面上から入力したい

など

*補足 • <stdio.h>をinclude

• コードサイズが大きくなってしまう場合は、

[プロジェクト]→[オプション]→[一般オプション]→[ライブラリオプション] から調整可能。

• printfはデフォルトだとターミナルIOに出力されるが、ユーザコードで実装することでUARTなどに変更可能

Page 108: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

108

■こんなときに・・・

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

など

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

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

Page 109: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DE-001: シミュレータの設定

109

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

Page 110: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DE-002: シミュレータの出来る事

110

3.割込みを 疑似発生

C-SPYシミュレータで出来ることは以下の通りとなります。 1. 命令レベルのシミュレーション 2. メモリの構成、検証 3. 割込みシミュレーション 4. イミディエイトブレークポイントとC-SPY マクロシステムを使用した周辺シミュレーション

1.CPUコア

4.C-SPYマクロ 周辺の模擬

デフォルトではCPUコア単体+メモリの状態でのシミュレーションが可能です。 周辺や割込みを使うシミュレーションは3または4に関してユーザ側で準備が必要となります。

2.メモリ

Page 111: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DE-003: 割込みシミュレーション

111

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

割込みシミュレーションの使用法を説明します シミュレータ動作時に、 ①シミュレータ→②割込み設定 割込み設定画面で、 ③割込みシミュレーションを有効にするをONに ④新規作成を押す 割込みの編集画面になるので、⑤初回の割込みを起こしたいサイクル、周期などを設定してください。あとは通常の手順でシミュレーションを実施ください。

Page 112: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DE-004:シミュレーションによる再現性

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

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

112

Page 113: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

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

• [デバッガ]-[設定]-[指定位置まで実行]に__exitを指定する

113

Page 114: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DF-002:ソースコードデバッグが出来ない?

114

Page 115: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

DF-003:ローカル変数はデバッグ時に観測できる?

• [ローカル]ウィンドウには、ローカル変数、つまりアクティブな関数の自動変数と関数パラメータを表示することが可能です。

• ただ、コンパイラの最適化により正しい値を表示できない場合や不明となる場合があります。

• デバッグ時にローカル変数を見るためには最適化を無し、もしくは、低に設定をしてください。

115

Page 116: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

E:リンカ

116

Page 117: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-001: リンカ設定に関する資料は?

• C/C++開発ガイドの“リンカ設定ファイル”を ご確認ください

• IARシステムズの日本法人が作成した簡易ガイドもご活用ください。以下のページからダウンロードください。

http://www.iar.com/jp/ilink-setting-guide/

117

Page 118: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-002: リンカ設定で変数/関数を必ず出力するには?

• IAR Embedded Workbench for ARMでは、明示的に参照されない変数や 関数は最適化の設定によっても変わりますが、削除されることがあります。

• 絶対削除されたくない変数や関数には、リンカで必ず出力する 指定をする事ができます。

• ソースコードで同様のことをする場合にはCB-002をご覧ください。

118

[リンカ]-[入力]-[シンボルをキープ]で 変数や関数名を登録します。

Page 119: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-003: スタックサイズを変更するには?

• IAR Embedded Workbench for ARMのデフォルトの 設定ではスタックサイズを以下のオプション画面で変更できます。

• [リンカ]-[設定]-[編集]、[スタック/ヒープサイズ]

119

Page 120: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-004: 静的なスタック解析を実施するには?

[リンカ]-[アドバンスド]-[スタックの使用量解析を有効にする]にチェックを入れ、メイクを実行するとマップファイルに解析結果が 出力される。

120

************************************************ *** STACK USAGE *** Call Graph Root Category Max Use Total Use ------------------------ ------- --------- interrupt 0 0 Program entry 352 352 Program entry "__iar_program_start": 0x00001a9b Maximum call chain 352 bytes "__iar_program_start" 0 "__cmain" 0 "main" 8 "printf" 24 "_PrintfFull" 168 "_LdtobFull" in xprintffull.o [3] 96 "_GenldFull" in xprintffull.o [3] 48 "__iar_unaligned___aeabi_memcpy" 0 "__iar_unaligned___aeabi_memcpy4" 8 interrupt "__default_handler" in vector_table_M.o [5]: 0x00000def Maximum call chain 0 bytes "__default_handler" in vector_table_M.o [5] 0

Page 121: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-005: 静的なスタック解析の補助情報を与える

• 静的なスタック解析では以下の2つ方法で解析の 補助情報を与えることができます。

• ソースコード上に#pragmaで補助情報を与える

• 制御ファイルで補助情報を与える

121

Page 122: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-005: 静的なスタック解析の補助情報を与える

• #pragma calls →関数が呼ばれることを明示的に指定

• #pragma call_graph_root → 解析のrootの指定

122

ソースコード上に#pragmaで補助情報を与える

void Fun1(), Fun2();

void Caller(void (*fp)(void))

{

#pragma calls = Fun1,

Fun2

(*fp)();

}

#pragma

call_graph_root="interrupt"

void My_Handler (void ) {

・・・

}

Page 123: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-005: 静的なスタック解析の補助情報を与える

123

制御ファイルで補助情報を与える

possible calls main: f1;

max recursion depth recf: 10;

call graph root [ interrupt ]:

SysTick_Handler,Default_Handler;

function gg1: 10, calls f1;

*詳細はC/C++開発ガイドをご覧ください

Page 124: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-006: 領域の定義方法

• section領域を定義する方法

124

#pragma location

="MYFUNC2"

int f1(int a ) { … }

#pragma location="DATA"

int bbb[]={0,1,2,3};

#pragma default_function_attributes =__root

@ "MYFUNC1"

int fun1(int x) {…}

int fun2(int x) { …}

#pragma default_function_attributes =

#pragma default_variable_attributes = __root

@ "MYSEG"

int var1 = 42;

int var2 = 17;

#pragma default_variable_attributes =

1つずつ指定する方法

範囲で指定する方法

Page 125: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-007: 未使用領域を特定のコードで埋めたい

[リンカ]-[チェックサム]にて、[未使用コードメモリをフィルする]にチェックを入れて、フィルパターンを設定し、対象領域の開始アドレスと終了アドレスを指定してください。

125

Page 126: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-008: ファイルごとにコードセクションを定義したい

• 個別オプションにてコードセクションを定義することも出来ます。

126

Page 127: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-009: 変数をC言語で記述した順序で配置したい

• IAR Embedded Workbench for ARMのリンカは、コード効率などの点から、適宜並び替えて配置するため、記述した順番での配置とはなりません。

• 順番を指定するための方法を以下に紹介します。

127

struct {

short a;

char b;

int

c;

char d;

}data;

short

a@0x20001000;

char b@0x20001002;

int c@0x20001003;

char d@0x20001007;

short a@”section1”;

char b@”section2”;

int c@”section3”;

char d@”section4”;

define block MYBLOCK with fixed

order

{

section section1, section

section2,

section section3, section

section4

}

1)構造体にまとめる 2) 絶対アドレスで配置する 3)セクションを指定し、リンカ設定でも指定

Page 128: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-010: リンカマップを出力するには?

• [リンカ]-[リスト]でリンカマップファイルの生成を選択ください。

• ビルドを行うと、ワークスペースのOutputフォルダ内に、マップファイルが表示され、ダブルクリックすることでエディタ画面で見ることができます。

128

Page 129: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-011:ライブラリを組込むとコードサイズが大きい?!

• C言語の標準ライブラリのなかでprintf系、scanf系のライブラリは比較的 大きなコードサイズとなります。そのためIAR Embedded Workbench for ARMではオプションで、使用するライブラリの大きさを指定することが出来ます。詳しは[C/C++ 開発ガイド]の、Printf フォーマッタの選択、Scanf フォーマッタの選択をご確認ください。

129

Page 130: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

EA-012:チェックサムの実装法がわからない

• 弊社ではプログラミング自体のサポートはしておりませんが、FAQに参考となるドキュメントがありますのでご活用ください。

http://www.iarsys.co.jp/customer/Faqs/faqListView/10810668

130

Page 131: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

L: マイコン/CPU関係

131

Page 132: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

LA-001: ARMの命令セット

132

• ARMの命令種類

命令セット ビット 特徴

ARM 32bit 32ビット命令セット *パフォーマンス高いがコード密度低い

Thumb 16bit 16ビット命令のサブセット *コード密度高いがパフォーマンスやや低い

ARMv6-M Thumb

16bit + 32bit 16ビット命令+Thumb2の32ビット命令を6個サポート。

ARMv7-M Thumb2

16bit + 32bit 16ビット+32ビット混在の命令セット。 *パフォーマンスおよびコード密度高い

• ARMファミリー毎の命令対応

名称 命令セット 特徴

ARM6 ARM

ARM7 ARM9 ARM11 ARM+Thumb 命令セットを使い分ける際にはCPUのモード切替が必要

Cortex-M0/M0+ ARMv6-M Thumb CPUモードを変えることなく必要に応じて32bit命令を使用可能

Cortex-M3/M4/M7 ARMv7-M Thumb2 CPUモードを変えることなく必要に応じて32bit命令を使用 ARMv6-M Thumbを大幅に拡張しており高い性能とコード効率を実現。

Page 133: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

LA-002: IAR Embedded Workbench for ARMでCPUコアの選択と命令の選択

• プロジェクトのオプション画面

133

コア/マイコン選択:一般オプション-ターゲット 命令:C/C++コンパイラ-コード

Page 134: IAR Embedded Workbench for ARMのTIPS集 V1.00 · BA-005:IAR Embedded Workbench for ARMの マニュアルの基本構成 • IAR Embedded Workbenchの標準的なマニュアル構成

LA-003: IAR Embedded Workbench for ARMの スタートアップシーケンス

134

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

__cmain:

bl __low_level_init ; low_level_init.c

bl __iar_data_init3 ; initialize data sections, init¥data_init3.c

bl main

int main (void) { …… }

void xxx_InterruptHandler (void) { …… }

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

main()前の初期化:

thumb¥cmain.s

User’s Application:

IAR DLIB ランライム ライブラリの コード ただし 上書き可能

ユーザコード

参照 ジャンプ