[][mobile][Homepage][BBS][Blog][YouTube][asablo]

過去の記事の検索が簡単にできるよ (・∀・) 例 ランチャー9
カスタム検索

HI-TECH PICCでEEPROMアクセスを考察2011/08/22 07:52:38


PIC HI-TECH CでEEPROMアクセス

いつもよく訪問しているブログの中で浜松マイコン工房ニュースがある。あの小型ガイガーカウンターの作者でもある。
その中の記事でPIC HI-TECH CでEEPROMアクセスという記事があり、EEPROMの読み書きに専用のソースコードが書かれていたので、私はいつも使うEEPROM_READ,EEPROM_WRITEの事をコメントしてみた。そうすると、驚くべき事実が分かったのである。

1.EEIF (EEPROM write complete bit)をチェックしていない
 但し、「EEIFビット」(書き込み完了判断)をチェックはしていないが、書き込み前に「WRビット」(書き込み中判断)をチェックしているので、書いた直後にすかさず読みに行くケースでもなければ特に問題にならないであろう。(コメントを頂きました。ありがとう御座います)

2.マクロ定義ということで、コードサイズが大きくなる
用意されていた定義文を疑問に持たずに使っていたのだが、マクロ定義なら、使えば使うほどプログラムが肥大する。そこで、ちょっと実験を行ってみた。



早速検証開始

私が公開しているLCD VUメータのソースコードを使用することにした。これはEEPROM_READ 27箇所、EEPROM_WRITE 3箇所がmainで使われているので、その効果がよくわかる筈だ。

Memory Summary:
    Program space        used   F88h (  3976) of  1000h words   ( 97.1%)
殆どギリギリ状態

これを元に、ソースコードを改造してみる。
EEPROM_READとEEPROM_WRITEをeeprom.cにてまとめた場合
unsigned char E2promRead( unsigned char adr ){
     return(EEPROM_READ( adr ));
}
void E2promWrite( unsigned char adr, unsigned char data ){
     EEPROM_WRITE( adr,data);
}

【結果】
Memory Summary:
    Program space        used   E5Bh (  3675) of  1000h words   ( 89.7%)

何と、301ワードも節約した。


更に、eeprom.cに浜松マイコン工房のソースを使用した場合
【結果】
Memory Summary:
    Program space        used   E40h (  3648) of  1000h words   ( 89.1%)

更に27ワード小さくなっている。ちょうどEEPROM_READの個数分。
最初の時より328ワードも節約されている。

もちろん、3種類ともすべて動作確認済みである。

考察
用意されているEEPROM_READとEEPROM_WRITEはマクロ定義なので、使えば使うほど大きくなる。頻度に使用する場合は関数化して使用するとプログラム容量を大きく減らす事ができる。

更に、用意されているマクロを使わず、浜松マイコン工房の様なEEPROMのアクセスする関数にすると、更にプログラム容量を増やせられる。

これは目からウロコ。Lite版でもまだまだ捨てたものではないなぁ。浜松マイコン工房ニュースの記事が無かったら、ずっと分からずじまいであった。

※良い情報に巡りあったことに感謝致します。
※PICは1オペコードは8ビットでないので、バイト→ワードに修正しました。

コメント

_ じゅん ― 2011/08/22 08:37:15

えええ!! EEIFチェックしていないんですかぁ? じゃあ連続WRITEすると不具合が発生することもあるんですね。

わたしも知らずに使っていました。なんかショックw

_ air_variable ― 2011/08/22 08:45:22

幸いまだ遭遇していませんが、可能性は無きにしもあらずですね。
よく調べないと分からない事があります。

_ 浜松マイコン工房・宇都宮 ― 2011/08/22 09:29:03

こんにちは。

マクロでは、「EEIFビット」(書き込み完了判断)をチェックしていませんが
書き込み前に「WRビット」(書き込み中判断)をチェックしているので
書き込みが失敗することはないと考えます。

マクロで問題になるのは、書き込み直後の読出しです。
書き込みが終了しないまま、読み込み動作に入れる為です。

通常は、書き込み直後に読出しをおこなうことは少ないと思うので
あまり問題にならないのではないでしょうか。

ご参考になれば。

_ air_variable ― 2011/08/22 10:11:51

宇都宮様、
そういう事だったのですね。ご丁寧に教えて頂き恐縮です。
本文も修正させて頂きます。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
全角で「あ」をタイプしてください。Japanese language only.

コメント:

トラックバック





Google
www Blog HP BBS


air_variableサイトをまとめて検索 
カスタム検索
[][admin][mobile][Homepage][BBS][Blog][YouTube][asablo]