楽天市場
[無料でホームページを作成] [通報・削除依頼]

極小ブートローダー PIC10F322 其の3

PIC10F322用の極小ブートローダーの仕様を一部変更して66ワードの仕様とします。


理由
1.フラッシュメモリの使用方法はTiny Avr/Pic Bootloader+の仕様に準じていたが、これを変更することで
ユーザープログラム領域を2ワード増大できる。
2.フラッシュメモリの使用方法変更により、ユーザープログラムを作成する上でのコード制約が軽減できる。
(例えば、メモリ配置を変更するためのコンパイラオプションが不要になる等)

以下にフラッシュメモリの使用方法の変更を図に示し解説します。
私の"Tiny AVR/PIC Bootloader+"のページも合わせてお読みください。

img_20150126-021307.jpg


<解説>
1.ソースコードと実際にフラッシュメモリに書き込まれるコード
ブートローダーを用いてソースコードをそのまま書き込み、実行させることは可能ですが、それには条件があります。
デバイスがリセットした後に"ユーザーコードを書き込むフラッシュ領域から独立した領域にあるプートローダーが起動
できる"ことが条件です。ATMEGAでは実現可能ですが、PIC16F/12F/10Fでは実現不可能な機能です。

?このため、PIC16F/12F/10Fではソースコードの先頭からのコードを強制的に書き換え、リセット後に必ずブートローダー
領域にジャンプさせる必要があります。(図のピンク色の領域)

?そして書き換えた番地の元の情報はブートローダー本体より前の領域に記述し、ここをブートローダーの出口にします。(図の水色の領域)
もしこの領域をブートローダー本体と同一のページにしますと、ブートローダーを起動させながらブートローダー本体を
書き換える必要が生じて来るので、都合が悪いのです。

PIC10F322用の66ワードのブートローダーでは?の領域を3ワードから1ワードに、
?の領域を4ワードから2ワードに低減しています。

なぜこのようなことが可能かと言うと、PIC10F322はPCLATHレジスタを搭載していますが、フラッシュ領域が0.5kワードと
小さいため、PCLATHレジスタの値に関わらずGOTO命令1つでフラッシュ領域のどこへでもジャンプすることが出来るからです。

同様なことが出来るデバイスは、PIC10F322(320)の他にフラッシュ塔載量が2kワード以下のデバイス 12F617/752,
16F720/753/818/819/870/871/872/882 および 拡張ミッドレンジのPIC PIC16F1XXXシリーズがあげられます。
拡張ミッドレンジのPICについては私の"PICの制約を取り除く"のページに解説しています。

?の領域についてはソースコードの$0000番地の命令を$01BE番地にコピーし、$01BF番地には$0001番地へのジャンプコードを記述します。 $0000番地の命令がGOTOの場合にはGOTO、GOTOの並びになりますが、$01BF番地のGOTOが無効になるだけです。


2.ユーザープログラム作成上の制約について
Tiny Avr/Pic Bootloader+の仕様ではユーザープログラムを作成する上で以下の制約がありました。

?割り込み使用の有無に関わらず、ソースプログラムの先頭4ワード中に必ずユーザープログラムへのジャンプ命令を記述する必要がある。

?さらにGOTO命令やCALL命令の範囲を超えるフラッシュを塔載しているPICの場合はプログラムソースの先頭4ワード中でPCLATHの定義を行う必要がある。

?アドレス$0000~$0002の領域へのジャンプやサブルーチンコールは該当番地のコードが書き換えられてしまうため不可。


66ワードの仕様に変更することで上記?と?の制約がなくなります。?については$0000番地を除いて制約が解消され、
ソースコードを自由に記述することができます。


<PIC10F322ファームウエアの変更点>

?
        #define first_address 0x200-68 ; 68 word in size
--->
        #define first_address 0x200-66 ; 66 word in size

?
                org     first_address+4
--->
                org     first_address+2


<TeraTeamマクロの変更点>

?
blsize = 68
--->
blsize = 66

?
datanum = maxflash-blsize+4
--->
datanum = maxflash-blsize+2

?
; copy data
data[maxflash-blsize] = data[0]
data[maxflash-blsize+1] = data[1]
data[maxflash-blsize+2] = data[2]
data[maxflash-blsize+3] = data[3]
--->
; copy data
data[maxflash-blsize] = data[0]
data[maxflash-blsize+1] = $2800 + 1



上記ソフト一式は以下からダウンロードできます。

ダウンロード先

Bequest333のページ(別館)

http://hp.vector.co.jp/authors/VA058115/

https://drive.google.com/file/d/1EEY2jTMYm8A4NMyFQ_lMzuqMAOYS25Yx/view?usp=drivesdk










.