まどかの | 自 | 己 | 満 | 足 | 日記 |
1302
|
2005/05/08(日)■ | |
携帯電話の機種変更 | ||
今日は昼から嫁さんと、携帯電話の機種変更をするためにショップに赴きました。 で、無事新しい電話をもらって、その足で本屋やらハンズに行ってきました。 最後にまんだらけに行って、いくつかファミコンをGETして、夕飯も外で食べて帰宅。 帰宅後は、色々電話をいぢったり着メロをDLしたりしてました(^^; 明日からはまた普通な毎日になるんですね。GWもあっという間ですな。 それでは、おやすみなさーい。 |
1301
|
2005/05/07(土)■ | |
MMCライブラリをVer.UPしました | ||
今日は約束通り、お昼にカレーバイキングに行き、久しぶりにカラオケ。 その後いったん名古屋駅の方まで私だけ行くも、途中で家に帰った嫁さんが鍵を持っていなかったので、急遽帰宅。まぁ、でも前々から欲しかったSDカードケースをソフマップで買えたので良しです。 で、家に帰ってからはMMCライブラリの修正。 MMCライブラリで扱う最大ファイルサイズがカードの容量を超えた場合に、最大ファイルサイズをカード容量のサイズに切り詰めるように修正しました。 これにより、先日見つかった64MBのカードで50MB以上のファイルが扱えなかった不具合が修正されました。 というわけで、またまたMMCライブラリを利用した3作品をVer.UPしました。 公開ページは以下です。 MMC版MP3プレイヤーとMMC対応カーネル PMFプレイヤー それでは、おやすみなさーい。 |
1300
|
2005/05/06(金)■ | |
組み込みLinuxプログラミング楽しいです(^^ | ||
今日は暦どおり平日なので、普通に会社に行って、組み込みLinux(SH)の続きをやっていました。 GDB経由ではなぜかシリアルポートが上手く初期化できないとかで上手く起動できなかったので、勉強の意味も込めて、自分で簡単なモニタプログラムを書くことにしました。 モニタプログラムといっても、やりたいことはバイナリデータをシリアル通信で送ってSDRAMに書き込み、指定アドレス(SDRAM上)から実行するということなので、とりあえずその機能しか実装しない予定です。(全然モニタプログラムじゃないですが(^^;) と、いうわけで、この前までサンプルソースとマニュアルPDFとにらめっこしながらSH上でプログラムを動かすための各種レジスタの設定方法の解説と必要なファイルの列挙、そして肝心のプログラム手順を一生懸命書いたので、今日はそれを見ながら実際にモニタプログラムの雛型を作成しました。 途中で、シリアル通信のための通信速度の設定がSH-Linuxのソースで間違っている(っていうか、ターゲットボード一覧に含まれない評価ボードなので)のに気付き、sh-sci.cを修正したのですが、やっぱりGDB経由では上手く行かずまたも失敗。 やっぱり別のところに原因があるのかねぇ。 で、とりあえず起動時にシリアルポートに対して、起動時のメッセージと、各種コマンドの受け口部分だけ作って今日はおしまい。 っていっても、minicomのマクロの書き方が良くわからなくて調べたりしていたので、結構遅くまでやっちゃいました(^^; minicomのマクロでsend "abcd"みたいな感じで、ファイルを送信するマクロってどうやって書くんでしょうか? Ctrl+A→Sでのファイル送信ではプロトコルを選択するメニューがでるので、もしかしてそういう操作はマクロではできないのでしょうか? または、minicom以外で、マクロが使えてファイル送信ができるアプリをご存知の方がいらっしゃいましたら、是非教えてください。ちょっと調べてみたところによると、XCとかいうのがあるみたいなのですが…… というわけで、今日はここまで。 P/ECEのMMCライブラリの修正はまた明日やることにします。 それでは、おやすみなさーい。 |
1299
|
2005/05/05(木)■ | |
MMC版MP3プレイヤー等をVer.UPしました | ||
今日は午後からちょっと買い物に行って、夕方からは昨日修正したMMC版MP3プレイヤーの確認作業など。 詳しい修正内容は昨日の日記を参照していただくことにして、本日MMC版MP3プレイヤーと、MMC対応カーネルと、PMFプレイヤーをVer.UPしました。 MMC対応カーネルとPMFプレイヤーは、MMC版MP3プレイヤーでのMMCライブラリの修正を反映し、本日をもちまして、ようやくこの3作品でMMCライブラリのソースの統合が完了しました(^^; またここから、それぞれで直していくことになるとは思うのですが、なんかやっと足並みを揃えることができてちょっと嬉しいです。 これでまた一歩MMCライブラリはライブラリらしくなってきました(^^ というわけで、公開ページは以下です。 MMC版MP3プレイヤーとMMC対応カーネル PMFプレイヤー 実際の公開日は今日ですが、修正が完了したのが昨日なので、公開日の表記は昨日にしてあります。 >従来の32kHz48kbpsより高いビットレートのファイルも再生できるかどうかは不明。 試してみましたが、やはり32kHz48kbps以上のファイルは再生できませんでした。 すみません。MMC版では32kHz48kbpsが限界です。 ソースと一緒にMP3ファイルをLAMEで一気に32kHz48kbpsに変換するバッチファイルが入っているので、そちらを利用して変換してください。m(_ _)m ……と、ここで、また色々と確認作業をしていて、ある不具合に気が付きました。 それは、PMFプレイヤーに関してなんですけど、PMFプレイヤーでは1ファイル最大約30分の再生時間をウリにするため、扱える最大ファイルサイズを115MBに設定したのですが、実はこれ、カードによってはクラスタサイズが小さすぎてリストのサイズがヒープ容量を超えてしまうことがあるのです。 今はたまたま、扱える最大ファイルサイズに必要なクラスタ数を計算中に保持する変数がunsigned shortなので(実はこれが不具合の原因であり、怪我の功名でもある)、一番小さいクラスタサイズとした1024バイトで115MBを割った場合に、unsigned shortでは足りなくて丸められてしまうので、約50MBまでのワークエリアしか確保されなくなってしまっています。 (ちなみに、クラスタの最小サイズは2セクタ分の1024が最小だと思っていた(何かの本にそう書いてあったので)のですが、32MBのSDでクラスタサイズ512バイトというのがあり、これも見直しの対象となりました。) ですが、容量の小さいカードでは、元々115MBのファイルなんて入らないので、別段問題は無いのですが、64MBのカードだけ、50MB以上の64MB未満のファイルが再生できないという不具合が発生してしまいます。 ちょっとこれは、カードのサイズよりも大きいサイズの最大ファイルサイズが設定された場合は、カードが扱えるサイズに切り詰めるという処理が必要になってくるので、また後日Ver.UPで対応したいと思います。 ちなみに、ヒープはアプリのBSS領域の最後から始まっているので、ヒープの容量を増やしたければ、アプリで使うコードやデータの領域を節約すれば良いです。 PMFプレイヤーではちょっと余分にバッファを取ったりしていて、まだ節約できる部分があるみたいなので、今回のワークエリア問題も何とかなりそうな感じです(^^; というわけで、また近々3作品はVer.UPする予定です。>ヅが付く方(いつもお世話になっております) 明日は普通に会社行きます。 それでは、おやすみなさーい。 |
1298
|
2005/05/04(水)■ | |
お誕生日会行ってきました | ||
今日も午前中はお買い物。 で、いったん家に帰ってから、ちょっと休憩後にプレゼントを持ってお誕生日会に参加。 今回の誕生日の人には嫁さんも含まれているっていうか、今日が誕生日なのでいっぱいプレゼントもらって帰ってきました(^^ 昨日と今日でまた嫁さんの実家の方でファミコンもいくつか手に入れてきたので、嬉しいことばかりです。 で、家に帰ってきてからは、P/ECEのMMC版MP3プレイヤーの不具合修正。 一昨日5倍速対応版を公開したのは良いのですが、公開後に色々試してみてたら、128MB以下のカードでは起動時にワークエリアがヒープから確保できずに、MMCの初期化に失敗してしまうという不具合を発見してしまいました。 5倍速対応中にチェックに利用していたのは、最近愛用している1GBのSDカードと512MBのminiSDだけで、それらでは普通に動いていたのでOKとしてしまっていたのです。ぐは。 MMCライブラリで必要なワークエリアは、pceFile系APIとの互換性を保つために必要な4096バイトの領域と、利用するファイルに対してのFATチェインテーブル用の領域で、今回不具合の原因となったのは、後者のFATチェインテーブル用の領域でした。 この領域は、1つのファイルが占有する領域をクラスタ単位でリスト化した、FATのインデックスリストなのですが、カードの容量によってクラスタのサイズが変化するので、クラスタサイズの小さい小容量のカードほど、扱える最大ファイルサイズに対してのリストのサイズが大きくなります。 そして、この領域はカードに応じて動的に生成していたので、クラスタサイズの大きい大容量のカードでは、少しの領域しか必要にならないので、ヒープからも確保できていたのです。 と、いうわけで、ヒープから取れないものはヒープ外から取ってしまえということにして、MMC版MP3プレイヤーではこのワークエリアをグローバル配列に置き換えて取るように変更しました。 ワークエリアのサイズは一番小さなクラスタサイズでとってあるので、今後大容量のカードが出て来ようと全然大丈夫です。(必要なサイズは減少方向にあるので) でも、MMCライブラリを使うアプリ全体でこの仕様にしてしまっては困ることもでてくるので、MMCライブラリで使用するワークエリアは、従来通りヒープから取る方法と、今回のグローバル配列として定義する方法のどちらかがコンパイル時に選択できるようにしました。 Makefileで__MMC_WORK_GLOBAL__が定義してある場合はグローバル配列にワークエリアを置くようになります。 その他、pceFile系APIをフックする・しないも__PCEFILE_API_HOOK__の定義により制御できるように変更しました。 というわけで、一応修正は今日で完成しましたが、念の為明日また色々確認してから公開することにします。 それでは、おやすみなさーい。 |
1297
|
2005/05/03(火)■ | |
嫁さんの実家に行きます | ||
今日は午前中から嫁さんの実家にお邪魔させて頂きました。 用事のほとんどがお買い物で、色々と買って頂きました(^^; ありがとうございます。 で、夜は持ってきたファミエイトで遊び、疲れたので就寝。 明日は、また午前中に買い物に行って、夜には専門学校時代の仲間内でお誕生日会を開きます。 それでは、おやすみなさーい。 |
1296
|
2005/05/02(月)■ | |
MMC版MP3プレイヤーが5倍速対応になりました(^^ | ||
今日は暦どおり平日なので会社に出社し、普通に仕事してました(^^; 特に色々用事を言い渡されたりすることがなかったので、SH用のIPLのソースとSHのハードウェアマニュアル・プログラミングマニュアルを読みながら、今度作る自前SDRAM書き込みプログラムの作成手順書をせっせと書いていました。 IPLのソースを流用してちょっと変更すれば、恐らく1日くらいで基礎となる部分は出来上がってしまいそうな感じなのですが、それをやっちゃっては全然勉強にならないだろうということで、SHでのプログラム作成手順と各レジスタの設定値の解説など、結構細かく書いてます(^^ おかげでだいぶ理解してきました。 で、とりあえず手順書が書けたところで、今日は家に帰って夕飯後にP/ECEいぢり。 さて、今回は、前々からやろうやろうと思っていた、MMC版MP3プレイヤーの5倍速MMCライブラリへの対応です。 これは、以前にヅラChuさんが挑戦されてて、でも、なんか上手くいかなかったということでしたので、その意思を(勝手に)受け継ぎ、私も挑戦してみました。 で、結果は見事成功だったわけですが、恐らくヅラChuさんはメニュー表示までは成功されてて、MP3を鳴らそうとすると、clipmp3.$(830)みたいな表示になってしまって困ってしまったのだと思います。(違ってたらごめんなさい) この現象の原因は、MP3データの展開時に使用するバッファの確保先が高速RAM上に取られていたことで、ソースの該当部分を見ると、nsawaさんのコメントでこのバッファを高速RAM上に取らないと、P/ECEでは再生が間に合わないとか書いてあり、しかも、そのバッファ用の領域には高速化用のMMCルーチンが陣取っているので、バッファが配置できずに(だったかな?)エラーになってしまうのでした。 これの回避策としてダメ元で、バッファをSRAM上から取るように変更すると、見事上手く動いてくれました。 今のところ、ちゃんと再生も間に合っているようです(^^ しかも5倍速になったことで、今まで途中で切れてしまっていた(恐らくデコードが間に合わずにエラーとなり終了していた)MP3もちゃんと再生できるようになりました。バンザーイ! と、いうわけで、サポートページで公開です。 今回の更新で、ヅラChuさんの操作感UPなmain.cを利用させていただきました。左右で音量調整はとっても便利で助かります(^^ ありがとうございました。 それにしても、nsawaさんがちゃんとエラー処理で該当部分を表示してくれていたおかげで、今回の原因が判ったわけで、さすがnsawaさんと改めて感服いたしました。 また、バッファの確保先もちゃんとSRAM上から取れるようなコードも用意してあるなんて、なんて想定力のある人なんだろうと思いました。勉強になります。 と、いうわけで、今日はおしまい。 明日は嫁さんの実家に行く予定で、一泊して来るのでメールも見れなくなりますが、あらかじめ御了承ください。 それでは、おやすみなさーい。 |