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");
[...]
全ての製品名は、それぞれの所有者の商標または登録商標です。