IAR Embedded Workbench for
ARMのTIPS集 V1.00.3
はじめに本資料の位置づけと読み方
【位置づけ】
IAR Embedded Workbench for ARMのマニュアルの補足説明資料です。 【読み方】 TIPSには5ケタまたは6ケタのIDが振られています。 資料更新があってもIDの上位5ケタは固定です。 バージョンアップなどにより内容が変わる場合には6ケタ目に差分を示します。 ― 中項目 大項目 小項目番号 Version差ID (option)
TIPSの概略構成
B.
基本設定/一般オプション/マニュアル資料
C.
C/C++コンパイラ
D.
デバッグ/ICE
E.
リンカ
F.
アプリケーション
G.
アセンブラ
H.
補助ツール
I.
他ツール連携
J.
Windowsなどとの関係
K.
C-STAT/C-RUNなど
L.
マイコン/CPU
目次
• はじめに本資料の位置づけと読み方 2 • TIPSの概略構成 3 • B.基本設定/一般オプション/マニュアル資料 10 • BA-001: マニュアルの参照方法 11 • BA-002a: メニューからマニュアルを開く 12• BA-003: IAR Embedded Workbench for ARM上でヘルプ 13
• BA-004a: インフォメーションセンターからマニュアルを開く 14
• BA-005:IAR Embedded Workbench for ARMのマニュアルの基本構成 15
• BA-005:IAR Embedded Workbench for ARMのマニュアルの基本構成 16
• BA-006a: IDE プロジェクト管理およびビルドガイド章目次 17
• BA-007a: IAR C/C++ 開発ガイド章目次 18
• BA-008a: C-SPYデバッガガイド章目次 19
• BA-009a: IAR Embedded Workbench for ARMのオプション設定概要 20
• BA-010a: ツールオプション概要 21 • BA-011a: プロジェクトオプション概要 22 • BA-012:ビルド時の生成ファイル 23 • BA-012:ビルド時の生成ファイル 24 • BA-012:ビルド時の生成ファイル 25 • BA-012:ビルド時の生成ファイル 26 • BA-012:ビルド時の生成ファイル 27 • BA-012:ビルド時の生成ファイル 28 • BA-013: 行番号を表示したい 29 • BA-014: ビルド構成DebugとReleaseの違い 30
目次
• C.コンパイラ 31 • CA-001: 最適化設定画面 32 • CA-002: 最適化レベルとデバッグ情報の保持 33 • CA-002: 最適化レベルとデバッグ情報の保持 34 • CA-003: 最適化の適用範囲と個別設定 35 • CA-003: 最適化の適用範囲と個別設定 36 • CA-003: 最適化の適用範囲と個別設定 37 • CA-004: 最適化手法について 38 • CA-004: 最適化手法について 39 • CA-004: 最適化手法について 40 • CA-004: 最適化手法について 41 • CA-005: 最適化の考え方 42 • CA-006: インクルードパスを指定するには? 43 • CB-001: RAM上への関数配置 45 • CB-002: 変数や関数が最終的になくなってしまう 46 • CB-003: 構造体のパッキングを変更するには? 47 • CB-004: セクションのアドレスをプログラムで使用するには 48 • CB-005: IAR Embedded Workbench for ARMのenum型の大きさは? 49 • CB-006: charの符号は? 50 • CB-007: 割込みハンドラを記述するには? 51 • CB-008: C言語の標準ライブラリについて 52目次
• D.デバッグ/ICE 54 • DA-001: CoreSightテクノロジ機能・接続まとめ 55 • DA-002: CoreSightテクノロジトレースタイミング 56 • DA-003:デバッグに最小限必要なピン数は? 57 • DA-004: SWDとJTAGのデバッグ差はあるのか? 58 • DA-005: CoreSight テクノロジー 関連URL 59 • DA-006:デバッグインタフェースコネクタ I-jet 60 • DA-007:デバッグインタフェースコネクタ例 63 • DA-008: デバッグ情報を含めるとコードサイズが大きくなる? 64 • DB-001: SWV機能の使用条件 65 • DB-002: SWV対応コネクタ 66 • DB-003: SWV機能使用時のプロジェクト設定 67 • DB-004: SWV(SWO)トレース 68 • DB-004: SWV(SWO)トレース 69 • DB-005: SWV(SWO)トレースでコードカバレッジ 70 • DB-005: SWV(SWO)トレースでコードカバレッジ 71 • DB-006: SWV(SWO)機能 データログ 72 • DB-007: SWV(SWO)機能 データログ使用方法 73 • DB-007: SWV(SWO)機能 データログ使用方法 74 • DB-008: SWV(SWO)機能 データログ一覧 75 • DB-009: SWV(SWO)機能 データログのタイムライン表示 76目次
• DB-010: 割込みログ 77 • DB-010: 割込みログ 78 • DB-011: 割込みログ一覧 79 • DB-011: 割込みログ タイムライン表示 80 • DB-012: ITMイベント ログ 81 • DB-013: ITMイベント 一覧 82 • DB-013: ITMイベント タイムライン 83 • DB-013: ITMイベント タイムライン 84 • DB-013: ITMイベント タイムライン 85 • DC-001: トレース機能の使用条件 87 • DC-002: Cortex-M用ETMトレース対応コネクタ 88 • DC-003a: ETMトレース使用時のプロジェクト設定 89 • DC-003a: ETMトレース使用時のプロジェクト設定 90 • DC-004:ETMトレース表示 91 • DC-005: ETM関数トレース表示 92 • DC-006: コードカバレッジ:C言語 93 • DC-007: コードカバレッジ:アセンブラ 94 • DC-008:ETMトレース用のブレークポイント設定 95 • DC-009: ETMトレース タイムラインでコールスタック表示 96目次
• DD-001: デバッグウィンドウ:ブレークポイント 97 • DD-002: デバッグウィンドウ:逆アセンブリ 98 • DD-003: デバッグウィンドウ:メモリ 99 • DD-004: デバッグウィンドウ:シンボルメモリ 100 • DD-005: デバッグウィンドウ:レジスタ 101 • DD-006: デバッグウィンドウ:ウォッチ 102 • DD-007: デバッグウィンドウ:ローカル 103 • DD-008: デバッグウィンドウ:静的変数 104 • DD-009: デバッグウィンドウ:自動(オート) 105 • DD-010: デバッグウィンドウ:ライブウォッチ 106 • DD-011: デバッグウィンドウ:クイックウォッチ 107 • DD-012: デバッグウィンドウ:コールスタック 108 • DD-013: デバッグウィンドウ:スタック 109 • DD-013: デバッグウィンドウ:スタック 110 • DD-014: デバッグウィンドウ:ターミナルI/O 111 • DD-015: デバッグウィンドウ:イメージ 112 • DE-001: シミュレータの設定 113 • DE-002: シミュレータの出来る事 114 • DE-003: 割込みシミュレーション 115 • DE-004:シミュレーションによる再現性 116 • DF-001: デバッグ開始と同時にプログラムをスタート 117目次
• E:リンカ 120 • EA-001: リンカ設定に関する資料は? 121 • EA-002: リンカ設定で変数/関数を必ず出力するには? 122 • EA-003: スタックサイズを変更するには? 123 • EA-004: 静的なスタック解析を実施するには? 124 • EA-005: 静的なスタック解析の補助情報を与える 125 • EA-005: 静的なスタック解析の補助情報を与える 126 • EA-005: 静的なスタック解析の補助情報を与える 127 • EA-006: 領域の定義方法 128 • EA-007: 未使用領域を特定のコードで埋めたい 129 • EA-008: ファイルごとにコードセクションを定義したい 130 • EA-009: 変数をC言語で記述した順序で配置したい 131 • EA-010: リンカマップを出力するには? 132 • EA-011:ライブラリを組込むとコードサイズが大きい?! 133 • EA-012:チェックサムの実装法がわからない 134 • L: マイコン/CPU関係 135 • LA-001: ARMの命令セット 136 • LA-002: IAR Embedded Workbench for ARMでCPUコアの選択と命令の選択 137 • LA-003: IAR Embedded Workbench for ARMのスタートアップシーケンス 138B.基本設定/一般オプション/
マニュアル資料
BA-001: マニュアルの参照方法
•
IAR Embedded Workbench for ARMはPDFのマニュア
ルとオンラインマニュアルがあります
•PDFのマニュアルに関しては、 BA-002、BA-004をご確認ください
BA-002a: メニューからマニュアルを開く
•
ソフトウェア構成とマニュアルの関係
IAR Embedded Workbench for ARM
IDEツール エディタ プロジェクト マネージャ ライブラリ ビルダ ライブラリアン ビルドツール IAR C/C++ コンパイラ アセンブラ リンカ IAR C-SPY デバッガ シミュレータ ハードウェア システムドライバ Powerデバッグ RTOSプラグイン I-jet JTAGjet-trace 静的解析ツール C-STAT
BA-003: IAR Embedded Workbench for ARM上で
ヘルプ
•
IAR Embedded Workbench for ARM画面上でF1キーを
押すことで、ヘルプが表示。
たとえば、ここ でF1キーを押す
BA-004a: インフォメーションセンターからマニュアルを
開く
•
IAR Embedded Workbench for ARMのメニュから
[ヘルプ]→[インフォメーションセンタ]
•
ユーザガイドを選択
BA-005:IAR Embedded Workbench for ARMの
マニュアルの基本構成
•
推奨するマニュアル参照順序
IAR Embedded Workbenchの使用開始の手順 IDEユーザガイド C/C++コンパイラリファレンスガイド C-SPYデバッガガイド ILINK設定ガイド ※IAR日本法人作成ガイド http://www.iar.com/jp/ilink-setting-guide/ IAR Embedded Workbench for ARM
全体概要の把握 アプリ操作 プロジェクト設定 コンパイラ設定 リンカ設定 リンカ設定実践 デバッグ設定 デバッグ手法 開 発 フ ェ ー ズ
BA-005:IAR Embedded Workbench for ARMの
マニュアルの基本構成
•
IAR Embedded Workbenchの標準的なマニュアル構成
Part.1
関連モジュールの概要説明
Part.2関連モジュールの詳細説
明
教科書的的な説明
辞書的な説明
BA-006a: IDE プロジェクト管理およびビルドガイド章
目次
パート1.
プロジェクト管理とビルド
•開発環境
•プロジェクト管理
•プロジェクトのビルド
•編集
パート2.
リファレンス情報
•インストールファイル
•メニューリファレンス
•一般オプション
•C-STAT オプション
•コンパイラオプション
•アセンブラオプション
•出力コンバータオプション
•カスタムビルドオプション
•ビルドアクションオプション
•リンカオプション
•ライブラリビルダオプション
BA-007a: IAR C/C++ 開発ガイド章目次
パート1.
ビルドツールの使用
• IAR ビルドツールの概要 • 組込みアプリケーションの開発 • データ記憶 • 関数 • ILINK を使用したリンク • アプリケーションのリンク • DLIB ランタイムライブラリ • アセンブラ言語インタフェース • C の使用 • C++ の使用 • アプリケーションに関する考慮事項 • 組込みアプリケーション用の効率的な コーディングパート2.
リファレンス情報
• 外部インタフェースの詳細 • コンパイラオプション • リンカオプション • データ表現 • 拡張キーワード • プラグマディレクティブ • 組込み関数 • プリプロセッサ • ライブラリ関数 • リンカ設定ファイル • セクションリファレンス • スタック使用制御ファイル • IAR ユーティリティ • C 規格の処理系定義の動作 • C89 の処理系定義の動作BA-008a: C-SPYデバッガガイド章目次
パート1. 基本デバッグ • IAR C-SPY デバッガ • C-SPY を使用するにあたって • アプリケーションの実行 • 変数と式 • ブレークポイント • メモリとレジスタ パート2. アプリケーションの解析 • トレース • プロファイリング • コードカバレッジ • Power デバッグ • C-RUN ランタイムエラー解析 パート3. 高度なデバッグ • マルチコアデバッグ • 割込み • C-SPY マクロ • C-SPY コマンドラインユーティリティ -- cspybat • フラッシュローディング機構 パート4. 追加リファレンス情報 • [デバッガ]オプション • C-SPY ドライバについての追加情報BA-009a: IAR Embedded Workbench for ARMの
オプション設定概要
•
ツールオプションとプロジェクトオプション
ツール関係全般オプション
プロジェクト固有のオプション設定
BA-010a: ツールオプション概要
表示・操作性 カスタマイズ ビルドメッセージカ スタマイズ ビルド動作等 カスタマイズ ソースコード管理 カスタマイズ デバッグ時スタック 解析動作等 デバッガ動作等 カスタマイズBA-011a: プロジェクトオプション概要
開発フロー ターゲット設定 ライブラリ設定 コンパイラ設定 ※最適化など リンカ設定 ※メモリ配置、 チェックサム デバッグ用設定 ICE選択 書き込み設定 ICE固有の設定 ※リセット・速度BA-012:ビルド時の生成ファイル
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++コンパイ ラ]→ [リスト]→[リストファイルの出力]•
実行可能ファイル(Elf/Dwarf形式) .outファイル
実行可能ファイル(Elf/Dwarf形式)
•
ライブラリファイル .aファイル
ライブラリファイル
•
モトローラ/インテル形式ファイル
.srec(.hex, .sim)ファイル S010000070726F6A656374312E73726563EC S11300003804002019030000B3020000B30200000A S1130010B3020000B3020000B302000000000000BD S1130020000000000000000000000000B302000017 S1130030B302000000000000B3020000B30200009D S113004038B52D2401201349486012490860022064 S1130050040024B20A2C0FDA24B2200000F00DF8B8 ・・・ S1130280A142F8D110BD00BF2C0000004C000000BA S11302B07047FEE7DDFFFFFF2C0000000800002070 S11302C000000000BBFEFFFF080000005800000013 S11302D0000000200000000000F009F8002801D010 S11302E0FFF7C0FF0020FFF7ADFF00F002F8012088 S11302F0704700F001B800000746384600F002F8E5 S1130300FBE7000080B5FFF751FF024A11001820F7 S1130310ABBEFBE726000200C046C046C046C0464E S10F0320FFF7DAFFFFFFFFFFFFFFFFFF06 S9030319E0 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
.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
BA-013: 行番号を表示したい
•
IAR Embedded Workbench for ARMのメニュー
[ツール]-[オプション] でIDEオプションを開き、
[エディタ]-[行番号の表示]にチェックを入れることで
行番号が表示されます。
BA-014: ビルド構成DebugとReleaseの違い
•
IAR Embedded Workbenchでは新しくプロジェクトを
生成するとDebugとReleaseのビルド構成が生成されま
す。
Debug
項目
Release
あり
セミホスティング
なし
低
最適化
高
あり
C/アセンブラでデバッグ情報生成
なし
なし
マクロ定義NBDEBUG
あり
なし リンカ:小さいルーチンのインライン化
あり
CA-001: 最適化設定画面
CA-002: 最適化レベルとデバッグ情報の保持
•最適化レベル
•なし •低 *1 •中 •高(バランス) *2 •高(速度) •高(サイズ) *1 ビルド構成がDebugの場合の初期値 *2 ビルド構成がReleaseの場合の初期値 ※ デバッグ時は、「なし」か「低」に設定してください。•
変数の位置情報
•変数のスコープおよび存在情報 •ステップポイント
•ステップ実行時のソースコードと機械語の対応 •関数のステップイン/アウト •ブレークポイントの設置 •コールスタック情報
•関数を特定する情報およびコールスタック内での変数情報 最適化レベル 変数の位置情報 ステップポイント コールスタック情報 なし 保持 保持 保持 低 ほぼ保持 保持 保持 中 保持されない 保持 保持 高 保持されない 保持されない 保持 CA-002: 最適化レベルとデバッグ情報の保持CA-003: 最適化の適用範囲と個別設定
•プロジェクト全体
•ソースグループ単位
•ソースコード単位
•関数単位
プロジェクト全体 ソースグループ単位 ソースコード単位 関数単位•
プロジェクト全体ではなく、ソースグループ単位やソー
スコード単位で最適化レベルを変更する場合には以下の
設定を実施します。
CA-003: 最適化の適用範囲と個別設定
ダブルクリック グループまたはソースコード個別に上書きする際には [継承した設定をオーバーライド]にチェックCA-003: 最適化の適用範囲と個別設定
•関数単位で最適化レベルを設定するには#pragma
optimizeを使用します。
関数単位 #pragma optimize の直下に記述された関数のみ 適用される。 ファイルソースに適用されている最適化レベルを 下げる方向にのみ指定可能。 ※ファイルの最適化レベルが[中]のコードに対して #pragma optimize= high は適用できない。CA-004: 最適化手法について
次ページ以降で以下の手法について内容をご紹介
•
共通部分式除去
•
ループ展開
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); 最適化イメージ最適化例2:ループ展開
CA-004: 最適化手法について
for ( i = 0; i < 3; i++) { j[i] = i; } j[0] = 0; j[1] = 1; j[2] = 2; 入力ソースコード 最適化イメージ ループを展開することで、ループ処理のオーバーヘッドを削減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をインラインで展開することで 関数呼出のオーバーヘッドを削減
CA-005: 最適化の考え方
•最適化の手法は、効果が一定の効果が保証されるもので
はなくコンパイラによって発見的、探索的に適用されま
す。
•デバッグのしやすさ、メンテナンスのしやすさを考慮し、
サイズの削減が必要なコード、処理速度の追求が必要な
コードごとに、適用範囲(ソースファイル/グループ)を
限定して、高い最適化レベルを適用することを推奨いた
します。
•各適用モジュール毎に単体テストを行い、効果的な最適
化オプションを試行してください。
42CA-006: インクルードパスを指定するには?
•
[C/C++コンパイラ]-[プリプロセッサ]で
CB-001: RAM上への関数配置
•
__ramfunc キーワードを関数の前に追加。
__ramfunc void foo(void); 注意:
main関数開始前には使用できません。
CB-002: 変数や関数が最終的になくなってしまう
•
IAR Embedded Workbench for ARMでは、明示的に参照さ
れない変数や関数は最適化の設定によっても変わりますが、削
除されることがあります。
•絶対削除されたくない変数や関数には、以下の指定を利用でき
ます。
•拡張キーワード__root •#pragma required=xxxx • リンカで同様のことをする場合にはEA-002をご覧ください。 int gc5; #pragma required=gc5 __root int gc6;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++開発ガイドの プラグマディレクティブを ご確認ください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")); }
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};とします。
CB-006: charの符号は?
•
IAR Embedded Workbench for ARMではオプションで
CB-007: 割込みハンドラを記述するには?
•
Cortex-Mの場合
•特別なキーワードは不要です。ベクタテーブルに対応する関数名を記述します。
•
ARM7,9,11,Cortex-R/A(Cortex-M以外)の場合
•__irqキーワードを記述し、ベクタテーブルに対応する関数名を記述します。
void SysTick_Handler (void) {
/* Something to do */ }
__irq __arm void IRQ_Handler(void) {
/* Something to do */ }
CB-008: C言語の標準ライブラリについて
•
IAR Embedded Workbench ではC言語の標準ライブラ
リ<stdio.h><time.h>などを使用する事が出来ます。
•一部実装されていない機能もありますので、詳しくはマ
ニュアルをご確認ください([IAR C/C++ 開発ガイド]の
[J.3.12 ライブラリ関数])
•デバッガ接続時にはPC側のリソース(ファイルや時間)
などを利用するセミホスティングも利用可能です。
CB-009: C言語の標準ライブラリを使うためには?
•幾つかの標準関数は、ハードウェアに依存します。たとえば、printf
などは最終的に出力をするハードウェア用にコードが必要です。こ
れをローレベルインタフェースと呼んでいます。
•CB-008にあるようにデバッグ時にはデバッガ用のローレベルインタフェースが実装されて います •以下の関数を実装することで標準関数を利用できます。
•必要となる関数はどの関数を利用するかによって異なります。 __close __lseek __open __read __write __exit time clockDA-001: CoreSightテクノロジ機能・接続まとめ
名称 接続 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 分岐ト レース (実行) ・ICEのメモリに保存 →ブレーク時にパソコンに転送 ・実行履歴を確実に追跡 ・対応しているかはCPU依存 TMS TCK TDO TDI nRESET SWDIO SWDCLK SWO - - CLK D0 D1 D2 デバッグ制御 トレース機能 *M3/M4のみSerial Wire Debug
Serial Wire Viewer
DA-002: CoreSightテクノロジトレースタイミング
main() sub_1() sub_2() main() sub_1() sub_2() SWVトレース ETMトレース トレース情報が取得できない 一定間隔でサンプリング プログラムが分岐するタイミングでトレースバッファに出力DA-003:デバッグに最小限必要なピン数は?
•デバイスがSWDに対応していれば、3もしくは4本。
SWDデバッグで、最低限必要なピン数は3本(I/O、クロック、
グラウンド)、もしくはこれにリセットを加えた4本。リセッ
ト機能は必須機能ではないため、最低ということであれば3本。
•グラウンドの本数が少ないと信号が弱くなったりノイズがのる
リスクあります。(JTAGだと通常5本程度使用)一般的には
おそらくグラウンドは1本でも開発可能ですが、この精度は、
基板やICEの品質にも関わってくるためユーザー様にて確認の
必要があります。
•SWDは、一般的にCortex-A,R,Mに対応していますが、
デバッガとデバイスが共にSWDに対応していることが条件と
なります。
DA-004: SWDとJTAGのデバッグ差はあるのか?
Q. SWDを使用すると信号線が減るが、クロック差やスピード差はあるか? SWDやJTAGと比べて信号線が減りますが、実際にはCPUとの通信以外の制御部分が処理の大 半を占めるため、デバッガの動作速度の低下を体感することはありません。 Q. JTAGとSWDを比べて、できることできないことは? [JTAGでできてSWDできないこと] JTAG本来の機能である端子のバウンダリスキャンテスト [SWDでできてJTAGでできないこと] トレース機能であるSWVトレース [その他SWDのメリット] デバッグ用の端子数の減少( 5線式 ⇒ 2線式 ) 上記に伴うコネクタ実装面積の削減が可能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
DA-006:デバッグインタフェースコネクタ I-jet
標準対応(ケーブル付)
11pin, 13pinから5V供給可能 ハーフピッチ20ピンコネクタ:MIPI-20
DA-006:デバッグインタフェースコネクタ I-jet
ハーフピッチ10ピンコネクタ:MIPI-10(JTAG, SWD/SWV)
標準対応(ケーブル付)
DA-006:デバッグインタフェースコネクタ I-jet
標準ピッチ20ピン変換アダプタ:ARM-20(JTAG,SWD/SWV用)
アダプタ標準添付
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-0DA-008: デバッグ情報を含めるとコードサイズが大きくなる?
•
IAR Embedded Workbench for ARMでは、ビルドしてELFフォー
マットの実行形式を作成します。
•デバッグ情報が入ると、このELFフォーマットのファイル自体は大き
くなりますが、コードのサイズは変わりません。
ELFヘッダ プログラムヘッダテーブル セクション1 セクション2 セクションN ・・・ デバッグ情報を生成すると、 デバッグ用のセクションが 増えるためELFファイルは 大きくなります。DB-001: SWV機能の使用条件
•
MCUの対応
•Cortex-M3/M4
•
SWVトレース対応エミュレータ(ICE)
•I-jet / I-jet Lite / SEGGER社 J-Linkが対応
•
コネクタの対応
•SWOピンの接続に対応したコネクタが必要 •接続方式
•SWD接続を選択 •レジスタ設定によるSWOポートピンの有効化
•MCUによってはSWOポートピンが多重化されて他の機能に割り当てられていること があるため、FWまたはマクロで有効化する必要があるDB-002: SWV対応コネクタ
•
SWV機能はSWOピンを使用します
DB-003: SWV機能使用時のプロジェクト設定
[設定]→[ドライバ]を[I-jet/JTAGjet]を選択 [I-jet/JTAGjet] → [JTAG/SWD]で インタフェースに[SWD]を選択 ※ [一般オプション]→ライブラリ設定 stdout/stderrがSWO経由になっている と強制的にSWDが選択されるDB-004: SWV(SWO)トレース
■こんなときに・・・ • コードの流れをバックトレースしたい • コード実行時のタイムスタンプを見たい など *補足 SWVトレースは1秒間に数千サンプリング程度 なので、実行コード全てを追うことできない。DB-004: SWV(SWO)トレース
使用方法
1.SWOトレースウィンドウ設定 2. SWOトレース
DB-005: SWV(SWO)トレースでコードカバレッジ
■こんなときに・・・ • 実装されているコードが想定通りに 実行されているか確認したい。 など *補足 • デフォルトで有効となっている「コー ドカバレッジ」プラグインの機能を使 用 • サンプリングタイミングにより、抜け 落ちることがあるが、長時間トレース することで信頼性のあるデータとなる。 赤色のひし形 モジュールや関数の0% が実行されたことを示します。 緑色のひし形 モジュールや関数の100% が実行されたことを示します。 赤と緑のひし形 モジュールや関数の一部が実行されたことを示します。 黄色のひし形 文が1つも実行されていないことを示します。DB-005: SWV(SWO)トレースでコードカバレッジ
※SWVトレースが可能な状態で・・ 1.コードカバレッジ 3.デバッグ実行 4.[更新] コードカバレッジが更新表示される 使用方法DB-006: SWV(SWO)機能 データログ
■こんなときに・・・ • 特定の変数やアドレスへの読み書き アクセスをロギングしたい。 • 上記アクセスの時間を知りたい など *補足 • 変数またはアドレスは4つまで指定 可能 メニューから[I-jet/JTAGjet]-[データログ]DB-007: SWV(SWO)機能 データログ使用方法
1.グローバルや静的変数上で右クリック 2.’変数’のデータログブレークポイントを設定 3.[表示]→[ブレークポイント] (基本)観測したい変数をデータブレークポイントに設定します。 (Option)Read時のみ観測やWrite時のみ観測したい場合には以下の設定を実施くださいDB-007: SWV(SWO)機能 データログ使用方法
1.データログ
2.右クリックして有効化
DB-008: SWV(SWO)機能 データログ一覧
■こんなときに・・・
• データアクセスが何回あったか、読み書き が何回あったか確認したい。 など *補足 • 「すべてのアクセス」数が読み書きア クセスの合計より大きい場合、アクセ スの属性情報が正確にとれなかったサ ンプリングがある。 メニューから[I-jet/JTAGjet]-[データログ一覧]DB-009: SWV(SWO)機能 データログの
タイムライン表示
■こんなときに・・・ • データの変わったタイミングを時間軸上で みたい • 他の割り込みなどとの時間関係を見たい など メニューより[I-jet/JTAG-jet]-[タイムライン] タイムラインのデータログ領域を右クリックし、有効化を選択。DB-010: 割込みログ
■こんなときに・・・ • プログラム実行中に発生した割り込 みや例外をロギングしたい • 割り込みハンドラ関数の処理でか かった時間を知りたい など *ハンドラの実行時間が短い場合には“入る”と“抜ける”が対応取れないことがあります。 *SWOの制約を受けますので、すべての情報が取得できない場合があります。 メニューから[I-jet/JTAGjet]-[割込みログ]DB-010: 割込みログ
1.割込みログ 2.右クリックして[有効化] 3.デバッグ開始
DB-011: 割込みログ一覧
■こんなときに・・・
• 各割れ込みの発生回数や発生頻度を確認したい など
DB-011: 割込みログ タイムライン表示
■こんなときに・・・ • 割り込みの発生タイミングを時間軸上で見 たい • 割り込みハンドラの処理にかかった時間を 時間軸上で見たい • その他のイベントとの関係を時間軸上で見 たい など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) ITM_EVENT16(channel, value) ITM_EVENT32(channel, value) ITM_EVENT8_WITH_PC(channel, value) ITM_EVENT16_WITH_PC(channel, value) 使用できるAPIDB-013: ITMイベント 一覧
■こんなときに・・・ • 各チャンネルのITMイベント発生回数や頻 度を知りたい • 実行時間が適正な間隔になっているか知り たい • ウォッチしている値が適正な値になってい るか知りたい などDB-013: ITMイベント タイムライン
■こんなときに・・・ • ITMイベントの発生タイミングを時間軸上 で見たい • 各ITMイベント間の関係や割り込みなどの と関係を時間軸上で見たい • イベント間をドラッグドップで、経過時間 を知りたい などDB-013: ITMイベント タイムライン
1.arm_itm.hをインクルード 2.マクロをコードに記述 4.イベントログ 5.右クリックして[有効化] 6.デバッグ開始 3.ビルド&ダウンロードDB-013: ITMイベント タイムライン
1.タイムライン
2.表示したい機能の上で右クリックして[有効化]
3. 右クリックして[ズーム]→[任意の時間軸] 4. デバッグ開始
DC-001: トレース機能の使用条件
•
MCUの対応
•ETM機能の実装はMCUベンダの選択による
•Trace Dataピン(1-4本)はMCUベンダの選択による
•
トレース機能付きエミュレータ(ICE)を使用
•I-jet Trace, JTAGjet-Traceが対応 •SEGGER社J-Traceが対応 •
コネクタの対応
•トレースピンの接続に対応したコネクタが必要 •レジスタ設定によるトレースポートピンの有効化
•MCUによってはトレースポートピンが多重化されて他の機能に割り当てられて いることがあるため、FWまたはマクロで有効化する必要があるDC-002: Cortex-M用ETMトレース対応コネクタ
•
MIPI-20
ETMトレース用クロック ETMトレース用データポート
DC-003a: ETMトレース使用時のプロジェクト設定
[デバッガ]-[設定]
[設定]→[ドライバ]を[I-jet/JTAGjet]を選択
DC-003a: ETMトレース使用時のプロジェクト設定
設定項目の詳細は
[ヘルプ]→[Embedded Workbench デバッグ ガイド] を参照
[I-jet/JTAGjet]-[ETMトレース設定]。
ETM Trace settingで、[設定を試す]をクリック。 クロック周波数のトレースの値が設定されます。
DC-004:ETMトレース表示
[ETMトレース]
DC-005: ETM関数トレース表示
[ETM関数トレース]
DC-007: コードカバレッジ:アセンブラ
DC-008:ETMトレース用のブレークポイント設定
トレース取得を開始したいコード上で 右クリックし、 [ブレークポイントの切り替え(トレース開始)] を指定 トレースを停止したいコード上で [ブレークポイントの切り替え(トレース停止)] を指定 ※ブレークしたときに、トレースデータが ICEから読み出され画面に表示されるDC-009: ETMトレース タイムラインで
コールスタック表示
DD-001: デバッグウィンドウ:ブレークポイント
■こんなときに・・・ • ブレークポイントの一覧が見たい • ブレークポイントを貼っているソースコー ドに飛びたい • 一時的にブレークポイントを全て無効にし てデバッグしたい。 • ブレークポイントを削除したい • ブレークポイントを編集したい などDD-002: デバッグウィンドウ:逆アセンブリ
■こんなときに・・・ • アセンブラレベルでステップ実行したい • 実行中のアドレスを見たい • ライブラリなど、ソースファイルのないプ ログラムをデバッグしたい。 • 最適化の影響を確認したい などDD-003: デバッグウィンドウ:メモリ
■こんなときに・・・ • 現在のメモリの値を見たい • メモリをPC上の保存したい • メモリ上でデータを検索したい などDD-004: デバッグウィンドウ:シンボルメモリ
■こんなときに・・・
• アドレス順に変数や関数の一覧を見たい。 など
DD-005: デバッグウィンドウ:レジスタ
■こんなときに・・・
• 現在の各種レジスタの値が見たい
• デバッグ用にレジスタの値を変えてみたい など
DD-006: デバッグウィンドウ:ウォッチ
■こんなときに・・・ • 特定の静的変数やグローバル変数の値をモ ニタリングしたい • ローカル変数の値をスコープ内でモニタリ ングしたい などDD-007: デバッグウィンドウ:ローカル
■こんなときに・・・
• 関数内のローカル変数や引数を自動的にモ ニタリングしたい
DD-008: デバッグウィンドウ:静的変数
■こんなときに・・・
• プログラム内の静的変数やグローバル変数 を自動的にモニタリングしたい
DD-009: デバッグウィンドウ:自動(オート)
■こんなときに・・・ • ステップ実行でデバッグをしているときに 近辺の変数や関数情報を自動的にモニタリ ングしたい などDD-010: デバッグウィンドウ:ライブウォッチ
■こんなときに・・・ • 特定の静的変数やグローバル変数を、プロ グラム実行状態のまま定期的にモニタリン グしたい など 更新間隔は、[ツール]-[オプション] [デバッグ]で更新間隔にて設定DD-011: デバッグウィンドウ:クイックウォッチ
■こんなときに・・・ • 変数を簡単な式で評価したい Int_Glob> 1 など 真なら1 • 任意のタイミングでC-Spyマクロを 実行したい など *補足 • C-Spyマクロは非常に強力かつ柔軟 [ヘルプ]→[Embedded Workbench デバッ グガイド]の[C-SPY マクロの使用]を参照DD-012: デバッグウィンドウ:コールスタック
■こんなときに・・・
• 実行中の関数の呼び出し元を知りたい • 各関数の引数も見たい
DD-013: デバッグウィンドウ:スタック
■こんなときに・・・ • 現在のスタック使用状況を見たい • 現在のスタック使用率を見たい • それまでの最大スタック使用量を知りたい など *補足 • OSを搭載している場合、OS側で各タスクの スタックを管理するので、別途プラグインな どを活用してスタックを確認くださいDD-013: デバッグウィンドウ:スタック
•RTOSを未使用の場合には、動的スタック使用量の解析が使用できま
す。
•有効にするには、[ツール]-[オプション] [スタック]-[グラフィカル
スタックの表示・・・]をオンにします。
動的なスタック使用量の解析 動的な解析の表示DD-014: デバッグウィンドウ:ターミナルI/O
■こんなときに・・・
• printfデバッグがしたい
• デバッグ用にパラメータなどをscanfでIAR Embedded Workbench for ARMの画面上 から入力したい など *補足 • <stdio.h>をinclude • コードサイズが大きくなってしまう場合は、 [プロジェクト]→[オプション]→[一般オプ ション]→[ライブラリオプション] から調整可能。 • printfはデフォルトだとターミナルIOに出力 されるが、ユーザコードで実装することで UARTなどに変更可能
DD-015: デバッグウィンドウ:イメージ
■こんなときに・・・ • 現在のイメージ(デバッグ情報)を確認し たい など *補足 • ブートローダプロジェクトなどで複数バイナ リをデバッグするとき以外は出番なしDE-001: シミュレータの設定
DE-002: シミュレータの出来る事
3.割込みを 疑似発生 C-SPYシミュレータで出来ることは以下の通りとなります。 1. 命令レベルのシミュレーション 2. メモリの構成、検証 3. 割込みシミュレーション 4. イミディエイトブレークポイントとC-SPY マクロシステムを使用した周辺シ ミュレーション 1.CPUコア 4.C-SPYマクロ 周辺の模擬 デフォルトではCPUコア単体+メモリの状態でのシミュレーションが可能です。 周辺や割込みを使うシミュレーションは3または4に関してユーザ側で準備が 必要となります。 2.メモリDE-003: 割込みシミュレーション
① ② ③ ④ 割込みシミュレーションの使用法を説明します シミュレータ動作時に、 ①シミュレータ→②割込み設定 割込み設定画面で、 ③割込みシミュレーションを有効にするをONに ④新規作成を押す 割込みの編集画面になるので、⑤初回の割込みを起こしたいサイクル、周期など を設定してください。あとは通常の手順でシミュレーションを実施ください。DE-004:シミュレーションによる再現性
CPUコア単体でのシミュレーションとなります。
“C-SPYデバッガガイド”に「C-SPY シミュレータは、
ターゲットプロセッサの機能をソフトウェアで完全にシ
ミュレーションするため、ハードウェアがすべて揃ってい
なくてもプログラムロジックをデバッグできます。」と記
載があるように、シミュレータは実機がない場合などに多
く用いられており、実機がある場合には実機を用いてのソ
フト開発が適しています。
DF-001: デバッグ開始と同時にプログラムをスタート
•
[デバッガ]-[設定]-[指定位置まで実行]に__exitを指定す
DF-003:ローカル変数はデバッグ時に観測できる?
•[ローカル]ウィンドウには、ローカル変数、つまりア
クティブな関数の自動変数と関数パラメータを表示する
ことが可能です。
•ただ、コンパイラの最適化により正しい値を表示できな
い場合や不明となる場合があります。
•デバッグ時にローカル変数を見るためには最適化を無し、
もしくは、低に設定をしてください。
EA-001: リンカ設定に関する資料は?
•C/C++開発ガイドの“リンカ設定ファイル”を
ご確認ください
•IARシステムズの日本法人が作成した簡易ガイドもご活用
ください。以下のページからダウンロードください。
http://www.iar.com/jp/ilink-setting-guide/
EA-002: リンカ設定で変数/関数を必ず出力するには?
• IAR Embedded Workbench for ARMでは、明示的に参照されない変数や
関数は最適化の設定によっても変わりますが、削除されることがあります。 • 絶対削除されたくない変数や関数には、リンカで必ず出力する 指定をする事ができます。 • ソースコードで同様のことをする場合にはCB-002をご覧ください。 [リンカ]-[入力]-[シンボルをキープ]で 変数や関数名を登録します。
EA-003: スタックサイズを変更するには?
•
IAR Embedded Workbench for ARMのデフォルトの
設定ではスタックサイズを以下のオプション画面で変更
できます。
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" 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
EA-005: 静的なスタック解析の補助情報を与える
•
静的なスタック解析では以下の2つ方法で解析の
補助情報を与えることができます。
•
ソースコード上に#pragmaで補助情報を与える
EA-005: 静的なスタック解析の補助情報を与える
•
#pragma calls →関数が呼ばれることを明示的に指定
•
#pragma call_graph_root → 解析のrootの指定
ソースコード上に#pragmaで補助情報を与える
void Fun1(), Fun2();
void Caller(void (*fp)(void)) {
#pragma calls = Fun1, Fun2
(*fp)(); }
#pragma
call_graph_root="interrupt" void My_Handler (void ) { ・・・
EA-005: 静的なスタック解析の補助情報を与える
制御ファイルで補助情報を与える
possible calls main: f1; max recursion depth recf: 10; call graph root [ interrupt ]: SysTick_Handler,Default_Handler;
EA-006: 領域の定義方法
•section領域を定義する方法
#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つずつ指定する方法 範囲で指定する方法
EA-007: 未使用領域を特定のコードで埋めたい
[リンカ]-[チェックサム]にて、[未使用コードメモリをフィルする]にチェックを入れて、 フィルパターンを設定し、対象領域の開始アドレスと終了アドレスを指定してください。
EA-008: ファイルごとにコードセクションを定義したい
•
個別オプションにてコードセクションを定義することも
EA-009: 変数をC言語で記述した順序で配置したい
• IAR Embedded Workbench for ARMのリンカは、コード効率などの点から、
適宜並び替えて配置するため、記述した順番での配置とはなりません。 • 順番を指定するための方法を以下に紹介します。 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
EA-010: リンカマップを出力するには?
•
[リンカ]-[リスト]でリンカマップファイルの生成を選択ください。
•
ビルドを行うと、ワークスペースのOutputフォルダ内に、マップ
ファイルが表示され、ダブルクリックすることでエディタ画面で見
ることができます。
EA-011:ライブラリを組込むとコードサイズが大きい?!
• C言語の標準ライブラリのなかでprintf系、scanf系のライブラリは比較的
大きなコードサイズとなります。そのためIAR Embedded Workbench for ARMではオプションで、使用するライブラリの大きさを指定することが出来 ます。詳しは[C/C++ 開発ガイド]の、Printf フォーマッタの選択、Scanf フォーマッタの選択をご確認ください。
EA-012:チェックサムの実装法がわからない
•
弊社ではプログラミング自体のサポートはしておりませ
んが、FAQに参考となるドキュメントがありますのでご
活用ください。
LA-001: ARMの命令セット
•ARMの命令種類
命令セット ビット 特徴 ARM 32bit 32ビット命令セット *パフォーマンス高いがコード密度低い Thumb 16bit 16ビット命令のサブセット *コード密度高いがパフォーマンスやや低い ARMv6-M Thumb16bit + 32bit 16ビット命令+Thumb2の32ビット命令を6個サポート。
ARMv7-M Thumb2 16bit + 32bit 16ビット+32ビット混在の命令セット。 *パフォーマンスおよびコード密度高い •
ARMファミリー毎の命令対応
名称 命令セット 特徴 ARM6 ARMARM7 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を大幅に拡張しており高い性能とコード効率 を実現。
LA-002: IAR Embedded Workbench for ARMで
CPUコアの選択と命令の選択
•
プロジェクトのオプション画面
LA-003: IAR Embedded Workbench for ARMの
スタートアップシーケンス
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 ランライム ライブラリの コード ただし 上書き可能 ユーザコード 参照 ジャンプ
LA-004: MB9BF166xでICE接続が出来なくなる
•とても問い合わせが多いです。
•ICEで使用するピンを多用途に変更してしまっています。
•フラッシュをクリアしていただく必要があります。
→ これについては弊社ツールでは実施できませんので、チップベンダ/代理店に お問い合わせください。 Cortex-MにICE接続するためには、JTAG接続の場合 TCK, TDI, TMS, TDO、 nRESET SWD接続の場合 SWCLK, SWDIO