Renesas Synergy™

FAQ 3000274 : E0562310 CC-RXコンパイラでのasm関数の使用について

Q: 質問

CC-RXコンパイラで下記のようにアセンブラ命令を記述すると、2つともエラーメッセージ(E0562310)が
出力されます。マニュアル記載通りに命令を書いているはずなのですがどこが間違っているのでしょうか?

__asm("PUSHC PSW");
__asm("POPC PSW");


A: 回答

E0562310に続くメッセージをご確認ください。

E0562310:Undefined external symbol "___asm" referenced in "ファイル名"

と出力されておりませんでしょうか?
この場合は、シンボル名 __asm が未定義であるとの意味です。
CC-RXは __asm()関数をサポートしておりません。

Cソースコード中にインラインでアセンブリ記述する場合、#pragma inline_asm をご使用ください。
CC-RXコンパイラ ユーザーズマニュアル p.349記載 (5) アセンブラ記述関数インライン展開 機能です。

例)
#pragma inline_asm asm_push
void asm_push(void)
{
PUSHC PSW
}

#pragma inline_asm asm_pop
void asm_pop(void)
{
POPC PSW
}

void main(void)
{
asm_push(); // ここで PUSHC PSW に展開されます。
asm_pop(); // ここで POPC PSW に展開されます。
}

#pragma inline_asmのご使用には、マニュアル説明箇所の注意事項をご確認ください。
PSWの操作には組み込み関数でget_psw()と set_psw()も存在していますので必要に応じてご利用ください。

参考URL
CC-RXコンパイラ ユーザーズマニュアル

適用製品

RXファミリ用C/C++コンパイラパッケージ
他にご質問がございましたら、リクエストを送信してください