極小ブートローダー PIC10F322 其の3
PIC10F322用の極小ブートローダーの仕様を一部変更して66ワードの仕様とします。
理由
1.フラッシュメモリの使用方法はTiny Avr/Pic Bootloader+の仕様に準じていたが、これを変更することで
ユーザープログラム領域を2ワード増大できる。
2.フラッシュメモリの使用方法変更により、ユーザープログラムを作成する上でのコード制約が軽減できる。
(例えば、メモリ配置を変更するためのコンパイラオプションが不要になる等)
以下にフラッシュメモリの使用方法の変更を図に示し解説します。
私の"Tiny AVR/PIC Bootloader+"のページも合わせてお読みください。

<解説>
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
上記ソフト一式は以下からダウンロードできます。
ダウンロード先
http://hp.vector.co.jp/authors/VA058115/
https://drive.google.com/file/d/1EEY2jTMYm8A4NMyFQ_lMzuqMAOYS25Yx/view?usp=drivesdk
.
理由
1.フラッシュメモリの使用方法はTiny Avr/Pic Bootloader+の仕様に準じていたが、これを変更することで
ユーザープログラム領域を2ワード増大できる。
2.フラッシュメモリの使用方法変更により、ユーザープログラムを作成する上でのコード制約が軽減できる。
(例えば、メモリ配置を変更するためのコンパイラオプションが不要になる等)
以下にフラッシュメモリの使用方法の変更を図に示し解説します。
私の"Tiny AVR/PIC Bootloader+"のページも合わせてお読みください。

<解説>
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のページ(別館)
https://drive.google.com/file/d/1EEY2jTMYm8A4NMyFQ_lMzuqMAOYS25Yx/view?usp=drivesdk
.
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT