WAVプレーヤーの製作(その7:長いファイル名)

「WAVプレーヤーの製作」と銘打っているが、「stm32マイコンのお勉強」の様相だ(笑)

今回は「長いファイル名の取得」です。
取得できたかどうかを簡単に確認するために、i2c 駆動の LCD を使った MP3 プレーヤー、STBee(STM32F103)を使うので開発環境は「stm32マイコン徹底入門」の eclipse です。

stm32_proj_21.jpg

はい、完成した画面です。。。。が、CMで時間が取れなかったこともあり、約1週間も経過してます。
以下、例によって備忘録です。

使用させていただいている FatFs では、LFN を有効にすれば良いとあった。どこでそれを設定しているのかを調べると「stm32マイコン徹底入門」の eclipse 環境では ff.h にあります。注意すべきなのは、この環境では lib/SD_SPI/inc と lib/SD_SDIO/inc の両方に ff.h があるので、SD 駆動に使用する方を選択する。私の場合は、SD_SDIOです。(最初ここで間違えました。ff系は統一ホルダが良いかも)
(参考:最近のFatFsでの定数設定はffconf.hで行っています。v0.07当時はff.hで設定してます)

//【ff.h部分表示】
#define    _USE_LFN    2           // ここが 0 になってたので 2 にしました。
#define    _MAX_LFN    255        /* Maximum LFN length to handle (max:255) */
/* The _USE_LFN option switches the LFN support.
/
/   0: Disable LFN.
/   1: Enable LFN with static working buffer on the bss. NOT REENTRANT.
/   2: Enable LFN with dynamic working buffer on the caller's STACK.
/
/  The working buffer occupies (_MAX_LFN + 1) * 2 bytes. When enable LFN,
/  a Unicode handling functions ff_convert() and ff_wtoupper() must be added
/  to the project. */

これは簡単だなと思ってビルドすると通りません。eclipseのコンソール画面にはこんなエラーが出ます。
【コンソール画面】
C:\miqnnet\workspace\STM32/lib/SD_SDIO/src/ff.c:1122: undefined reference to `ff_convert'
C:\miqnnet\workspace\STM32/lib/SD_SDIO/src/ff.c:1179: undefined reference to `ff_wtoupper'
C:\miqnnet\workspace\STM32/lib/SD_SDIO/src/ff.c:1179: undefined reference to `ff_convert'

lib/lib.a(ff.o): In function `get_fileinfo':
C:\miqnnet\workspace\STM32/lib/SD_SDIO/src/ff.c:1352: undefined reference to `ff_convert'
collect2: ld returned 1 exit status
make: *** [bin\main.elf] Error 1

ff_convert と ff_wtoupper という関数が定義されていない とあります。
そう思うと、_USE_LFNを設定する記事でも追加しろと書いてあります。。。。 えっ? それって何処にあるの?
調べていくと、「stm32マイコン徹底入門」の eclipse 環境にはそれが用意されていませんでした。長いファイル名を使用することは約60kByte のメモリが増加するのでそれを避けているのだと思います。

FatFs のチュートリアルを見ると、cc*.c にあると書かれてます。cc*.cと は何で?、どこか?

「stm32マイコン徹底入門」で使用しているFatfsのバージョンは v0.07c なので、FatFsのページからダウンロードした ff6-8b.zip を解凍するとその中に ff7c.zip があります。更にその中の option ホルダ内に cc932.c などのオプション関数が入ったファイルがあります。これを使えば良さそうです。
参考までに、「stm32マイコン徹底入門」では FatFs バージョンが v007c なので、最近の v010 などと比較すると一部の関数が無かったり、引数が違っていたりします。FatFs に係わる処理サンプルを別から導入したりすると、その違いでエラーが発生することがあります。今回ファイルスキャンをする部分に FatFs ページのサンプル(scan_files)を使用したら、f_closedir() が v007 にはありませんでした。f_close() に変えました。

option ホルダを eclipse の  lib/SD_SDIO/src  に eclipse 上にドロップしてコピーしました。
私の場合ファイルの文字には SHIFT_JIS が使われると仮定し、cc932.cを main.c  に  include しました。
#include "lib/SD_SDIO/src/option/cc932.c"    // もっとスマートな方法があるのでしょうが・・・

やっと Build が通りました。 ....しかし、長いファイル名を LCD に表示させようとすると表示されません。
短いファイル名は表示します。LCD に printf(disp,"%d",strlen(fn)) の disp を表示させて、長いファイル名の文字数取得を確認するとOKです。ここで、「disp に絡む表示の問題」 と早く気づけば良かったのですが、悲しいかな私の頭は別の方向へ向かってました。

....金曜の夜から本日土曜日午前を費やして、ああでもない、こうでもないを繰り返してました....

あろうことか、原因は LCD 表示用文字バッファ(disp)サイズが13だったことでした。即刻 255 に拡張です。
気が付いたきっかけは、表示バッファは \0 で初期化したほうが良い という記事でした。
memset(disp, '\0', strlen(disp));

参照したページ:FatFs汎用FATファイルシステム・モジュール 及び これの詳細ページ


次は日本語ファイル名の表示です。
フォントデータに何を使うか。これをどのように収納するか。様々にまたお勉強せねばなりません。

「自作オーディオ・・・」 まだまだ先が長そうです。






テーマ : 電子工作・電気関係工作
ジャンル : 趣味・実用

プロフィール

haiga

Author:haiga
私のブログへようこそ!
電気オンチが始めた自作オーディオです
2010/3/17 電子工作をプラスしました。

自作オーディオの楽しみ共有のため、私が作ったパーツ提供をしてます。質問や要望を遠慮なくコメント欄に書き込んでください。

FC2カウンター
その日1回目にアクセスいただいた方の総カウントです
最新記事
最新コメント
最新トラックバック
カテゴリ
月別アーカイブ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード