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.
8 years, 3 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
8 years, 3 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