2024.12.1
前へ
次へ
ホームページトップへ戻る


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第168回]



●/VERIFYの問題表示(2)

前回は、エラーの発生後に/ERASEを実行したあと/PICWRを実行してしまったのでPIC18F2550にもとからあったプログラムは消去されてしまい再現テストができなくなってしまいました、と書いたのですが再現テストはできるじゃないかということに気が付きました。
全く同じ再現テストをすることは不可能ですが、それに近いエラーを発生させるテストならばできそうです。
現在PIC18F2550には/ERASEを実行後に/PICWRを実行したプログラムが正しく書き込まれています。
そこに別の短いプログラムを上書きすれば同じようなエラーが表示されるはずです。
さっそく実行してみました。
logfile piciolog\1129183859.txt open
*** pic i/o ***
picio-30 connected
>/hload bs2450_a.hex
loading bs2450_a.hex ...
i=4211,binbfend=1860
>/verify
startcode=01
i=6,b=2,[04]0000[01]*i=14,b=4,[00]0000[01]*i=22,b=4,[00]0008[01]*i=42,b=16,[00]0020[01]*i=62,b=16,[00]0030[01]*i=82,b=16,[00]0040[01]*i=102,b=16,[00]
0050[01]*i=122,b=16,[00]0060[01]*i=142,b=16,[00]0070[01]*i=162,b=16,[00]0080[01]*i=182,b=16,[00]0090[01]*i=202,b=16,[00]00a0[01]*i=222,b=16,[00]
00b0[01]*i=242,b=16,[00]00c0[01]*i=262,b=16,[00]00d0[01]*i=282,b=16,[00]00e0[01]*i=302,b=16,[00]00f0[01]*i=322,b=16,[00]0100[01]*i=342,b=16,[00]
0110[01]*i=362,b=16,[00]0120[01]*i=382,b=16,[00]0130[01]*i=402,b=16,[00]0140[01]*i=422,b=16,[00]0150[01]*i=442,b=16,[00]0160[01]*i=462,b=16,[00]
0170[01]*i=482,b=16,[00]0180[01]*i=502,b=16,[00]0190[01]*i=522,b=16,[00]01a0[01]*i=542,b=16,[00]01b0[01]*i=562,b=16,[00]01c0[01]*i=582,b=16,[00]
01d0[01]*i=602,b=16,[00]01e0[01]*i=622,b=16,[00]01f0[01]*i=642,b=16,[00]0200[01]*i=662,b=16,[00]0210[01]*i=682,b=16,[00]0220[01]*i=702,b=16,[00]
0230[01]*i=722,b=16,[00]0240[01]*i=742,b=16,[00]0250[01]*i=762,b=16,[00]0260[01]*i=782,b=16,[00]0270[01]*i=802,b=16,[00]0280[01]*i=822,b=16,[00]
0290[01]*i=842,b=16,[00]02a0[01]*i=862,b=16,[00]02b0[01]*i=882,b=16,[00]02c0[01]*i=902,b=16,[00]02d0[01]*i=922,b=16,[00]02e0[01]*i=942,b=16,[00]
02f0[01]*i=962,b=16,[00]0300[01]*i=982,b=16,[00]0310[01]*i=1002,b=16,[00]0320[01]*i=1022,b=16,[00]0330[01]*i=1042,b=16,[00]0340[01]*i=1062,b=16,[00]
0350[01]*i=1082,b=16,[00]0360[01]*i=1102,b=16,[00]0370[01]*i=1122,b=16,[00]0380[01]*i=1142,b=16,[00]0390[01]*i=1162,b=16,[00]03a0[01]*i=1182,b=16,[00]
03b0[01]*i=1202,b=16,[00]03c0[01]*i=1222,b=16,[00]03d0[01]*i=1242,b=16,[00]03e0[01]*i=1262,b=16,[00]03f0[01]*i=1282,b=16,[00]0400[01]*i=1302,b=16,[00]
0410[01]*i=1322,b=16,[00]0420[01]*i=1342,b=16,[00]0430[01]*i=1362,b=16,[00]0440[01]*i=1382,b=16,[00]0450[01]*i=1402,b=16,[00]0460[01]*i=1422,b=16,[00]
0470[01]*i=1442,b=16,[00]0480[01]*i=1462,b=16,[00]0490[01]*i=1482,b=16,[00]04a0[01]*i=1502,b=16,[00]04b0[01]*i=1522,b=16,[00]04c0[01]*i=1542,b=16,[00]
04d0[01]*i=1562,b=16,[00]04e0[01]*i=1582,b=16,[00]04f0[01]*i=1602,b=16,[00]0500[01]*i=1622,b=16,[00]0510[01]*i=1642,b=16,[00]0520[01]*i=1662,b=16,[00]
0530[01]*i=1682,b=16,[00]0540[01]*i=1702,b=16,[00]0550[01]*i=1722,b=16,[00]0560[01]*i=1742,b=16,[00]0570[01]*i=1762,b=16,[00]0580[01]*i=1782,b=16,[00]
0590[01]*i=1802,b=16,[00]05a0[01]*i=1820,b=14,[00]05b0[01]*i=1826,b=2,[00]2040[01]*i=1832,b=2,[04]0000[01]*i=1840,b=4,[00]0000[01]*i=1846,b=2,[00]
0005[01]*i=1856,b=6,[00]0008[01]*
>/hload asmtest2.hex
loading asmtest2.hex ...
i=217,binbfend=88
>/picwr
startcode=01
i=6,b=2,[04]0000*i=14,b=4,[00]0000*i=34,b=16,[00]0020*i=54,b=16,[00]0030*i=60,b=2,[04]0000*i=68,b=4,[00]0000*i=74,b=2,[00]0005*i=84,b=6,[00]0008*
>/verify
startcode=01
i=6,b=2,[04]0000[01]*i=14,b=4,[00]0000[01]*i=34,b=16,[00]0020[0f]*verify error! 0,10-00
i=54,b=16,[00]0030[0f]*verify error!20,55-50
i=60,b=2,[04]0000[0f]*verify error!31,5e-4e
i=68,b=4,[00]0000[01]*i=74,b=2,[00]0005[01]*i=84,b=6,[00]0008[01]*
error! erc=0 
>/verify
startcode=0f
i=6,b=2,[04]0000[01]*i=14,b=4,[00]0000[0f]*verify error! 0,10-00
i=34,b=16,[00]0020[0f]*verify error!20,55-50
i=54,b=16,[00]0030[0f]*verify error!31,5e-4e
i=60,b=2,[04]0000[01]*i=68,b=4,[00]0000[01]*i=74,b=2,[00]0005[01]*i=84,b=6,[00]0008[0f]*verify error! 8,0f-03

error! erc=0 
>/exit

リモート接続を終了しました
logfile closed at Fri Nov 29 18:44:34 2024

上のリストの説明です。
まず最初に現在のPIC18F2550の中身を確認しました。
PIC18F2550に/ERASE後に/PICWRを実行して書き込みを行なったことについては前回文章で書いただけですからここで念のためにその中身のベリファイを行ってPIC18F2550に/PICWRコマンドが正しく実行されたことを確認しておきたいと思ったからです。
書き込んだ元のプログラムファイルはBS2450_a.HEXです。
そこに別の短いプログラムを上書きします。
ASMTEST2.HEXです。
/ERASEを実行しないで/PICWRを実行したのでその後に実行した/VERIFYでエラーが表示されました。
おお。
前回の問題表示と同じです。
最初のエラー表示は
i=34,b=16,[00]0020[0f]*verify error! 0,10−00
です。
このときの書き込みデータの先頭アドレスは0020なのにエラー発生アドレスとしてPICから受信した下位アドレスは0です。
前回と同じです。
その前を見ると
i=14,b=4,[00]0000[01]*
になっていて正常完了したときのコード[01]を受信していますがこのときのアドレスが0000ですから多分ここでエラーが発生したと考えられます。
もとになったHEXファイルの中身を下に示します。
:020000040000FA
:0400000010EF00F00D
:10002000550E936E0FEE93F0EF6A100E046E500EA5
:10003000045ED8B01FEF00F02D9020EF00F02D806F
:020000040030CA
:0400000000091F1EB6
:020005008381F5
:060008000FC00FE00F40E5
:00000001FF

上から2行目の
:0400000010EF00F00D
が該当する部分です。
04はデータバイト数(b=4)です。
その後ろの0000はデータの先頭アドレスでその後ろの00はこの行の型コードです。
その後ろの10EF00F0が書き込みを行なった4バイトのデータです。
最後の0Dはチェックサムです。
ここにもとのデータの10があります。
そのアドレスは0000です。
ベリファイエラーで表示された10−00はここに間違いありません。
前回の問題が再現されました。
なぜこんなおかしなことが起きてしまうのか?
ひょっとするとCppコンパイラがとんでもないコードを吐いてしまうのか?
あるいは悪霊のしわざなのか?
原因がさっぱりわからずまるっと1日苦悶してしまいました。
が。
今回この記事を書いていて「あれ?」
あることに気が付きました。
ログでは/VERIFYを2回続けて実行しています。
その2回目の表示をよくよく見てみましたら。

1回目の/VERIFYでは
startcode=01
なのに2回目では
startcode=0f
になっています。
ここは01以外にはならないはず。
それが0Fということは。
あ。
ひょっとしたら。
プログラムミスの可能性があることに気が付きました。
多分その線だと思うのですが、そこを追求するにはもう少し時間が必要です。

次回に続きます。

PICBASICコンパイラ[第168回]
2024.12.1 upload

前へ
次へ
ホームページトップへ戻る