「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



5110液晶画面の目処が付いてきたので、コイツに
FFTを組み合わせて、メモリ使用量を確かめてみる
ことに。

そしたら、あちこちで地雷を踏みまくり。



まずはFFTライブラリを読み込んでみる。ザックリ
としたロジックの骨組み部分を書いて、コンパイル
してみる。とりあえず通った。

通ったので、メモリ使用量を確認しようと思って、
以前書いたスケッチから、未使用メモリ量を計算
する関数を拾ってきて、貼っつける。

  「r28 cannot be used in asm here」
  「r29 cannot be used in asm here」

とかいう、良くわかんないエラーが出ちゃう。
これって、インラインアセンブラでレジスタ28番
と29番(Yポインタ)がどこかと競合しちゃって
るっていう風な話なんだろうなぁ。

対処にこまって、あれやこれや検索してみる…。



詳しく書かれてるところも見当たらないし、対応も
イマイチしっくりこない。

ソース中の一部分をあちこちコメント化して、
どこに原因がありそうなのかをチェックして
行ってみる。

すると、どうやらおかしそうなところが見えて
きた。FFTか、残メモリ計算か、その両方を記述
したときにエラーになるみたい。


さらにあれこれと彷徨っていて、
http://www.openmusiclabs.com/forums/viewtopic.php?f=4&t=433
こんな情報があった。


どうやら、FFTライブラリと残メモリ計算の間で
レジスタを競合してしまうみたい。


まぁ、詳細がわかったところで、FFTライブラリの
細かい内部まで突っ込んだ話になっちゃうから、
どうしようもなさそうな気がするんだけど…

というわけで、とりあえず暫定対応としては、
FFT関連関数をコメント化した状態でメモリ残量を
チェックし、加えてFFT計算で必要になるSRAM量
(理論値)を手計算して使う感じかな。




さらにもう一つ。

以前書いたメモリ使用量計算の処理は、どこかの
海外サイトのスケッチを参考にしたものなんだけど、
それが悪さしてるんじゃ?と思ったので、別の
モノを探してみる。

http://playground.arduino.cc/Code/AvailableMemory

こんなライブラリがあったのか。

折角なので、このライブラリを借用してみる。

…例によってzipを解凍して、ライブラリの
フォルダにコピー。
メモリ確認用のプログラムサンプルをコンパイル
してみる。

…エラー。取り込まれない。と言っても、ヘッダ
ファイルが見つからないじゃなく、ライブラリ内
の関数が未定義って出てきちゃう。

なんじゃこりゃ?


改めてArduinoのライブラリ関係について検索を
してみると、バージョン1.0.5からライブラリ関係
の機能がアップしてたんだな。


具体的には、

http://blog.arduino.cc/2012/10/22/arduino-1-5-support-for-the-due-and-other-processors-easier-library-installation-simplified-board-menu-etc/

ライブラリ簡単インストール機能とやらを、
Arduino1.5からのバックポートで取り込んで
いるみたい。へぇ。

メニューバーから、ライブラリの追加を行うと、
ダウンロードしたzipファイルから直接ライブラリ
を取り込んで、展開してくれるみたい。


折角の機能なんだけど、さっきの、ライブラリ用の
フォルダに解凍したライブラリを放り込んでも
うまく認識されないのは、そのせいなのか???


気を取り直して、とりあえず動かしてみることだけ
を優先する。
zipファイル状態のライブラリを、IDEの機能で
取り込んでみると、確かにメモリ残量チェックだけ
のサンプルプログラムがコンパイルできた。動作も
大丈夫みたい。

んで、さっきのメモリ残量計算処理と置き換えてみる。
…やっぱり同じエラーが出る。

どうやら、メモリチェック処理とFFTは、完全に
水と油みたいだな。




気を取り直して、新しくArduino1.5から1.0.5にバック
ポートされたライブラリの機能を確認しなおしてみる。

どこに取り込まれたんだ?zipファイルのまま参照
したりはしてないんだろうなぁと思って、展開された
実体を探す。


…いつものライブラリフォルダには格納されてない。
ってことは、ここには居ないわけだな。

どこに展開しちゃったんだろう?とあちこち探し
まくって、アレコレと検索掛けてみて、ようやく
判った。

自分で書いて保存したスケッチの格納先フォルダに、
新しく「libraries」っていうフォルダが追加されて
いて、その中にzipが解凍されてた。



こんな風に。librariesフォルダと並列に存在するのは
これまでに作って保存してある各スケッチ。

IDEからは、こんな風にすると、「#include<xxxxx.h>」
と自動で読み込むためのコードが1行追記される。
(「Contributedのところに追加されてる)




コンパイルしてみる。通った。よし。




さて、さっきの話に戻る。

なんで元々のライブラリフォルダ(この写真では
Contributedの記述より上にあるモノが格納された
ディレクトリ)に放り込んでも、なぜ認識され
ないのか?


各バージョンでは、標準のライブラリが固定化され
てしまって、それ以外はcontributedの方に入れて
おけってことなのか、それともバグなのか。

バグだったら、とっくに見つけられてギロンされて
いてもイイ頃なんだけどな。


それにしても、こういう風にライブラリを読み込む
元を複数にするってことは、コンパイルをワンクリック
するときに、無意識にバグを作りこむ(ライブラリの
バージョン不一致)恐れが生じるから、このあたりの
仕様は、慎重にした方がよさそうな気がするけどな。

コンパイル時にエラーになるならともかく、プログラム
自体を見直しても、(間違った方の)ライブラリソース
を見直しても、エラーがあるように見えないバグを
作りこんだり…

そもそも、どういう順序で、どこにおかれたライブラリ
を探してるのかなぁ?



それにしても、ちょこっとテスト…のつもりで、
次々と地雷を踏んでしまったなぁ。困った。
手が殆ど進まなかった。



Raspberry Piの、Fuse ZX Spectrum。
https://www.youtube.com/watch?v=Jzdv-JUNxyU
スバラシイ。

まさか、ゲーグラでも有名な、ZX Spectrumの
R-TYPEを、Raspberry Pi上のエミュで見ることに
なろうとは。

それにしてもZX Spectrumのプログラマはスゴイ
よな。どう見てもR-TYPEだもんな。


オイラも、AVRのアレ
http://picavr.uunyan.com/avr_m_demo.html
を使って、
   「AVR-TYPE」
なんてのをでっち上げてみたりするかな。
マップデータを格納するメモリさえ確保
できれば、ナントカなっちゃいそうな気が
するんだけどな。



コメント ( 0 )