重要な情報
-
文字の分類(
ctype.h
)に使用される、スペースを消費するテーブルを回避するには、ctype.h
ファイルがインクルードされる前にプリプロセッサシンボル__NO_CTYPE_TABLES
を定義してください。 -
Cortex-M3用のコードを生成する際に、リストにベースレジスタを持つLDRDをコンパイラが回避するようになりました。これは、Cortex-M3の誤り602117への対応策です。
-
EWARM 6.10.2の新機能:
--guard_calls
コマンドラインオプションが導入されました。--guard_calls
は、常にEC++/C++で記述された、スレッドセーフのライブラリ関数呼出しを必要とするアプリケーションで使用する必要がある点に注意してください。詳しくは、開発ガイドを参照してください。--no_guard_calls
コマンドラインオプションが削除されました。--aeabi
コマンドラインオプションの動作が変更になり、保護呼出しがデフォルトで使用されなくなりました。
ARM 5.xおよび6.10.1用IAR C/C++ CompilerからARM 6.10.2用IAR C/C++ Compilerへの移行:
--aeabi
(--no_guard_calls
なし)は--aeabi --guard_calls
に置換
--aeabi --no_guard_calls
は--aeabi
に置換
-
EWARM 6.20の新機能:
time()
関数を実装したユーザは、名称を__time32()
に変更してください。詳しくは、開発ガイドを参照してください。 -
CMSIS統合に関する特記事項:
アプリケーションのソースコードにCMSISヘッダファイルが明示的にインクルードされている場合、[CMSISを使用]チェックボックス[プロジェクト]>[オプション]...>[一般オプション]>[ライブラリ構成]>[CMSISを使用]を選択しないでください。一部のCortex-Mアプリケーションの例には、CMSISのソースファイルが明示的にインクルードされています。これらのプロジェクトでは前述のチェックボックスを選択しないでください。
ただし、ARM用IAR C/C++ Compilerの進化によって、旧バージョンのCMSISと最新バージョンのコンパイラは互換性がありません。この問題を解決する簡単な一例は以下のとおりです:
a) F4を押して間違ったソース(ヘッダ)ファイルをエディタで開きます。通常はcore_cm3.h
というファイル名です。
b) エディタウィンドウの[ウィンドウ]タブを右クリックして、[ファイルプロパティ...]を選択します。
c) ファイル名に何らかの文字を追加(または削除)して、コンパイラが見つけられないようにします。
d) プロジェクトオプションを変更します:[プロジェクト]>[オプション...]>[一般オプション]>[ライブラリ構成]>[CMSISを使用]を選択します。
手順 a) から c) は、複数のファイルに対して行わなければならないことがあります。通常はこれらのファイル名core_cm0.h
、core_cm3.h
、core_cm4.h
、core_cmFunc.h
、core_cmInstr.h
です。
ARM用IAR Embedded WorkbenchでのCMSISの統合について詳しくは、開発ガイドを参照してください。
新機能
- なし。
既知の問題
-
C/C++ライブラリのヘッダファイル
time.h
が、ライブラリ関数mktime
を宣言します。分割されたタイムコンポーネントtm_isdst
(tm
構造体関数パラメータの一部)にあるマイナスの値を用いて呼び出された場合、mktime
はDaylight Saving Timeが指定の時間に有効なのかどうかを判断できません。
[EW14632]
プログラム修正
-
MISRA-C 2004を選択したときに、診断メッセージに正しい規則番号が記載されるようになりました。
[EW22347] -
定数式の根底型が他の式と同じように評価されるようになりました。これは、MISRA-C:2004 6.10.4の特定の定数式に関する規則から逸脱します。IARシステムズとMISRA-C委員会はどちらも、この規則に意図が反映されていないと考えています。
[EW22373] -
クラスコンストラクタに文字列リテラルがあるメンバ
char
配列を初期化しても、インターナルエラーが発生しなくなりました。
[EW22503] -
Cortex-M0でコンパイルする際に、
__REV16
組込み関数が使用できるようになりました。
[EW22715] -
符号のない式の補数
~
が、式に右シフトや定数を持つビット単位が含まれる場合に、誤って最適化されなくなりました。
[EW22725] -
ファイルスコープや名前空間スコープの変数を初期化するときに、C++ 一時オブジェクトが、正しく作成されるようになりました。
[EW22751] -
テストの直前にシフトされた式の「未満」、「以下」、「より大きい」、「以上」の符号付きテストで、正しい結果が出るようになりました。
[EW22752]
ユーザガイドの訂正
-
開発ガイドに説明がない新しい組込み関数が多数あります。
__PLI
構文:
void __PLI(void const *);
説明:
PLI
命令を挿入します。この組込み関数では、ARMv7アーキテクチャを使用する必要があります。__PLD
構文:
void __PLD(void const *);
説明:
PLD
命令を挿入します。この組込み関数では、ARMv7アーキテクチャを使用する必要があります。__PLDW
構文:
void __PLDW(void const *);
説明:
PLDW
命令を挿入します。この組込み関数には、MP拡張(Cortex-A5とCortex-A9)を持つARMv7アーキテクチャが必要です。__MCR2
構文:
void __MCR2(__ul coproc, __ul opcode_1, __ul src, __ul CRn, __ul CRm, __ul opcode_2 );
パラメータ:
|
コプロセッサ番号 0..15 |
|
コプロセッサ固有の処理コード |
|
コプロセッサに書き込まれる値 |
|
書込み先のコプロセッサレジスタ |
|
追加コプロセッサレジスタ。使用しない場合はゼロに設定します。 |
|
追加コプロセッサ固有の処理コード。使用しない場合はゼロに設定します。 |
MCR2
)を挿入します。値は、コプロセッサレジスタに書き込まれます。パラメータcoproc
、opcode_1
、CRn
、CRm
、opcode_2
は、MCR2
命令内にエンコードされるため、定数でなければなりません。この組込み関数にはARMモードの場合、ARMv5Tアーキテクチャまたはそれ以降、Thumbモードの場合はARMv6T2かそれ以降が必要です。
__MRC2
構文:
unsigned long __MRC2( __ul coproc, __ul opcode_1, __ul CRn, __ul CRm, __ul opcode_2 );
パラメータ:
|
コプロセッサ番号 0..15 |
|
コプロセッサ固有の処理コード |
|
読込み元のコプロセッサレジスタ |
|
追加コプロセッサレジスタ。使用しない場合はゼロに設定します。 |
|
追加コプロセッサ固有の処理コード。使用しない場合はゼロに設定します。 |
MRC2
)を挿入します。指定されたコプロセッサレジスタの値を返します。パラメータcoproc
、opcode_1
、CRn
、CRm
、opcode_2
は、MRC2
命令内にエンコードされるため、定数でなければなりません。この組込み関数にはARMモードの場合、ARMv5Tアーキテクチャまたはそれ以降、Thumbモードの場合はARMv6T2かそれ以降が必要です。
その他
-
ハードウェアの問題に対する対策を考案:
-
NXPデバイスLPC2478におけるCore.1の機能上の問題:ThumbステートでのAbort Linkレジスタの間違ったアップデート。
iccarm --enable_hardware_workaround=NXP_Core.1
を用いて作成された対策
-
リリース履歴
-
リリース履歴を参照してください。