[][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ビットでないので、バイト→ワードに修正しました。





Google
www Blog HP BBS


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