Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 6 months ago.
ftellがゼロしか返してこなくなった
https://developer.mbed.org/users/digiponta/code/GR-PEACH_NTSC_in_2ch_MOD_try/file/2bea25cf1883/main.cpp の437行目のftellが、fopenが成功後、ゼロしか返ってこない症状がでて、なやんでいます。 コーディウング上は、問題なさそうなのですが、何か競合してるんでしょうか?
あと、freadに変えて、JPEGファイルの読み出しが正常終了するが、464行目のJEPGデコードでエラーがでます。正しくデータが読み出されいいない可能性も高いです。やはり、どこかメモリが競合してるとか?
なお、SDメモリ内に保存されているJPEGファイルは、パソコンで正常に表示できています。
何か、ヒントはないでしょうか。よろしくお願い致します。
1 Answer
9 years, 6 months ago.
SDカードが認識されるまで少し時間がかかるので、認識前にリードしてしまっているのではないでしょうか。P7_8のレベルがLowになっていれば、SDカードへのアクセスが可能です。
こちらの下部にある、SDFileSystem_GR_PEACHを使うと、USBHostMSDと同じようなIFでSDの接続を確認できます。(trueが返るまでconnect()関数を実行)
また、SDFileSystem_GR_PEACHを使用すると転送時のクロックも1MHzから20MHzにアップするため、アクセス速度も向上します。
レス、有難うご座います。SDFileSystem_GR_PEACHへ変更して、下記URLの304行目で、connected()で待つようにしました。結果、いつまでたっても、ここから抜けてこないようです。GR-PEACHが壊れてるのでしょうか?
posted by 14 Sep 2016connected()ではなく、connect()で待ってみてください。
while( !sd.connect() ) {
Thread::wait(500);
}
レス、有難うご座います。sd.connect() へ変えたところ、戻ってくるようになりましたが、症状は変わらなかったです。
メッセージログは、下記です。
File read start /sd/img_0001.jpg v=2, i=7 len = 42045 File read done File decode start Error:JCU decode error
コードを拝見しました。キャッシュ制御が必要になると思います。
以下のように★の行を追加するといかがでしょうか。
main.cpp 460行目付近
#if 0
・・・省略・・・
#else
size_t len = fread(user_frame_buffer1, sizeof(char), sizeof(user_frame_buffer1), rd_fp);
pc.printf( "len = %d\n", len );
#endif
fclose(rd_fp);
★ dcache_clean(user_frame_buffer1, len); //キャッシュクリーンを追加
pc.printf("File read done\n");
//YCbCr setting
aBitmapData.width = LCD_PIXEL_WIDTH;
aBitmapData.height = LCD_PIXEL_HEIGHT;
aBitmapData.format = JPEG_Converter::WR_RD_YCbCr422; //YCbCr[0] & ARGB8888[1] is 4byte, not RGB565[2] is 2byte
aBitmapData.buffer_address = (void *)user_frame_buffer0;
pc.printf("File decode start\n");
// JPEG_Converter
★ dcache_invalid(user_frame_buffer0, sizeof(user_frame_buffer0)); //キャッシュインバリデートを追加
if (decoder.decode((void *)user_frame_buffer1, &aBitmapData) == JPEG_Converter::JPEG_CONV_OK) {
pc.printf("File decode done %dbyte\n", (LCD_PIXEL_WIDTH * LCD_PIXEL_HEIGHT * 4));
led1 = 0;
} else {
pc.printf("Error:JCU decode error\n");
led1 = 0;
}
dkato様
レス、誠に、有難うご座います。正常に画像の表示がされるようになりました。
https://developer.mbed.org/users/digiponta/code/GR-PEACH_NTSC_in_2ch_MOD_try/file/0f9a45e34220/main.cpp
それにしても、キャッシュ周りの解説がないと、理解が難しいですね。
posted by Hirofumi Inomata 15 Sep 2016