2016年10月01日

Arduino(AVR)でのグローバル変数の扱い

先日Arduinoへ移植したNT-Shellですが、どうも動作が不安定で画面にゴミが出ることがあります。
RAMが逼迫しているという警告が出るので、グローバル変数の状況を調べてみました。
調べ方ですが、avr-objdump.exeというコマンドを使います。
このコマンドはArduinoのフォルダ内の「hardware\tools\avr」に入っています。
使用状況を調べるには、ソースコードをコンパイルして作成される.elfファイルが必要です。
(通常はテンポラリフォルダの中に保存されています。)

avr-objdumpの使い方は以下の通りです。

avr-objdump -S -j .bss project.elf

avr-objdump -S -j .data project.elf


初期化されない変数は.bss、初期化される変数は.dataで調べます。

これで調べてみたら、コマンド名の配列(入力されたコマンドを調べるために使っていた)が意外と領域を食っていたので、ちょっと手間ですがフラッシュのほうへ格納し直しました。
これで現時点ではRAM使用率が72%まで下がり、警告も出なくなりました。

また、avr-nmというコマンドを使うとシンボルテーブルの出力ができます。
こちらは使い方は
.\avr-nm.exe -C project.elf

です。
posted by boochow at 16:55| Comment(0) | Arduino | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
人気記事