[MPLAB] MPASMアセンブラで良く出るエラーメッセージとその対処一覧

PICの開発をMPLABを使用してアセンブラ(MPASM)で開発しているときに、良く表示されがちなエラーメッセージとその対処法の一覧です。

開発を始めたばかりは、特にエラーの意味が分かり辛く、デバッグに手間取る事もあるので参考にしてみてください。

※以降のメッセージと対処法はP16F84Aの場合を元に説明しています。
 他のPICを使用している場合は、一部対処法が異なる場合もあるかもしれません。
 その場合は各自読み替えてください。



よくあるエラーメッセージ一覧


Register in operand not in bank 0. Ensure that bank bits are correct.


メッセージ例


Message[302] TEST.ASM 99 : Register in operand not in bank 0.  Ensure that bank bits are correct.




内容

オペランドで指定されたレジスタはバンク0のものでは有りません。
バンク指定のビットが正しいかを確認してください。


対処方法

P16F84Aの場合、バンク指定のコードは以下のようになります。

BSF		STATUS, RP0		; bank1に切替える
BCF		STATUS, RP0		; bank0に切替える


上記エラーメッセージは、バンク1のレジスタを操作しようとしたときに表示され、正しくバンク切り替えを行っていても表示されるようです。

このメッセージは通常は無視してもかまいませんが、気になる場合はファイルの先頭に以下の1行を追加すると、メッセージが表示されなくなります。

ERRORLEVEL      -302





Expected (END)


メッセージ例


Error[129]  TEST.ASM 99 : Expected (END)




内容

プログラムの最後にEND擬似命令が有りません

対処方法

ファイルの最後にEND命令を追加します



Found label after column 1. (EQU命令で発生)


メッセージ例


Warning[207] C:\HOME\PROJECT\TEST\TEST.ASM 11 : Found label after column 1. (LOOP_CNT)



内容

以下のようにEQU命令を使用した際に、行の頭にスペース(あるいはタブ)が入っています。

	LOOP_CNT	EQU	0x20


MPASMはEQU命令で使用するラベルは1カラム目から始まる事を想定しているため、行頭にスペースがあると上記の警告が表示されます。


対処


以下のように先頭のスペースを取り除きます

LOOP_CNT	EQU	0x20





Found directive in column 1. (xxxx)


メッセージ例


Warning[205] TEST.ASM 99 : Found directive in column 1. (ERRORLEVEL)




内容

以下のようにディレクティブの指定文が、1カラム目から始まっています

ERRORLEVEL      -302



MPASMに対するディレクティブ(指示)は、タブまたはスペースによるインデントがされている事を期待しているため、上記警告が表示されます。


対処

行頭にタブかスペースを入れ、インデントします。

	ERRORLEVEL      -302





Found opcode in column 1. (xxxx)


メッセージ例


Warning[203] TEST.ASM 29 : Found opcode in column 1. (CLRF)




内容

アセンブラの命令(ニーモニック)が,以下のように行頭から始まっています。
(理由の詳細は、前述のWarning[205]も参考にしてください)

CLRF	TRISA




対処

行頭にタブかスペースを入れ、インデントします。

	CLRF	TRISA






良く分からないエラーが出たときにすべき事


初めての開発環境を使用してプログラムを作成していると、分からないエラーメッセージが表示されて、プログラムのコンパイルが正しく行えない場合が良く有ります。

このような場合は、以下の3点に気をつけてチェックを行うと比較的スムーズにエラーを取り除く事が出来ます。


1.OUTPUTウィンドウの内容(コンパイル結果のエラーメッセージ)をよく読む

プログラム初心者の場合、MPLABの開発環境ではエラーメッセージが英語で表示されるため、英語が苦手な人はメッセージを読まずに、エラーの箇所を調査しようとしてしまうことが多いです。

ですが、エラーメッセージは簡単な英語の場合が多いので、落ち着いてメッセージを読んでみると意外と意味が分かる場合も多いです。分からない単語がある場合も、都度google検索などで単語を調べておくとよいです。今後同様のエラーが出た場合に調査が速くなるし、英単語の勉強にもなります。


2.エラーが出ている行を確認する

たいていのコンパイラ(アセンブラ)では、エラーが発生した際エラーメッセージと共に、エラーが発生した行が表示されています。

例えば以下のメッセージの場合、問題が29行目で発生している事がわかります。(MPLABでは親切な事にエラーメッセージをダブルクリックすると、ソースコードウィンドウの該当行にジャンプしてくれます)

Warning[203] TEST.ASM 29 : Found opcode in column 1. (CLRF)



たいていのエラーはここで提示された行か、そのすぐ上の行でエラーが発生している事が多いので、そこを重点的にチェックしてみましょう。


3.エラーメッセージを丸々コピーしてgoogleで検索する

あなたが遭遇したエラーは、大抵の場合他の人も起こした事があるミスです。
先人の方たちは、そのときの事をblogなどに残してくれていたりする事も多いので、エラーメッセージをそのままgoogle検索してみると、解決方法が載っている場合も多いです。

この際に注意するのは、何をキーワードにして検索するかです。
例えば、下記のメッセージが出た場合…

Warning[203] TEST.ASM 29 : Found opcode in column 1. (CLRF)



先頭の”Warning[203]”にある、203は各エラーに対して割り振られた固有のエラーコードである可能性が高いので有力な情報です。
次の”TEST.ASM 29″は、ファイル名と行番号を示しています。ファイル名に何をつけるかは人によって異なりますし、行番号はこれもプログラムによって異なるので、この情報は、google検索を行う上ではあまり役立ちません。
最後の”Found opcode in column 1. “はエラーメッセージなのでこれも有力な情報です。

なので、検索を行う場合は「MPASM Warning[203]」や、「MPASM “Found opcode in column 1. “」、「MPASM “Warning[203]” “Found opcode in column 1. “」あたりをキーワードにしてみると、役に立つ情報に当たる事が多いです。



関連記事

コメントを残す

メールアドレスが公開されることはありません。