XC8が用意するEEPROM用関数
2013-08-17
旅行から帰ってからの3日間の休みも終わって、その後の木、金の2日間は出勤・・・とは言え、まだお盆休みを中心に夏期休暇真っ最中の連中が多いため、比較的ボンヤリと過ごせた2日間でしたが、まぁ暑いのは相変わらずで、都内への外出がちょっと堪えました。いくら「クールビズ」とは言え、ワイシャツとスラックスでは汗がそう簡単には蒸発しませんから、下手をするとあの「灼熱旅行」よりも暑い感じ
あっという間に週末を迎えて漸く普段の生活に戻った感じで、今日は昼間からあれこれ同時進行ながらも、例のエレキーのプログラミングを進めました。骨格になる部分は大体できてきて、あとはLCD表示を含むメモリ・キーイング周りの部分が残るのみとなりましたが、ここにはEEPROMの読み書きが欠かせません。ところが、この部分のプログラミングは未経験・・・アセンブラ数行で書ける程度なんで、まぁ手作りしても大したことはないんですが、XC8のマニュアルに「関数とマクロ、用意してあるわよ
」と書いてあったのを思い出し、どんなコードが吐き出されるのか見てみようとちょっと実験。

EEPROM内の変数は「__eeprom」を使って定義、読み出しは「eeprom_read」、書き込みは「eeprom_write」という関数を使えるようになっています。「xc.h」のインクルードが大前提です。
最初この関数に「こんなシンボル無いぞ
」というエラー(コンパイルは正常にできるが、IDE上に赤いエラーマークが出る)が付きまとったため閉口しましたが、xc.hのインクリードの直前に「EEPROM_SIZE」というシンボルを以下のようにdefine定義したらエラーが取れました。
その後は、この定義を外してもどういうわけか大丈夫になっちゃいました。海外で困っている人もいて、「古いMPLAB IDE 8.xxでは上手く行くぞ」・・・みたいなことが書いてあったんですが、まぁひとまずこれで回避できたんで様子見。
さて、興味津々の展開形です。

44行・・・うーん、ちょいと冗長です。EEPROM制御レジスタがBANK3であり、一般変数置き場のBANK0との切替が煩雑になっていますね。アセンブラで10行程度の筈なんで、ちょっとなぁ・・・と思いつつも、ちゃんと書込完了を待つ処理も入っていますから、長ささえ気にしなければ使えそうです。今回はこれで目を瞑ろうかな
ちなみに、コンパイラが引っ張ってくるお便利関数は、「Windows XP」では「C:\Program Files\Microchip\xc8\vx.xx\sources\」の配下に格納されています。他のOSでも似たような場所かと思います。いろいろと参考になりますよ
追記 2013/08/19>
この書込処理以外に、「__eetoc」「_eecpymem」いう関数が展開されるため、もっとプログラムメモリは食われていました ・・・。場合によっては、自作した方が良いかも。

あっという間に週末を迎えて漸く普段の生活に戻った感じで、今日は昼間からあれこれ同時進行ながらも、例のエレキーのプログラミングを進めました。骨格になる部分は大体できてきて、あとはLCD表示を含むメモリ・キーイング周りの部分が残るのみとなりましたが、ここにはEEPROMの読み書きが欠かせません。ところが、この部分のプログラミングは未経験・・・アセンブラ数行で書ける程度なんで、まぁ手作りしても大したことはないんですが、XC8のマニュアルに「関数とマクロ、用意してあるわよ


EEPROM内の変数は「__eeprom」を使って定義、読み出しは「eeprom_read」、書き込みは「eeprom_write」という関数を使えるようになっています。「xc.h」のインクルードが大前提です。
最初この関数に「こんなシンボル無いぞ

#define EEPROM_SIZE 256 |
その後は、この定義を外してもどういうわけか大丈夫になっちゃいました。海外で困っている人もいて、「古いMPLAB IDE 8.xxでは上手く行くぞ」・・・みたいなことが書いてあったんですが、まぁひとまずこれで回避できたんで様子見。
さて、興味津々の展開形です。

44行・・・うーん、ちょいと冗長です。EEPROM制御レジスタがBANK3であり、一般変数置き場のBANK0との切替が煩雑になっていますね。アセンブラで10行程度の筈なんで、ちょっとなぁ・・・と思いつつも、ちゃんと書込完了を待つ処理も入っていますから、長ささえ気にしなければ使えそうです。今回はこれで目を瞑ろうかな

ちなみに、コンパイラが引っ張ってくるお便利関数は、「Windows XP」では「C:\Program Files\Microchip\xc8\vx.xx\sources\」の配下に格納されています。他のOSでも似たような場所かと思います。いろいろと参考になりますよ

追記 2013/08/19>
この書込処理以外に、「__eetoc」「_eecpymem」いう関数が展開されるため、もっとプログラムメモリは食われていました ・・・。場合によっては、自作した方が良いかも。
- 関連記事
-
- PIC12F1822の「RA4」が曲者!?
- 「MPLAB X IPE」でプログラムできない・・・
- XC8が用意するEEPROM用関数
- PIC16F1829に決定!
- XC8のアセンブルリスト不具合改善!