IT-block が途中で終了してます

テクニカル・ノート 31138

アーキテクチャ:

ARM

コンポーネント:

compiler

更新日:

2018/09/04 6:57

はじめに

IAR Embedded Workbench for ARMバージョン7.30(およびそれ以前)では、以下のように構造体を記述することができました。

[...]
asm("ITE EQ");
asm("MRSEQ R0, MSP");
asm("MRSNE R0, PSP");
[...]

これはバグであり、IAR Embedded Workbench for ARMバージョン7.40.1で修正されています。

上記のようにコードを記述すると、以下のような診断メッセージが表示されます。

Error[Ta117]: IT-block ends prematurely, or there is a label within the IT-block

解説

上記の構造体は、asm()ステートメントの間に通常のCソースコードを記述できるため、安全ではありません。

推奨する記述方法

この構造体を、1行のインラインアセンブラステートメントに変更し、それを複数の行にわたって記述します。

上記の構造体を以下のように書き直します。

[...]
asm("ITE EQ \n"
"MRSEQ R0, MSP \n"
"MRSNE R0, PSP");
[...]

 

 

全ての製品名は、それぞれの所有者の商標または登録商標です。

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。