■GPSロガーのハードウェア工作物はとりあえず落ち着いて、今はATmega128のプログラム作成中。ロケーターレベルのプロトはできていて、今はSDカードアクセスライブラリの作成中。ちょっとあやしいCなんだけど、それでもアセンブラに比べれば構築のコストは低い。時々Cの言語仕様に合わない(というか、期待した動作をしない)ことがあって、それがコンパイラ(WinAVR)の問題なのか、あるいはATmegaの仕様なのかは良く解らない。解らないままに実装でカバーしていて‥‥あんまり良いやり方ではないなあ。
SD/FAT16アクセスライブラリはSD-SPIレイヤ、セクタアクセスレイヤの読み系、書き系、クラスタアクセスレイヤ、ディレクトリ操作レイヤの読み系がほぼ上がっていて、もう少しでPOSIX相当とは言わないけれど、近い感覚で使えそうなライブラリにはなりそう。ただ、ファイルを同時に複数オープンすることを前提とはしないので、あまり汎用とはならないかもしれない。ATmega128が実装するワーキングメモリは4096バイトと大きめではあるけれど、それでも昔の8ビットパソコンに比べたらささやかなもの。ATmegaは外部メモリを使えるのだけど、その外部メモリにしても単価は結構するし、容量もそれほど大きいわけではない。
でも、今ターゲットとしているデータロガーとしては十分すぎる実装。
今のところ実装を予定している関数は次のようなもの。
mount()
opendir(path)
readdir()
scandir(str)
closedir()
chdir(path)
mkdir(path)
rmdir(path)
open(path)
read(n)
write(str, n)
close()
unlink(path)
ただ、いわゆるファイル記述子相当のものを1つしか持たない実装なので、入れ子のオープン操作はできない。メモリ上の制約によるものなのだけど外部メモリを増やせばいい話かな。速度的には少し不利かな。
製作は純然たるボトムアップで進めていて、1つモジュールを作っては動作確認を繰り返している。あんまりモジュールの段数が増えるとスタックの領域がなくなってくるはずで、そこが不安といえば不安。