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


PICBASICコンパイラ

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

[第69回]



●HEXファイル比較データの検証(2)

この4日ほどの間PIC WRITERの闇の中を迷走しておりました。
危うく底なし沼にはまってしまうところでした。
危ないところで正気にかえりました。
そのあたりのことも書いておかなければなりませんがまずは前回の続きです。

前回はもとになるHEXファイルと書き込み後のPICから読み出して作成したHEXファイルとでは同じFFでも扱いが異なってくると書きました。
そのように考えることで左右のHEXファイルを比較して「なにもない」ところが「FF」になっていてもそれはそれでよいのだと納得することができました。
ところがそのFFデータの中にちょっとおかしなところがあることに気が付きました。
途中の1行です。
これは何でしょう?

FFが連続している中に
0200000400F00A
という1行があります。
これはおかしなデータです。
先頭の02はこのレコードに含まれるデータのバイト数です。
その次の0000はふつうのレコードではアドレスですがその次にあるレコードの属性によっては意味の無い数になります。
このレコードの属性は’04’です。
属性が04のときはその次の2バイトの値が最上位アドレスを示します。
PIC18F13K50の場合メモリアドレスは22ビットです。
000000〜3FFFFFなので通常のレコードで表現できる0000〜FFFFを越えてしまいます。
そこで64KBごとに分けた各メモリブロックの先頭にこの’04’レコードを置いて上位アドレスを示すルールになっているようです。
このレコードが示す上位アドレスは00F0なのでここからはメモリアドレスはF0XXXXになるわけなのですが、そこがおかしいのです。
それではアドレスが22ビットではなくて24ビットになってしまいます。
そこからアドレスF00000〜F000FFのデータが続いていることになります。

下はPIC13K50のメモリマップ(ROM)です。

[出典]Microchip Technology Inc. PIC18F13K50/14K50Flash Memory Programming Specification

このマッブからもわかる通りアドレスF0XXXXは存在しません。
本当に何も無いはずのところからデータを読んでいることになります。
それ以外にもまだおかしいところはあります。
先ほどのHEXデータではおかしなデータのあとに
020000040030CA
というレコードがあってこれは次に続くデータのアドレス上位が0030であることを示しています。
上のメモリマップではCONFIGのエリアになります。
すると。
メモリマップの020000〜1FFFFF(’0’が読み出されるはず)が飛んでいます。
なんだかおかしいです。
そこで。
秋月のPIC WRITERでPIC13K50に同じプログラムを書き込んだものから同じように読み出して作成したHEXファイルとの比較をしてみました。
すると。

左右が完全に一致しました。
おかしなデータとして読み出されたところは秋月のPIC WRITERのせい(おそらくはMicrochipのPICKitUソフトウェアのバグ?か、あるいは何か意味があってのことか)だと思います。

ということで。
ここまで一件落着です。
このあとのところについても書くつもりだったのですが時間がなくなってしまいました。
それについては次回に書くことにいたします。

PICBASICコンパイラ[第69回]
2023.8.27upload

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