PowerPoint プレゼンテーション

Similar documents
PowerPoint プレゼンテーション

目次 EWARM のマニュアルガイド ARM の命令セット インストールファイルとドキュメント EWARM のオプション設定概要 ビルド時の生成ファイル スタートアップシーケンス Cortex の CoreSight デバッグコネクタ情報 SWV(SWO) 機能 ETM トレース機能 デバッグウィン

PowerPoint Presentation

PowerPoint プレゼンテーション

本ドキュメントについて 的 STM32(Cortex-M) マイコンには 性能なデバッグモジュール (CoreSight) が搭載されています 従来の printf デバッグとは 較にならないほど 効率の いデバッグを実現するための JTAG ICE(In Circuit Emulator) と 基

Cortex-Mコア対応エミュレータデバッグ制御インターフェースとトレース機能

インテル(R) Visual Fortran コンパイラ 10.0

IAR Embedded Workbench for ARM

Notes and Points for TMPR454 Flash memory

著作権および商標 この文書には が所有権を持つ機密事項が含まれます この資料のいかなる部分も許 可無く複製 使用 公開することを固く禁じます 本書は の従業員および許可された 取引先だけに使用が認められています 本書で提供されたデータは正確で信頼性の高いものですが このデータの使用について株式会社

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

PowerPoint Presentation

内容 1 はじめに 本ガイドの目的 本ガイドの対象者 対象製品 表記について リンカ設定ファイル例 ソースファイル例 名前の付け方 リンカオプションとリンカ設定ファ

Application Note Application Note No. ESC-APN Document No.: ESC-APN adviceluna Linux デバッグ手順 (MIPS コア編 ) はじめに adviceluna Linux デバッグ手順 ( 以

, 0 ピンコネクタ (JTAG 接続 ) ピン配列コネクタ型番 SAMTEC 製 SHF-1-01-L-D-TH 表 0 ピンコネクタ (JTAG 接続 ) ピン配列 コネクタピン番号 CPU 信号名 備考 1 VTRef IO 電源 TMS 3 GND 4 TCLK 5 GND 6 TDO 7

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

adviceシリーズスタートアップガイド(Cortex-M3編)

統合開発環境 High-performance Embedded Workshop V へのリビジョンアップのお知らせ

24th Embarcadero Developer Camp

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

adviceシリーズスタートアップガイド(ARM9編)

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

1. 新規プロジェクト作成の準備新規プロジェクトのためのフォルダを用意して そこにプロジェクトを作成します [ 新しいフォルダー ] をクリックして希望のフォルダに新しいフォルダを作成します この例では TrST_F401N_BlinkLD2 というフォルダを作成しました TrST_F401N_Bl

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

1. 概念 STM32F4 Discovery 基板は Mini USB を接続して デバッグやプログラムの書き込みができるようになっています 通常は CPU の 0x 番地からプログラムを実行します では なぜわざわざこのプロジェクトの雛形を使用して CPU の 0x

Maser - User Operation Manual

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

スライド 1

スライド 1

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

ターゲット項目の設定について

TRQerS - Introduction

TOPPERS 活用アイデア アプリケーション開発 コンテスト 部門 : 活用アイデア部門アプリケーション開発部門 作品のタイトル : Toppers_JSP と Scicos_lab / (Scilab でも可 ) による 組込みメカトロニクス制御シミュレーション 作成者 : 塩出武 ( シオデタ

MSP430 CCSv5 を使い Flash Memory 内容と version 情報を確認する方法 ( テクニック編 ) Rev: PIC Trout 今回は 下記の2 件について説明します 1) CCSv5 を使用して MSP430 の Flash Memory 内容を

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)

PCL6115-EV 取扱説明書

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

PowerPoint Presentation

Microsoft Word - XPC4ソフトマニュアル.doc

AquesTalk プログラミングガイド

自己紹介 湯浅陽一 1999 年より Linux kernel 開発に参加 MIPS アーキテクチャのいくつかの CPU へ Linux kernel を移植

第 7.0 版 利用履歴管理 ETCPRO5 セットアップマニュアル (Ver5.002) カードリーダモデル変更 ( 表示付き 表示なし ) に伴い 改訂 Windows10 対応に伴い 改訂 参考ホームページサイト :

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

ex05_2012.pptx

:30 18:00 9:30 12:00 13:00 17:00

AN1526 RX開発環境の使用方法(CS+、Renesas Flash Programmer)

S1C17 Family Application Note S1C17 シリーズ PORT 多重割り込みアプリケーションノート Rev.1.0

Microsoft Word - tool01.doc

スクールCOBOL2002

プログラミング基礎

MMUなしプロセッサ用Linuxの共有ライブラリ機構

本ドキュメントについて 的 ARM 統合開発環境である ARM IAR Embedded Workbench(EWARM) と ST マイクロエレクトニクス社 (ST 社 ) 提供のサンプルプロジェクト および設計 援ツールを使 して ST 社評価ボード のソフトウェアを実際にビルド デバッグする

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C

RL78開発環境移行ガイド RL78ファミリ間の移行 (コンパイラ編:コンパイラオプション・アセンブラオプション)(CA78K0R→CC-RL)

自己診断プログラム_基本設定

設定ソフト Ver1.0.5版 マニュアル

統合開発環境CubeSuite+ V へのバージョンアップのお知らせ

ReTRY HUB

intra-mart EX申請システム version.7.2 事前チェック

Page 2 ワークスペースはプロジェクト管理の最上位であり IAR Embedded Workbench を起動すると自動的にオープンします ワークスペースには複数のプロジェクトを登録することができるので ここではメインのアプリケーションとブートローダのプロジェクトを登録します このワークスペース

今週の進捗

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

フローチャート自動生成ツール yflowgen の使い方 目次 1 はじめに 本ツールの機能 yflowgen.exe の使い方 yflowgen.exe の実行方法 制限事項 生成したファイル (gml ファイル形式 ) の開

PowerPoint Presentation

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

開発環境構築ガイド

開発環境構築ガイド

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

統合開発環境CubeSuite+ V へのバージョンアップのお知らせ

Cコンパイラパッケージお知らせ

「RAD Studio XE5によるマルチ言語/マルチデバイス開発の進め方」

Nios II Flash Programmer ユーザ・ガイド

PowerPoint Presentation

基本設計書

スライド 1

4 本体の入力を USB-B 端子に対応する入力に切り換える 下記の画面表示になります 手順 8 の画面になるまでしばらくお待ちください 5 解凍したフォルダー内にある "Setup.exe" をダブルクリックして実行する InstallShield ウィザードが表示されます xxxxxxxxxx.

TOPPERS活用アイデア・アプリケーション開発

ARM Corporate Presentation

スクールCOBOL2002

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

使える! IBM Systems Director Navigator for i の新機能

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

プレポスト【問題】

Transcription:

IAR Embedded Workbench for ARMのTIPS集 V1.00.3 改訂日 Jan. 25 th, 2016 IAR システムズ株式会社

はじめに本資料の位置づけと読み方 位置づけ IAR Embedded Workbench for ARMのマニュアルの補足説明資料です 読み方 TIPSには5ケタまたは6ケタのIDが振られています 資料更新があってもIDの上位5ケタは固定です バージョンアップなどにより内容が変わる場合には6ケタ目に差分を示します 大項目 中項目 小項目番号 Version差ID (option) 2

TIPSの概略構成 B. C. D. E. F. G. H. I. J. K. L. 基本設定/一般オプション/マニュアル資料 C/C++コンパイラ デバッグ/ICE リンカ アプリケーション アセンブラ 補助ツール 他ツール連携 Windowsなどとの関係 C-STAT/C-RUNなど マイコン/CPU 3

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

目次 C.コンパイラ CA-001: 最適化設定画面 CA-002: 最適化レベルとデバッグ情報の保持 CA-002: 最適化レベルとデバッグ情報の保持 CA-003: 最適化の適用範囲と個別設定 CA-003: 最適化の適用範囲と個別設定 CA-003: 最適化の適用範囲と個別設定 CA-004: 最適化手法について CA-004: 最適化手法について CA-004: 最適化手法について CA-004: 最適化手法について CA-005: 最適化の考え方 CA-006: インクルードパスを指定するには CB-001: RAM上への関数配置 CB-002: 変数や関数が最終的になくなってしまう CB-003: 構造体のパッキングを変更するには CB-004: セクションのアドレスをプログラムで使用するには CB-005: IAR Embedded Workbench for ARMのenum型の大きさは CB-006: charの符号は CB-007: 割込みハンドラを記述するには CB-008: C言語の標準ライブラリについて CB-009: C言語の標準ライブラリを使うためには 31 32 33 34 35 36 37 38 39 40 41 42 43 45 46 47 48 49 50 51 52 53 5

目次 D.デバッグ/ICE DA-001: CoreSightテクノロジ機能 接続まとめ DA-002: CoreSightテクノロジトレースタイミング DA-003:デバッグに最小限必要なピン数は DA-004: SWDとJTAGのデバッグ差はあるのか DA-005: CoreSight テクノロジー 関連URL DA-006:デバッグインタフェースコネクタ I-jet DA-007:デバッグインタフェースコネクタ例 DA-008: デバッグ情報を含めるとコードサイズが大きくなる DB-001: SWV機能の使用条件 DB-002: SWV対応コネクタ DB-003: SWV機能使用時のプロジェクト設定 DB-004: SWV(SWO)トレース DB-004: SWV(SWO)トレース DB-005: SWV(SWO)トレースでコードカバレッジ DB-005: SWV(SWO)トレースでコードカバレッジ DB-006: SWV(SWO)機能 データログ DB-007: SWV(SWO)機能 データログ使用方法 DB-007: SWV(SWO)機能 データログ使用方法 DB-008: SWV(SWO)機能 データログ一覧 DB-009: SWV(SWO)機能 データログのタイムライン表示 54 55 56 57 58 59 60 63 64 65 66 67 68 69 70 71 72 73 74 75 76 6

目次 DB-010: 割込みログ DB-010: 割込みログ DB-011: 割込みログ一覧 DB-011: 割込みログ タイムライン表示 DB-012: ITMイベント ログ DB-013: ITMイベント 一覧 DB-013: ITMイベント タイムライン DB-013: ITMイベント タイムライン DB-013: ITMイベント タイムライン DC-001: トレース機能の使用条件 DC-002: Cortex-M用ETMトレース対応コネクタ DC-003a: ETMトレース使用時のプロジェクト設定 DC-003a: ETMトレース使用時のプロジェクト設定 DC-004:ETMトレース表示 DC-005: ETM関数トレース表示 DC-006: コードカバレッジ C言語 DC-007: コードカバレッジ アセンブラ DC-008:ETMトレース用のブレークポイント設定 DC-009: ETMトレース タイムラインでコールスタック表示 77 78 79 80 81 82 83 84 85 87 88 89 90 91 92 93 94 95 96 7

目次 DD-001: デバッグウィンドウ ブレークポイント DD-002: デバッグウィンドウ 逆アセンブリ DD-003: デバッグウィンドウ メモリ DD-004: デバッグウィンドウ シンボルメモリ DD-005: デバッグウィンドウ レジスタ DD-006: デバッグウィンドウ ウォッチ DD-007: デバッグウィンドウ ローカル DD-008: デバッグウィンドウ 静的変数 DD-009: デバッグウィンドウ 自動(オート) DD-010: デバッグウィンドウ ライブウォッチ DD-011: デバッグウィンドウ クイックウォッチ DD-012: デバッグウィンドウ コールスタック DD-013: デバッグウィンドウ スタック DD-013: デバッグウィンドウ スタック DD-014: デバッグウィンドウ ターミナルI/O DD-015: デバッグウィンドウ イメージ DE-001: シミュレータの設定 DE-002: シミュレータの出来る事 DE-003: 割込みシミュレーション DE-004:シミュレーションによる再現性 DF-001: デバッグ開始と同時にプログラムをスタート DF-002:ソースコードデバッグが出来ない DF-003:ローカル変数はデバッグ時に観測できる 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 8

目次 E:リンカ EA-001: リンカ設定に関する資料は EA-002: リンカ設定で変数/関数を必ず出力するには EA-003: スタックサイズを変更するには EA-004: 静的なスタック解析を実施するには EA-005: 静的なスタック解析の補助情報を与える EA-005: 静的なスタック解析の補助情報を与える EA-005: 静的なスタック解析の補助情報を与える EA-006: 領域の定義方法 EA-007: 未使用領域を特定のコードで埋めたい EA-008: ファイルごとにコードセクションを定義したい EA-009: 変数をC言語で記述した順序で配置したい EA-010: リンカマップを出力するには EA-011:ライブラリを組込むとコードサイズが大きい EA-012:チェックサムの実装法がわからない L: マイコン/CPU関係 LA-001: ARMの命令セット LA-002: IAR Embedded Workbench for ARMでCPUコアの選択と命令の選択 LA-003: IAR Embedded Workbench for ARMのスタートアップシーケンス LA-004: MB9BF166xでICE接続が出来なくなる 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 9

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

BA-001: マニュアルの参照方法 IAR Embedded Workbench for ARMはPDFのマニュア ルとオンラインマニュアルがあります PDFのマニュアルに関しては BA-002 BA-004をご確認ください オンラインマニュアルに関しては BA-003をご確認ください 11

BA-002a: メニューからマニュアルを開く ソフトウェア構成とマニュアルの関係 IAR Embedded Workbench for ARM IDEツール ビルドツール エディタ IAR C/C++ コンパイラ IAR C-SPY デバッガ シミュレータ プロジェクト ハードウェア マネージャ システムドライバ アセンブラ ライブラリ Powerデバッグ ビルダ ライブラリアン 静的解析ツール C-STAT リンカ RTOSプラグイン I-jet JTAGjet-trace *IAR Embedded Workbench for ARM 7.40.3での情報 12

BA-003: IAR Embedded Workbench for ARM上で ヘルプ IAR Embedded Workbench for ARM画面上でF1キーを 押すことで ヘルプが表示 たとえば ここ でF1キーを押す と 13

BA-004a: インフォメーションセンターからマニュアルを 開く *IAR Embedded Workbench for ARM 7.40.3の情報 IAR Embedded Workbench for ARMのメニュから [ヘルプ] [インフォメーションセンタ] ユーザガイドを選択 14

BA-005 IAR Embedded Workbench for ARMの マニュアルの基本構成 推奨するマニュアル参照順序 開 発 フ ェ ー ズ IAR Embedded Workbench for ARM 全体概要の把握 IAR Embedded Workbenchの使用開始の手順 アプリ操作 プロジェクト設定 IDEユーザガイド コンパイラ設定 リンカ設定 C/C++コンパイラリファレンスガイド リンカ設定実践 デバッグ設定 デバッグ手法 ICEのスペック 取り扱い方法 ILINK設定ガイド IAR日本法人作成ガイド http://www.iar.com/jp/ilink-setting-guide/ C-SPYデバッガガイド エミュレータ ICE 固有のマニュアル 15

BA-005 IAR Embedded Workbench for ARMの マニュアルの基本構成 IAR Embedded Workbenchの標準的なマニュアル構成 Part.1 関連モジュールの概要説明 教科書的的な説明 Part.2 関連モジュールの詳細説 明 辞書的な説明 16

BA-006a: IDE プロジェクト管理およびビルドガイド章 目次 *IAR Embedded Workbench for ARM 7.40.3の情報 パート1. プロジェクト管理とビルド 開発環境 プロジェクト管理 プロジェクトのビルド 編集 パート2. リファレンス情報 インストールファイル メニューリファレンス 一般オプション C-STAT オプション コンパイラオプション アセンブラオプション 出力コンバータオプション カスタムビルドオプション ビルドアクションオプション リンカオプション ライブラリビルダオプション 17

BA-007a: IAR C/C++ 開発ガイド章目次 *IAR Embedded Workbench for ARM 7.40.3の情報 パート1. ビルドツールの使用 IAR ビルドツールの概要 組込みアプリケーションの開発 データ記憶 関数 ILINK を使用したリンク アプリケーションのリンク DLIB ランタイムライブラリ アセンブラ言語インタフェース C の使用 C++ の使用 アプリケーションに関する考慮事項 組込みアプリケーション用の効率的な コーディング パート2. リファレンス情報 外部インタフェースの詳細 コンパイラオプション リンカオプション データ表現 拡張キーワード プラグマディレクティブ 組込み関数 プリプロセッサ ライブラリ関数 リンカ設定ファイル セクションリファレンス スタック使用制御ファイル IAR ユーティリティ C 規格の処理系定義の動作 C89 の処理系定義の動作 18

BA-008a: C SPYデバッガガイド章目次 *IAR Embedded Workbench for ARM 7.40.3の情報 パート1. 基本デバッグ IAR C-SPY デバッガ C-SPY を使用するにあたって アプリケーションの実行 変数と式 ブレークポイント メモリとレジスタ パート2. アプリケーションの解析 トレース プロファイリング コードカバレッジ Power デバッグ C-RUN ランタイムエラー解析 パート3. 高度なデバッグ マルチコアデバッグ 割込み C-SPY マクロ C-SPY コマンドラインユーティリティ -cspybat フラッシュローディング機構 パート4. 追加リファレンス情報 デバッガ オプション C-SPY ドライバについての追加情報 19

BA-009a: IAR Embedded Workbench for ARMの オプション設定概要 *IAR Embedded Workbench for ARM 7.40.3の情報 ツールオプションとプロジェクトオプション ツール関係全般オプション プロジェクト固有のオプション設定 20

BA-010a: ツールオプション概要 表示 操作性 カスタマイズ ビルドメッセージカ スタマイズ ビルド動作等 カスタマイズ ソースコード管理 カスタマイズ デバッガ動作等 カスタマイズ デバッグ時スタック 解析動作等 カスタマイズ 21

BA-011a: プロジェクトオプション概要 ターゲット設定 ライブラリ設定 開発フロー コンパイラ設定 最適化など リンカ設定 メモリ配置 チェックサム デバッグ用設定 ICE選択 書き込み設定 ICE固有の設定 リセット 速度 22

BA-012:ビルド時の生成ファイル 生成ファイル 説明.out 実行可能ファイル(Elf/Dwarf形式).a ライブラリファイル.srec (,.hex,.sim) Flashライター用などに変換されたファ イル [プロジェクト] [オプション] [出力コンバータ] [追加出力ファイルを生成]にチェック.map リンク後のマップファイル [プロジェクト] [オプション] [リンカ] [リス ト] [リンカマップファイルの表示].lst Cソースファイル毎の静的解析情報 [プロジェクト] [オプション] [C/C++コンパイ ラ] [リスト] [リストファイルの出力] project1 Debug Exe project1.out project1.srec List project1.map Tutor.lst Utilities.lst tutor_library Debug Exe tutor_library.a 23

BA-012: ビルド時の生成ファイル 実行可能ファイル (Elf/Dwarf 形式 ) 実行可能ファイル (Elf/Dwarf 形式 ).out ファイル 24

BA-012: ビルド時の生成ファイル ライブラリファイル ライブラリファイル.a ファイル 25

BA-012: ビルド時の生成ファイル.srec(.hex,.sim) ファイル モトローラ / インテル形式ファイル S010000070726F6A656374312E73726563EC S11300003804002019030000B3020000B30200000A S1130010B3020000B3020000B302000000000000BD S1130020000000000000000000000000B302000017 S1130030B302000000000000B3020000B30200009D S113004038B52D2401201349486012490860022064 S1130050040024B20A2C0FDA24B2200000F00DF8B8 S1130280A142F8D110BD00BF2C0000004C000000BA S11302B07047FEE7DDFFFFFF2C0000000800002070 S11302C000000000BBFEFFFF080000005800000013 S11302D0000000200000000000F009F8002801D010 S11302E0FFF7C0FF0020FFF7ADFF00F002F8012088 S11302F0704700F001B800000746384600F002F8E5 S1130300FBE7000080B5FFF751FF024A11001820F7 S1130310ABBEFBE726000200C046C046C046C0464E S10F0320FFF7DAFFFFFFFFFFFFFFFFFF06 S9030319E0 26

BA-012: ビルド時の生成ファイル.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 27

BA-012: ビルド時の生成ファイル.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 28

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

BA-014: ビルド構成DebugとReleaseの違い IAR Embedded Workbenchでは新しくプロジェクトを 生成するとDebugとReleaseのビルド構成が生成されま す Debug 項目 Release あり セミホスティング なし 低 最適化 高 あり C/アセンブラでデバッグ情報生成 なし なし マクロ定義NBDEBUG あり なし リンカ 小さいルーチンのインライン化 あり 30

C.コンパイラ 31

CA-001: 最適化設定画面 最適化の設定 32

CA-002: 最適化レベルとデバッグ情報の保持 最適化レベル なし 低 *1 中 高 バランス *2 高 速度 高 サイズ *1 ビルド構成がDebugの場合の初期値 *2 ビルド構成がReleaseの場合の初期値 デバッグ時は なし か 低 に設定してください 33

CA-002: 最適化レベルとデバッグ情報の保持 変数の位置情報 変数のスコープおよび存在情報 ステップポイント ステップ実行時のソースコードと機械語の対応 関数のステップイン/アウト ブレークポイントの設置 コールスタック情報 関数を特定する情報およびコールスタック内での変数情報 最適化レベル 変数の位置情報 ステップポイント コールスタック情報 なし 保持 保持 保持 低 ほぼ保持 保持 保持 中 保持されない 保持 保持 高 保持されない 保持されない 保持 34

CA-003: 最適化の適用範囲と個別設定 プロジェクト全体 ソースグループ単位 ソースコード単位 関数単位 プロジェクト全体 ソースグループ単位 関数単位 ソースコード単位 35

CA-003: 最適化の適用範囲と個別設定 プロジェクト全体ではなく ソースグループ単位やソー スコード単位で最適化レベルを変更する場合には以下の 設定を実施します グループまたはソースコード個別に上書きする際には [継承した設定をオーバーライド]にチェック ダブルクリック 36

CA-003: 最適化の適用範囲と個別設定 関数単位で最適化レベルを設定するには#pragma optimizeを使用します #pragma optimize の直下に記述された関数のみ 適用される ファイルソースに適用されている最適化レベルを 下げる方向にのみ指定可能 ファイルの最適化レベルが[中]のコードに対して #pragma optimize= high は適用できない 関数単位 37

CA-004: 最適化手法について 次ページ以降で以下の手法について内容をご紹介 共通部分式除去 ループ展開 関数インライン化 38

CA-004: 最適化手法について 最適化例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); 39

CA-004: 最適化手法について 最適化例2 ループ展開 入力ソースコード for ( i = 0; i < 3; i++) { j[i] = i; } ループを展開することで ループ処理のオーバーヘッドを削減 最適化イメージ j[0] = 0; j[1] = 1; j[2] = 2; 40

CA-004: 最適化手法について 関数インライン化 入力ソースコード 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をインラインで展開することで 関数呼出のオーバーヘッドを削減 41

CA-005: 最適化の考え方 最適化の手法は 効果が一定の効果が保証されるもので はなくコンパイラによって発見的 探索的に適用されま す デバッグのしやすさ メンテナンスのしやすさを考慮し サイズの削減が必要なコード 処理速度の追求が必要な コードごとに 適用範囲 ソースファイル/グループ を 限定して 高い最適化レベルを適用することを推奨いた します 各適用モジュール毎に単体テストを行い 効果的な最適 化オプションを試行してください 42

CA-006: インクルードパスを指定するには [C/C++コンパイラ]-[プリプロセッサ]で [追加インクルードディレクトリ]に指定をします 43

44

CB-001: RAM上への関数配置 ramfunc キーワードを関数の前に追加 ramfunc void foo(void); 注意: main関数開始前には使用できません 初期化処理で変数の初期化が終わるまではその関数を呼び出すことができません 45

CB-002: 変数や関数が最終的になくなってしまう IAR Embedded Workbench for ARMでは 明示的に参照さ れない変数や関数は最適化の設定によっても変わりますが 削 除されることがあります 絶対削除されたくない変数や関数には 以下の指定を利用でき ます 拡張キーワード root #pragma required=xxxx int gc5; #pragma required=gc5 root int gc6; リンカで同様のことをする場合にはEA-002をご覧ください 46

CB-003: 構造体のパッキングを変更するには C記述で#pragma packが使えます #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++開発ガイドの プラグマディレクティブを ご確認ください 47

CB-004: セクションのアドレスをプログラムで使用する には IAR Embedded Workbench for ARMでは section_beginや section_endでセクションの開示 及び終了アドレスの取得, section_sizeで大きさを取得 できます #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")); } 48

CB-005: IAR Embedded Workbench for ARMの enum型の大きさは C/C++ 開発ガイドに記載があります コンパイラでは 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型のサイズとすることが出来ます 49

CB-006: charの符号は IAR Embedded Workbench for ARMではオプションで 整数型charを変更することが出来ます 50

CB-007: 割込みハンドラを記述するには Cortex-Mの場合 特別なキーワードは不要です ベクタテーブルに対応する関数名を記述します void SysTick_Handler (void) { /* Something to do */ } ARM7,9,11,Cortex-R/A(Cortex-M以外)の場合 irqキーワードを記述し ベクタテーブルに対応する関数名を記述します irq arm void IRQ_Handler(void) { /* Something to do */ } 51

CB-008: C言語の標準ライブラリについて IAR Embedded Workbench ではC言語の標準ライブラ リ<stdio.h><time.h>などを使用する事が出来ます 一部実装されていない機能もありますので 詳しくはマ ニュアルをご確認ください([IAR C/C++ 開発ガイド]の [J.3.12 ライブラリ関数]) デバッガ接続時にはPC側のリソース ファイルや時間 などを利用するセミホスティングも利用可能です 52

CB-009: C言語の標準ライブラリを使うためには 幾つかの標準関数は ハードウェアに依存します たとえば printf などは最終的に出力をするハードウェア用にコードが必要です こ れをローレベルインタフェースと呼んでいます CB-008にあるようにデバッグ時にはデバッガ用のローレベルインタフェースが実装されて います 以下の関数を実装することで標準関数を利用できます 必要となる関数はどの関数を利用するかによって異なります close lseek open read write exit time clock 53

D.デバッグ/ICE 54

DA-001: CoreSightテクノロジ機能 接続まとめ 名称 接続 JTAG TMS TCK TDO TDI nreset SWDIO SWDCLK SWO - SWD TMS TCK TDO TDI nreset SWDIO SWDCLK SWO - デバッグ制御 Serial Wire Debug 名称 Serial Wire Viewer SWV トレース機能 *M3/M4のみ ETM Embedded Trace Macrocell 接続 TMS TCK TDO TDI nreset ICE 基本機能 I-jet I-jet-trace J-Link JTAGjet バウンダリスキャン printfデバッグ I-jet I-jet-trace J-Link JTAGjet 必要信号数 2本 SWV使用可能 printfデバッグ ICE 特徴 I-jet サンプリ ング パソコンにリアルタイム転送 PC(プログラムカウンタ)取得 特定データのサンプリング 例外処理のトレース (高速)prinfデバッグ ピン数 1 データ欠落可能性 大 JTAGjetTrace I jettrace J-Trace 分岐ト レース 実行 ICEのメモリに保存 ブレーク時にパソコンに転送 実行履歴を確実に追跡 対応しているかはCPU依存 タイムスタンプは誤差あり データ欠落可能性 小 SWDIO I-jet-trace SWDCLK J-Link SWO JTAGjet Serial Wire Output CLK D0 D1 D2 D3 1,2,4本 から選択 トレース 方式 特徴 *JTAG-Traceは4本(4bit)固定 データ線の本数に依存する 55

DA-002: CoreSightテクノロジトレースタイミング トレース情報が取得できない sub_2() SWVトレース sub_1() main() 一定間隔でサンプリング sub_2() ETMトレース sub_1() main() プログラムが分岐するタイミングでトレースバッファに出力 56

DA-003:デバッグに最小限必要なピン数は デバイスがSWDに対応していれば 3もしくは4本 SWDデバッグで 最低限必要なピン数は3本 I/O クロック グラウンド もしくはこれにリセットを加えた4本 リセッ ト機能は必須機能ではないため 最低ということであれば3本 グラウンドの本数が少ないと信号が弱くなったりノイズがのる リスクあります JTAGだと通常5本程度使用 一般的には おそらくグラウンドは1本でも開発可能ですが この精度は 基板やICEの品質にも関わってくるためユーザー様にて確認の 必要があります SWDは 一般的にCortex-A,R,Mに対応していますが デバッガとデバイスが共にSWDに対応していることが条件と なります 57

DA-004: SWDとJTAGのデバッグ差はあるのか Q. SWDを使用すると信号線が減るが クロック差やスピード差はあるか SWDやJTAGと比べて信号線が減りますが 実際にはCPUとの通信以外の制御部分が処理の大 半を占めるため デバッガの動作速度の低下を体感することはありません Q. JTAGとSWDを比べて できることできないことは [JTAGでできてSWDできないこと] JTAG本来の機能である端子のバウンダリスキャンテスト [SWDでできてJTAGでできないこと] トレース機能であるSWVトレース [その他SWDのメリット] デバッグ用の端子数の減少( 5線式 2線式 ) 上記に伴うコネクタ実装面積の削減が可能 58

DA-005: CoreSight テクノロジー 関連URL ARM社Websiteの解説 SWD http://www.arm.com/ja/products/systemip/debug-trace/coresight-soc-components/serialwire-debug.php ETM http://www.arm.com/ja/products/systemip/debug-trace/trace-macrocells-etm/index.php 59

DA-006:デバッグインタフェースコネクタ I-jet ハーフピッチ20ピンコネクタ:MIPI-20 標準対応 ケーブル付 11pin, 13pinから5V供給可能 60

DA-006:デバッグインタフェースコネクタ I-jet ハーフピッチ10ピンコネクタ:MIPI-10 JTAG, SWD/SWV 標準対応 ケーブル付 ピン配置はハーフピッチ19ピンコネクタの1 10番と同じ 61

DA-006:デバッグインタフェースコネクタ I-jet 標準ピッチ20ピン変換アダプタ:ARM-20 JTAG,SWD/SWV用 アダプタ標準添付 19pinから5V供給可能 62

DA-007:デバッグインタフェースコネクタ例 コネクタ種類 コネクタ例 ハーフピッチ 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 63

DA-008: デバッグ情報を含めるとコードサイズが大きくなる IAR Embedded Workbench for ARMでは ビルドしてELFフォー マットの実行形式を作成します デバッグ情報が入ると このELFフォーマットのファイル自体は大き くなりますが コードのサイズは変わりません ELFヘッダ プログラムヘッダテーブル セクション1 セクション2 セクションN デバッグ情報を生成すると デバッグ用のセクションが 増えるためELFファイルは 大きくなります 64

DB-001: SWV機能の使用条件 MCUの対応 Cortex-M3/M4 SWVトレース対応エミュレータ(ICE) I-jet / I-jet Lite / SEGGER社 J-Linkが対応 コネクタの対応 SWOピンの接続に対応したコネクタが必要 接続方式 SWD接続を選択 レジスタ設定によるSWOポートピンの有効化 MCUによってはSWOポートピンが多重化されて他の機能に割り当てられていること があるため FWまたはマクロで有効化する必要がある 65

DB-002: SWV対応コネクタ SWV機能はSWOピンを使用します MIPI-20 MIPI-10 66

DB-003: SWV機能使用時のプロジェクト設定 [設定] [ドライバ]を[I-jet/JTAGjet]を選択 [I-jet/JTAGjet] [JTAG/SWD]で インタフェースに[SWD]を選択 [一般オプション] ライブラリ設定 stdout/stderrがswo経由になっている と強制的にSWDが選択される 67

DB-004: SWV(SWO)トレース こんなときに コードの流れをバックトレースしたい コード実行時のタイムスタンプを見たい など *補足 SWVトレースは1秒間に数千サンプリング程度 なので 実行コード全てを追うことできない 68

DB-004: SWV(SWO)トレース 使用方法 1.SWOトレースウィンドウ設定 2. SWOトレース 4. デバッグ開始 3. 右クリックして[有効] PCSampleがSWOトレースになります 69

DB-005: SWV(SWO)トレースでコードカバレッジ こんなときに 実装されているコードが想定通りに 実行されているか確認したい など *補足 デフォルトで有効となっている コー ドカバレッジ プラグインの機能を使 用 赤色のひし形 緑色のひし形 赤と緑のひし形 黄色のひし形 モジュールや関数の0% が実行されたことを示します モジュールや関数の100% が実行されたことを示します モジュールや関数の一部が実行されたことを示します 文が1つも実行されていないことを示します サンプリングタイミングにより 抜け 落ちることがあるが 長時間トレース することで信頼性のあるデータとなる 70

DB-005: SWV(SWO)トレースでコードカバレッジ 使用方法 SWVトレースが可能な状態で 4.[更新] 1.コードカバレッジ コードカバレッジが更新表示される 3.デバッグ実行 2.右クリックして[有効化] 71

DB-006: SWV(SWO)機能 データログ こんなときに 特定の変数やアドレスへの読み書き アクセスをロギングしたい 上記アクセスの時間を知りたい など *補足 変数またはアドレスは4つまで指定 可能 メニューから[I-jet/JTAGjet]-[データログ] 72

DB-007: SWV(SWO)機能 データログ使用方法 (基本)観測したい変数をデータブレークポイントに設定します 1.グローバルや静的変数上で右クリック (Option)Read時のみ観測やWrite時のみ観測したい場合には以下の設定を実施ください 2. 変数 のデータログブレークポイントを設定 3.[表示] [ブレークポイント] 4.右クリックして[編集] 5.ログ対象アクションを選択 73

DB-007: SWV(SWO)機能 データログ使用方法 1.データログ 2.右クリックして有効化 3.デバッグ開始 74

DB-008: SWV(SWO)機能 データログ一覧 こんなときに データアクセスが何回あったか 読み書き が何回あったか確認したい など *補足 すべてのアクセス 数が読み書きア クセスの合計より大きい場合 アクセ スの属性情報が正確にとれなかったサ ンプリングがある メニューから[I-jet/JTAGjet]-[データログ一覧] 75

DB-009: SWV(SWO)機能 データログの タイムライン表示 こんなときに データの変わったタイミングを時間軸上で みたい 他の割り込みなどとの時間関係を見たい など メニューより[I-jet/JTAG-jet]-[タイムライン] タイムラインのデータログ領域を右クリックし 有効化を選択 76

DB-010: 割込みログ こんなときに プログラム実行中に発生した割り込 みや例外をロギングしたい 割り込みハンドラ関数の処理でか かった時間を知りたい など *ハンドラの実行時間が短い場合には 入る と 抜ける が対応取れないことがあります *SWOの制約を受けますので すべての情報が取得できない場合があります メニューから[I-jet/JTAGjet]-[割込みログ] 77

DB-010: 割込みログ 1.割込みログ 2.右クリックして[有効化] 3.デバッグ開始 78

DB-011: 割込みログ一覧 こんなときに 各割れ込みの発生回数や発生頻度を確認したい など メニューから[I-jet/JTAGjet]-[割込みログ一覧] 79

DB-011: 割込みログ タイムライン表示 こんなときに 割り込みの発生タイミングを時間軸上で見 たい 割り込みハンドラの処理にかかった時間を 時間軸上で見たい その他のイベントとの関係を時間軸上で見 たい など 80

DB-012: ITMイベント ログ こんなときに コードの実行タイミングを正確に知りたい 実行時の変数の値を見たい マルチタスクの各タスク入り口出口に仕掛 けて タスク状況を把握したい など *補足 ソースコード上で arm_itm.hをinclude ITM_EVENT8_WITH_PC(1,1) と記述 チャンネルは1-4が使用可能 *参考URL http://supp.iar.com/support/?note=26891 ITM_EVENT8(channel, value) 使用できるAPI 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) 81

DB-013: ITMイベント 一覧 こんなときに 各チャンネルのITMイベント発生回数や頻 度を知りたい 実行時間が適正な間隔になっているか知り たい ウォッチしている値が適正な値になってい るか知りたい など 82

DB-013: ITMイベント タイムライン こんなときに ITMイベントの発生タイミングを時間軸上 で見たい 各ITMイベント間の関係や割り込みなどの と関係を時間軸上で見たい イベント間をドラッグドップで 経過時間 を知りたい など 83

DB-013: ITMイベント タイムライン 1.arm_itm.hをインクルード 5.右クリックして[有効化] 2.マクロをコードに記述 3.ビルド ダウンロード 4.イベントログ 6.デバッグ開始 84

DB-013: ITMイベント タイムライン 2.表示したい機能の上で右クリックして[有効化] 3. 右クリックして[ズーム] [任意の時間軸] 4. デバッグ開始 1.タイムライン 85

86

DC-001: トレース機能の使用条件 MCUの対応 ETM機能の実装はMCUベンダの選択による Trace Dataピン(1-4本)はMCUベンダの選択による トレース機能付きエミュレータ(ICE)を使用 I-jet Trace, JTAGjet-Traceが対応 SEGGER社J-Traceが対応 コネクタの対応 トレースピンの接続に対応したコネクタが必要 レジスタ設定によるトレースポートピンの有効化 MCUによってはトレースポートピンが多重化されて他の機能に割り当てられて いることがあるため FWまたはマクロで有効化する必要がある 87

DC-002: Cortex-M用ETMトレース対応コネクタ MIPI-20 ETMトレース用クロック ETMトレース用データポート 88

DC-003a: ETMトレース使用時のプロジェクト設定 [設定] [ドライバ]を[I-jet/JTAGjet]を選択 [デバッガ]-[設定] ETMを選択 [I-jet / JTAGjet]-[Trace] *IAR Embedded Workbench for ARM 7.40.3での情報 89

DC-003a: ETMトレース使用時のプロジェクト設定 [I-jet/JTAGjet]-[ETMトレース設定] ETM Trace settingで [設定を試す]をクリック クロック周波数のトレースの値が設定されます 設定項目の詳細は [ヘルプ] [Embedded Workbench デバッグ ガイド] を参照 90

DC-004:ETMトレース表示 [ETMトレース] 実行された命令を表示 91

DC-005: ETM関数トレース表示 [ETM関数トレース] 実行された関数を表示 92

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

DC-007: コードカバレッジ アセンブラ コードカバレッジ 命令プロファイリング 94

DC-008:ETMトレース用のブレークポイント設定 トレース取得を開始したいコード上で 右クリックし [ブレークポイントの切り替え(トレース開始)] を指定 トレースを停止したいコード上で [ブレークポイントの切り替え(トレース停止)] を指定 ブレークしたときに トレースデータが ICEから読み出され画面に表示される 95

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

DD-001: デバッグウィンドウ ブレークポイント こんなときに ブレークポイントの一覧が見たい ブレークポイントを貼っているソースコー ドに飛びたい 一時的にブレークポイントを全て無効にし てデバッグしたい ブレークポイントを削除したい ブレークポイントを編集したい など 97

DD-002: デバッグウィンドウ 逆アセンブリ こんなときに アセンブラレベルでステップ実行したい 実行中のアドレスを見たい ライブラリなど ソースファイルのないプ ログラムをデバッグしたい 最適化の影響を確認したい など 98

DD-003: デバッグウィンドウ メモリ こんなときに 現在のメモリの値を見たい メモリをPC上の保存したい メモリ上でデータを検索したい など 99

DD-004: デバッグウィンドウ シンボルメモリ こんなときに アドレス順に変数や関数の一覧を見たい など 100

DD-005: デバッグウィンドウ レジスタ こんなときに 現在の各種レジスタの値が見たい デバッグ用にレジスタの値を変えてみたい など 101

DD-006: デバッグウィンドウ ウォッチ こんなときに 特定の静的変数やグローバル変数の値をモ ニタリングしたい ローカル変数の値をスコープ内でモニタリ ングしたい など 102

DD-007: デバッグウィンドウ ローカル こんなときに 関数内のローカル変数や引数を自動的にモ ニタリングしたい など 103

DD-008: デバッグウィンドウ 静的変数 こんなときに プログラム内の静的変数やグローバル変数 を自動的にモニタリングしたい など 104

DD-009: デバッグウィンドウ 自動(オート) こんなときに ステップ実行でデバッグをしているときに 近辺の変数や関数情報を自動的にモニタリ ングしたい など 105

DD-010: デバッグウィンドウ ライブウォッチ こんなときに 特定の静的変数やグローバル変数を プロ グラム実行状態のまま定期的にモニタリン グしたい など 更新間隔は [ツール]-[オプション] [デバッグ]で更新間隔にて設定 106

DD-011: デバッグウィンドウ クイックウォッチ こんなときに 変数を簡単な式で評価したい Int_Glob> 1 など 真なら1 任意のタイミングでC-Spyマクロを 実行したい など *補足 C-Spyマクロは非常に強力かつ柔軟 [ヘルプ] [Embedded Workbench デバッ グガイド]の[C-SPY マクロの使用]を参照 107

DD-012: デバッグウィンドウ コールスタック こんなときに 実行中の関数の呼び出し元を知りたい 各関数の引数も見たい など 108

DD-013: デバッグウィンドウ スタック こんなときに 現在のスタック使用状況を見たい 現在のスタック使用率を見たい それまでの最大スタック使用量を知りたい など *補足 OSを搭載している場合 OS側で各タスクの スタックを管理するので 別途プラグインな どを活用してスタックを確認ください 109

DD-013: デバッグウィンドウ スタック 動的なスタック使用量の解析 RTOSを未使用の場合には 動的スタック使用量の解析が使用できま す 有効にするには [ツール]-[オプション] [スタック]-[グラフィカル スタックの表示 ]をオンにします 動的な解析の表示 110

DD-014: デバッグウィンドウ ターミナルI/O こんなときに printfデバッグがしたい デバッグ用にパラメータなどをscanfでIAR Embedded Workbench for ARMの画面上 から入力したい など *補足 <stdio.h>をinclude コードサイズが大きくなってしまう場合は [プロジェクト] [オプション] [一般オプ ション] [ライブラリオプション] から調整可能 printfはデフォルトだとターミナルioに出力 されるが ユーザコードで実装することで UARTなどに変更可能 111

DD-015: デバッグウィンドウ イメージ こんなときに 現在のイメージ デバッグ情報 を確認し たい など *補足 ブートローダプロジェクトなどで複数バイナ リをデバッグするとき以外は出番なし 112

DE-001: シミュレータの設定 [設定] [ドライバ]を[シミュレータ]を選択 113

DE-002: シミュレータの出来る事 C-SPYシミュレータで出来ることは以下の通りとなります 1. 命令レベルのシミュレーション 2. メモリの構成 検証 3. 割込みシミュレーション 4. イミディエイトブレークポイントとC-SPY マクロシステムを使用した周辺シ ミュレーション デフォルトではCPUコア単体+メモリの状態でのシミュレーションが可能です 周辺や割込みを使うシミュレーションは3または4に関してユーザ側で準備が 必要となります 3 割込みを 疑似発生 1 CPUコア 4 C-SPYマクロ 周辺の模擬 2 メモリ 114

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

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

DF-001: デバッグ開始と同時にプログラムをスタート [デバッガ]-[設定]-[指定位置まで実行]に exitを指定す る 117

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

DF-003:ローカル変数はデバッグ時に観測できる ローカル ウィンドウには ローカル変数 つまりア クティブな関数の自動変数と関数パラメータを表示する ことが可能です ただ コンパイラの最適化により正しい値を表示できな い場合や不明となる場合があります デバッグ時にローカル変数を見るためには最適化を無し もしくは 低に設定をしてください 119

E:リンカ 120

EA-001: リンカ設定に関する資料は C/C++開発ガイドの リンカ設定ファイル を ご確認ください IARシステムズの日本法人が作成した簡易ガイドもご活用 ください 以下のページからダウンロードください http://www.iar.com/jp/ilink-setting-guide/ 121

EA-002: リンカ設定で変数/関数を必ず出力するには IAR Embedded Workbench for ARMでは 明示的に参照されない変数や 関数は最適化の設定によっても変わりますが 削除されることがあります 絶対削除されたくない変数や関数には リンカで必ず出力する 指定をする事ができます [リンカ]-[入力]-[シンボルをキープ]で 変数や関数名を登録します ソースコードで同様のことをする場合にはCB-002をご覧ください 122

EA-003: スタックサイズを変更するには IAR Embedded Workbench for ARMのデフォルトの 設定ではスタックサイズを以下のオプション画面で変更 できます [リンカ]-[設定]-[編集] [スタック/ヒープサイズ] 123

EA-004: 静的なスタック解析を実施するには [リンカ]-[アドバンスド]-[スタックの使用量解析を有効にする]に チェックを入れ メイクを実行するとマップファイルに解析結果が 出力される ************************************************ *** 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" " iar_unaligned aeabi_memcpy4" 0 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 124

EA-005: 静的なスタック解析の補助情報を与える 静的なスタック解析では以下の2つ方法で解析の 補助情報を与えることができます ソースコード上に#pragmaで補助情報を与える 制御ファイルで補助情報を与える 125

EA-005: 静的なスタック解析の補助情報を与える ソースコード上に#pragmaで補助情報を与える #pragma calls 関数が呼ばれることを明示的に指定 #pragma call_graph_root 解析のrootの指定 void Fun1(), Fun2(); void Caller(void (*fp)(void)) { #pragma calls = Fun1, Fun2 (*fp)(); } #pragma call_graph_root="interrupt" void My_Handler (void ) { } 126

EA-005: 静的なスタック解析の補助情報を与える 制御ファイルで補助情報を与える *詳細はC/C++開発ガイドをご覧ください possible calls main: max recursion depth f1; recf: 10; call graph root [ interrupt ]: SysTick_Handler,Default_Handler; function gg1: 10, calls f1; 127

EA-006: 領域の定義方法 section領域を定義する方法 #pragma location ="MYFUNC2" int f1(int a ) { } #pragma location="data" int bbb[]={0,1,2,3}; 1つずつ指定する方法 #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 = 範囲で指定する方法 128

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

EA-008: ファイルごとにコードセクションを定義したい 個別オプションにてコードセクションを定義することも 出来ます 130

EA-009: 変数をC言語で記述した順序で配置したい IAR Embedded Workbench for ARMのリンカは コード効率などの点から 適宜並び替えて配置するため 記述した順番での配置とはなりません 順番を指定するための方法を以下に紹介します 1 構造体にまとめる struct { short a; char b; int c; char d; }data; 2) 絶対アドレスで配置する 3)セクションを指定し リンカ設定でも指定 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 } 131

EA-010: リンカマップを出力するには [リンカ]-[リスト]でリンカマップファイルの生成を選択ください ビルドを行うと ワークスペースのOutputフォルダ内に マップ ファイルが表示され ダブルクリックすることでエディタ画面で見 ることができます 132

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

EA-012:チェックサムの実装法がわからない 弊社ではプログラミング自体のサポートはしておりませ んが FAQに参考となるドキュメントがありますのでご 活用ください http://www.iarsys.co.jp/customer/faqs/faqlistview/10810668 134

L: マイコン/CPU関係 135

LA-001: ARMの命令セット ARMの命令種類 命令セット ビット 特徴 ARM 32bit 32ビット命令セット パフォーマンス高いがコード密度低い Thumb 16bit 16ビット命令のサブセット コード密度高いがパフォーマンスやや低い ARMv6-M Thumb 16bit + 32bit ARMv7-M Thumb2 16bit + 32bit 16ビット命令 Thumb2の32ビット命令を6個サポート 16ビット 32ビット混在の命令セット パフォーマンスおよびコード密度高い ARMファミリー毎の命令対応 名称 命令セット 特徴 ARM6 ARM ARM7 ARM9 ARM11 ARM Thumb 命令セットを使い分ける際にはCPUのモード切替が必要 Cortex-M0/M0+ ARMv6-M Thumb CPUモードを変えることなく必要に応じて32bit命令を使用可能 ARMv7-M Thumb2 CPUモードを変えることなく必要に応じて32bit命令を使用 ARMv6-M Thumbを大幅に拡張しており高い性能とコード効率 を実現 Cortex-M3/M4/M7 136

LA-002: IAR Embedded Workbench for ARMで CPUコアの選択と命令の選択 プロジェクトのオプション画面 コア/マイコン選択 一般オプション-ターゲット命令 C/C++コンパイラ-コード 137

LA-003: IAR Embedded Workbench for ARMの スタートアップシーケンス 参照 ジャンプ Cortex-M0/M3/M4 Vector Table: IAR DLIB ランライム ライブラリの コード ただし 上書き可能 thumb vector_table_m.s or thumb cstartup_m.c Vector No. Vector Offset 00 0x00 例外& 割り込み Stack Top 値 sfe (CSTACK) 01 0x04 Reset iar_program_start 02 0x08 NMI Default Handler 03 0x0C Hard Fault Default Handler 04 0x10 Memory Management Default Handler 05 0x14 Bus Fault Default Handler 06 0x18 Usage Fault Default Handler 07~10 0x1C~0x28 Reserved 0 11 0x2C SVCall Default Handler 12 0x30 Debug Monitor Default Handler 13 0x34 Reserved 0 14 0x38 PendSV Default Handler 15 16 ~ 255 0x3C 0x40~0x3FC SysTick External Interrupts Default Handler Interrupt Handlers デフォルトプログラムエントリ: thumb cstartup_m.s or thumb cstartup_m.c main()前の初期化: thumb cmain.s ユーザコード User s Application: iar_program_start: bl iar_init_core bl iar_init_vfp bl cmain ; optional ; optional, enable VFP, thumb fpinit_m.s cmain: bl low_level_init bl iar_data_init3 bl main ; low_level_init.c ; initialize data sections, init data_init3.c int main (void) { } void xxx_interrupthandler (void) { } 138

LA-004: MB9BF166xでICE接続が出来なくなる とても問い合わせが多いです ICEで使用するピンを多用途に変更してしまっています フラッシュをクリアしていただく必要があります これについては弊社ツールでは実施できませんので チップベンダ/代理店に お問い合わせください Cortex-MにICE接続するためには JTAG接続の場合 TCK, TDI, TMS, TDO nreset SWD接続の場合 SWCLK, SWDIO が必須となります 139