fc2ブログ

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定義したらエラーが取れました。

#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」いう関数が展開されるため、もっとプログラムメモリは食われていました ・・・。場合によっては、自作した方が良いかも。

関連記事

コメントの投稿

非公開コメント

Calendar
10 | 2023/11 | 12
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
New !
Category
Comments
Monthly Archives
Track Backs
Counter
Sunspot Now !

 


Survey Results

 

Profile

どよよん無線技士

Author :どよよん無線技士
こおるさいん:JM1DPL

アパマンというハンデにさらにQRPまで課し、失敗連続のヘッポコリグや周辺機器の製作・・・趣味というより「荒行」か!?

メールは「JARL経由」でお願いします。

Links
Follow me !
RSS Links
QR Code
QR