2月11日以降,いじったり調べたりして,いろいろわかってきました。
(1)ソフトリセットの問題
まず,NVFSは不揮発メモリであり,これとRAMであるDBCacheを組み合わせて動作しているのは周知の事実です。ここでいう不揮発メモリとはつまりNANDフラッシュのことであり,このメモリはCPUが直接アクセス出来ません。
だから,一度RAMに取り込んで,RAM上で実行しないといけません。NVFSとして128MByteの空間があるとは言え,CPUから見ればあくまで16MByteのRAMがすべてなのです。
だから,起動時にたくさんのデータが読み込まれるようなことがあると,OSやアプリが動くために必要なテンポラリなエリア(ヒープといいます)が圧迫されて,どうしても動作が不安定になります。本当はそういうことはあってはいけないのですが,伝統的にレガシーな構造であるPalmOS5.xでは,現実的に避けようがありません。
私は,5.4ではこのあたりの問題をある程度解決してくれていると信じていたのですが,まだまだ詰めが甘いようです。少なくともRAMは物理的に8MByte程度空いていないとまずいようですし,さらにいうとアプリケーションがallocするメモリの最大値が2MByteを割ると突然リセットされてしまうようです。
本体のNANDフラッシュにたくさんのアプリやデータを書き込んでおくと,このRAMの空きがドンドンなくなっていきます。私が非常に疑問なのは,実体はNANDフラッシュにあり,実行時にはDBcacheにコピーされるそれぞれのアプリやデータは,どこかのタイミングでNANDフラッシュに書き戻されて,DBcacheも開放されるはずで,これがどのタイミングで起こるのか,ということです。
ちょっと調べたくらいではこの疑問は明らかにならず,その代わりにDBcacheをフラッシュするアプリがいくつも見つかりました。これはDBcacheに非常に大きなデータを書き込み,DBcacheに存在する不必要なアプリやデータをNANDフラッシュに書き戻すもののようです。
これらのツールでも,電源OFF,あるいはDBcacheの空きが4MByteを切ったらフラッシュなど,あまり根拠のないトリガでフラッシュするようになっていて,私自身はどうも釈然としません。
設定によっては頻繁にフラッシュが発生,その度に10秒以上作業が止まりますし,場合によってはそのままリセット,と言うことも起きています。それに,確かにフラッシュ後のRAMの空きは大きくなっていますが,それでも安定しない場合もあったりするので,この辺は過度な期待をしない方が良いのかも知れません。
で,結局どうしたかというと,DBcacheToolという非常にありがたいアプリを使い,freeが2MByte以下,あるいはmaxが1MByte以下になったら,自動的にフラッシュするようにしてあります。また,リセット復帰後にも自動でフラッシュするようになっていて,リセット直後でfreeが7MByte以上,maxが2.5Mbyte程度を確保出来るようにして,ようやく安定してきました。
ここからさらにNVFSにアプリやデータを詰め込んでしまうと,フラッシュの段階でリセットがかかったり,リセット復帰後に再起動を繰り返すようになってしまい,うまくありません。
ところで,これも不思議なことなのですが,SDカードからアプリを起動した場合,リセットがかかることがほとんどありません。Palmの外部メモリの扱いは,それこそハードディスクなどのストレージと同じで,データを一度RAMに転送し,ここから起動させます。だから,SDカードからの実行でも不安定になってもいいはずなのに,それがないのです。VFSはPalmOS4からの実装なので,こなれているというのが理由だとすれば,同じ仕組みでNVFSを実装してもらうわけにはいかなかったのかと,疑問を感じてしまいます。
(2)PIMデータの扱い
これは私が不勉強だっただけの話なのですが,PalmOS5.4では,PIMのデータベースに変更が入っています。従来,DatebookDB,AddressDB,MemoDBがそれぞれ予定表,アドレス帳,メモ帳のデータベースで,これを上書きすれば直ちにそれぞれのアプリが参照するデータも置き換わったのですが,PalmOS5.4では従来の3つに加えて,
ContactsDB-PAdd
CalenderDB-PDat
MemoDB-PMem
の3つが存在しています。
つまり,予定表のデータベースはDatebookDBとCalenderDB-PDatの2つが存在しています。これらがどういう役割分担をしているのかまできちんと調べることが出来なかったのですが,どうやらNANDフラッシュに記録されるのはCalenderDB-PDatで,DatebookDBはテンポラリなデータとして読み書きに使われているようです。
DatebookDBのデータは直接の編集対象として各アプリケーションがアクセスをします。そしてその結果をCalenderDB-PDatに追記していくんだと想像します。(ちゃんと調べたいところです)
だから,DatebookDBを消して,TH55から赤外線でコピーすると,同じ予定が二重登録されてしまうのでしょう。
ということは,従来の3つに加えて,新しい3つも完全の消去してから,従来の3つを赤外線で受けてやればよいのでは,と考えられるのですが,これは失敗に終わりました。というのも,本来NANDフラッシュに必ず存在するCalenderDB-PDatなど新しいデータベースの3つは,存在しないという事があり得ません。だからエラーになります。
これを回避するためには,ContactsDB-PAdd,CalecderDB-PDat,MemoDB-PMemの3つをFilezなどで消去してから,palmTXに最初から入っているオリジナルのアプリをそれぞれ立ち上げ,空のデータベースを生成してあげる必要があります。
その後,DatebookDBとAddressDB,MemoDBを上書きしてやります。これで一応大丈夫なようです。
ただこれもちょっと釈然しないところが残っています。まず,SDカードにバックアップしておいたAddressDBなどのデータベースを上書きすると,エラーが出て裏書きでない場合があるということ,もう1つはどうしても,palmTXに取り込んだアドレス帳の件数だけ2つ少なくなってしまうということです。
ざっと調べて見ましたが,どれが足りないのかわかりません。500件近いので数を数えたり照合したりする気にもならず,重要な人の名前が消えていないことを確認して,もうあきらめてしまいました。
と,ここまでで一応palmTXをなんとか実用レベルで使うだけの状況に仕上がってきました。まだ不用心に追加したアプリがきっかけでリセットがかかり,時々データが消えることもありますが,TH55で出来ていたことの大半を,ようやく実際に動かせる状態になってきました。それが,先週の金曜日,2月13日のことです。
次にネットワークに関連したトラブルです。
初期不良を見つけないといけないと考えた私は,Wi-FiとBluetoothを動かして見る事にしました。これが2月12日のお話です。
先にわかりやすいWi-Fiです。自宅のアクセスポイントにMACアドレスを登録し,palmTXの設定を行い,接続を試みます。うちはWPAですので,TH55では繋げることが出来ませんでしたが,このpalmTXなら大丈夫なはずです。
ところが,何度やっても繋がりません。エラーが出ます。MacBookも繋がっていますので,アクセスポイントの問題とは考えにくいです。
セキュリティの設定の問題だろうかと,SSIDを公開したところ,一度だけ繋がりました。しかし二度目はダメ。MACアドレスフィルタリングをしない設定にしてもダメ,あげく暗号化も解除しましたがダメ。
一度だけ繋がったので,完全にダメという訳ではないのですが,二度と繋がってくれないのです。これには本当にまいりました。
よくよく見てみると,SSIDを公開してあるのに,palmTXのアクセスポイントのリストにうちのアクセスポイントが出てきません。他のSSIDはいっぱい出てくるのに,これはおかしいです。
つまり,そもそもうちのアクセスポイントを受信していないということなんですね。設定以前の問題です。しかし,MacBookや他のマシンは問題なく繋がっています。もうさっぱりわかりません。
よくよく冷静になって考えてみました。
もうすでにぴーんと来た方もいらっしゃるでしょうが,そう,このpalmTXは海外仕様のものです。国内向けではありません。国内では許可されている13chの電波は,このpalmTXでは送受信できないのです。
もしやと思い,アクセスポイントのchを調べると,設定は自動設定なのですが,現状まさに13chになっていました。ビンゴです。
そこで,手動で11chにしてみるとまったく問題なく,これまでの苦労がウソのようにさくっと繋がってくれます。
もう説明の必要もないでしょうが,自動にしたことで,周囲の電波の状況から13chを選択することが多いうちのアクセスポイントも,なんかの表紙に一度だけ他のchを割り当てることができ,この時偶然palmTXで繋げることが出来た,と言うことです。
これで一件落着。スッキリしたー,と喜んだのですが,いやまてよ,国内向けのchが送受信できないなんて,つまり国内の規格を全然満たしてないじゃないか,てことは,もしこのpalmTXで電波を出したら,電波法違反になってしまうぞ・・・
なんか,このあたりを気にしている人は,あまりいないようです。私は使うのを控えるようにします。
このことに気が付く前に,Bluetoothも試して見ました。こちらは問題なくさっと繋がりました。Bluetooth経由でHotSyncはなかなか便利で,これからこれでいこうと思ったのですが,やたら遅いのです。BluetoothではUART扱いで,最高でも115200bpsですから,USBで繋ぐよりも遅くなるということなのでしょう。
充電を別にしないといけなくなるデメリットもあるので,こちらもあまり魅力はありません。結局,Bluetoothも使う事はなさそうです。