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. “」あたりをキーワードにしてみると、役に立つ情報に当たる事が多いです。
関連記事
コメントを残す