動けばおk!

Arduinoとかで色々作るよ!特技はLEDピカピカです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PROGMEMの使い方

電光掲示板のフォント用データなどたくさんのデータをあらかじめarduinoに記憶させて自由に使用できる便利な「PROGMEM」ですが、わかりやすい使い方がないので簡単にまとめ。

○ どうしてPROGMEMを使うのか
 ArduinoはSRAMが小さいため、通常のintなどで大きな配列を作った場合、格納しきれず暴走する。

○ PROGMEMを使うには
  #include <avr/pgmspace.h> これを最初に記入。
 ちなみにpgmspace.hは\arduino\hardware\tools\avr\avr\include\avrの中にあります。(ややこしい)
 詳しいことはそこに。

・SRAMに格納したい変数の宣言
 dataType variableName[] PROGMEM ={xxxxx.xxxxx.....};

 使用できるdataTypeは後述のリファレンスを参照。
 通常のintやcharだとコンパイルエラーはでないようですが通常の動作をしません。
 (prog_uint16_t のような感じ)

 variableName[]は配列の名前。もちろん通常の配列のようにhoge[x][x]のような2次配列でも問題なく使用できる。

・データを読み出す方法
 pgm_read_word_near(address)を使用する。(16バイト読み出す場合)
 この関数に渡すのはアドレスであることに注意!
 といってもポインタが使えるので名前の前に「&」をつければ問題なし。

 prog_uint16_t array[5] PROGMEM ={0,1,2,3,4}と宣言した場合
 num = pgm_read_word_near(&array[n])とすればOK。

 dataTypeによって関数が変わるのでリファレンスかpgmspace.hを参照。
   pgm_read_byte_near(address)//1byte読み込み
   pgm_read_word_near(address)//2byte読み込み
   pgm_read_dword_near(address)//3byte読み込み

参考にしたサイト
Arduino日本語リファレンス PROGMEM
スポンサーサイト
COMMENT
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
COMMENT FORM
NAME
TITLE
MAIL
URL
COMMENT
PASS 管理者にだけ表示
TRACKBACK
TB URL
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。