フォト
無料ブログはココログ

MyList

« 2段飛ばしの研修 <せめてスタート位置に> | トップページ | なぜイマドキ社員は定時で即帰ってしまうのか »

2016年9月19日 (月)

Digispark(3) <RAMが一番大事>

 DigisparkはATtiny85を使っていて、bootloaderが2k使っているので、スケッチは6k使える。はずだが、3k以上書けなかった。(Digispark(2) 2016/9/5)

 GitHubにDigispark用のArduinoIDEがある。(https://github.com/digistump/DigistumpArduino/releases/)
これは Digispark用ライブラリインストール済のArduinoIDE ver1.6.7だ。

 このIDEを使っていたのだが、ArduinoIDEの最新版(1.6.11)に変えて、Digispark用ライブラリを手動でインストールしてみた。

 コンパイル終了時のメッセージを見ていて気が付いた。ArduinoIDE 1.6.11はRAMの使用量をレポートしてくれる。

最大6,012バイトのフラッシュメモリのうち、スケッチが4,360バイト(72%)を使っています。
グローバル変数は980バイトのRAMを使用しています。

 ATtiny85のRAMは512byteしかないはず。

 DigisparkはArduinoIDEを使っているので最後にavr-gccでコンパイルされる。

DigiKeyboard.println("hello, world");

と書くと文字列 "hello, world" は、CODE領域つまりフラッシュメモリに配置されると思うが、初期化済データとしてRAMに配置される。って「avr-gcc constをプログラム・メモリに配置(2013/02/08)」で書いてる。(^^ゞ

 文字定数をフラッシュメモリに配置するにはF()マクロを使うとよい。

DigiKeyboard.println(F("hello, world"));

文字定数をフラッシュ・メモリに配置するように書き換えてコンパイルすると、

最大6,012バイトのフラッシュメモリのうち、スケッチが4,330バイト(72%)を使っています。
グローバル変数は96バイトのRAMを使用しています。

RAMの使用量は512byte以下に収まった。

 ATtiny85はRAMが512byteしかないので、RAMの使用量を増やさないようなプログラミングが必要だ。簡単にUSBデバイスがつくれるのだけれど、初心者向きではないのかも。


 F()マクロは  include/avr/pgmspace.hではなく、hardware/arduino/avr/cores/arduino/WString.hで定義されている。



最近の投稿】【最近のAVR

« 2段飛ばしの研修 <せめてスタート位置に> | トップページ | なぜイマドキ社員は定時で即帰ってしまうのか »

AVR」カテゴリの記事

プログラミング」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Digispark(3) <RAMが一番大事>:

« 2段飛ばしの研修 <せめてスタート位置に> | トップページ | なぜイマドキ社員は定時で即帰ってしまうのか »