Renesas Rulz - Japan
Renesas Rulz - Japan
  • User
    Join or sign in
  • Site
  • Search Japan.RenesasRulz.com
  • User
  • Renesas Rulz
  • FAQ
  • パートナー
  • 半導体セミナ
  • eラーニング
  • ヘルプ
  • More
  • Cancel
  • かふぇルネ
  • がじぇるね
  • English Community
  • More
  • Cancel
がじぇっとるねさすコミュニティ
がじぇっとるねさすコミュニティ
GR-PEACH fopenに失敗する
  • Forums
  • Blog
  • Files
  • がじぇっとるねさす ゆーざー会 - Wiki
  • Tags
  • More
  • Cancel
  • New

 

 GR-SAKURA

 GR-KURUMI

 GR-COTTON

 GR-CITRUS

 GR-PEACH

 GR-KAEDE

 GR-ADZUKI

 GR-LYCHEE

 GR-ROSE

 GR-MANGO(*)

 SNShield

 Web Compiler

 IDE for GR

 TOPPERS関連

 女子美コラボ

 その他

 ※プロデューサミーティング中

 作り方使い方資料

 イベント関連

 作品記事

 体験記事

 その他

 

 ライブラリ

 ツール

 その他・過去ファイル

  • State Not Answered
  • Replies 4 replies
  • Subscribers 446 subscribers
  • Views 6537 views
  • Users 0 members are here
Options
  • Share
  • More
  • Cancel
Related Tags
  • AUDIO CAMERA Shield
  • CAMERA
  • define
  • GR-PEACH
  • GR-PEACH RZ/A1 Linux
  • mbed
  • MTU2
  • NTSC
  • OpenCV
  • RZA1H
  • SoftwareStandbyMode
  • TOPPERS
  • uart
  • Webカメラ
  • マルチタスク
  • 位相計数モード
Related

fopenに失敗する

Moo
Moo over 2 years ago

毎度お世話になっています。
GR-PEACHを使用しています。
GR-Boads_Camera_sampleをWEBコンパイラでビルドして実行しました。
カメラ画像をSDカードにJPEGファイルとして保存できるのですが、起動直後は毎回エラーになります。
以下の手順です。

1,WEBコンパイラでビルドしたbinをGR-PEACHに書き込みます。
2,USBを外してGR-PEACHへの電源を切ります。
3,GR-PEACHにUSBから電源を供給
4,ユーザーSWを押す
5,赤いLEDが点灯して止まります。
6,この状態からボード上のリセットSWを一度押します。
7,ユーザーSWを押す。
8,aved file /storage/img_1.jpgが表示され、SDカードへの書き込みに成功します


上記3と4の間に「リセットSWを複数回押す」を入れても一回目は書き込みエラーになります。
何度か試したのですが同じ症状です(GR-PEACHを二枚持っているのですが、どちらも同じ症状です)。
1,一回目のファイルWriteは失敗する
2,リセット後の二回目は成功する

なおこのプロジェクトはe2studio用にエクスポート出来ないので、mbedCLIでビルドしてe2studioでデバッグしてみました。
main.cppの117行目で FILE* fp=fopen() しているのですが、fp=0 のままfwriteしてエラーになっています(system_MBRZA1H.cのCDAbtHandler()関数に飛び込み、default:のwhile(1)で永久ループします)。

自分のプログラム内でもファイルWRITEを試してみたのですが、fopen()が成功しません。
なにか情報をお持ちでしたらお教えください。

<code>

// fopenのテスト
#define MOUNT_NAME "storage"
int main()
{
char file_name[32], data[50];
sprintf(file_name, "/"MOUNT_NAME"/img_1.jpg");
FILE * fp = fopen(file_name, "w");
if (fp) printf("success\n");
else printf("fp error\n");
fwrite(data, sizeof(char), sizeof(data), fp);
fclose(fp);

while (1);
}

</code>

  • Reply
  • Cancel
  • Cancel
  • dkato
    0 dkato over 2 years ago
    私の持っている環境で試してみたのですが、再現しませんでした。
    SDカードの違いによりものと推測します。(SDカードが電源供給後の初回通信に失敗するなど)

    GR-Boads_Camera_sampleのsave_image_jpg()内の下記処理
    ----------
    FILE * fp = fopen(file_name, "w");
    fwrite(JpegBuffer, sizeof(char), (int)jcu_encode_size, fp);
    fclose(fp);
    printf("Saved file %s\r\n", file_name);
    ----------
    を、以下のようにリトライする処理に変えてみるといかがでしょうか。
    ----------
    FILE * fp;
    for (int retry_cnt = 0; retry_cnt < 3; retry_cnt++) {
    fp = fopen(file_name, "w");
    if (fp != NULL) {
    fwrite(JpegBuffer, sizeof(char), (int)jcu_encode_size, fp);
    fclose(fp);
    printf("Saved file %s\r\n", file_name);
    break;
    }
    }
    ----------


    また、記載いただいたサンプルコードですが、f_open()を実行するにはファイルシステムのマウント処理を実行する必要があります。
    下記のようにSdUsbConnectを使うと簡単にマウントできます。
    ----------
    #include "mbed.h"
    #include "SdUsbConnect.h" //@@@追加@@@
    #define MOUNT_NAME "storage"
    int main()
    {
    char file_name[32], data[50];

    SdUsbConnect storage(MOUNT_NAME); //@@@追加@@@
    storage.wait_connect(); //@@@追加@@@

    sprintf(file_name, "/"MOUNT_NAME"/img_1.jpg");
    FILE * fp = fopen(file_name, "w");
    if (fp) printf("success\n");
    else printf("fp error\n");
    fwrite(data, sizeof(char), sizeof(data), fp);
    fclose(fp);

    while (1);
    }
    ----------
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Moo
    0 Moo over 2 years ago in reply to dkato
    dkatoさま、早速の対応を有り難うございます。
    試してみました。
    GR-Boads_Camera_sampleのmain.cppの117行目以降をご指摘のように書き換えたところ、電源ONからでも(リセットを押さずに)一度目でファイルWRITEが成功しました。
    retry_cntを表示させてみたら「2」となっているので、3回目で成功してるようです(一度書き込んだ後では「retry_cnt=0」ですのでリトライせずにfopenが成功しています)。

    またmain()内にマウント処理を追加しての書き込みテストも成功しました。有り難うございました。

    もう一点、お教えください。
    この成功しているテストコード(下記)をpeach_mbed_style_OpenCV_V20302.zipのmain()にコピーし、e2studioでビルドすると動作しないようなのです(他の関数やスレッドなど一切使わず、下記のコードだけにして実験しています)。
    e2studioでビルド・実行させる場合の注意点などあればお教えください。
    またもしSDカードの相性の可能性もあるようでしたら、dkatoさまが使用している製品名を教えて頂ければ入手したいと思っています。
    色々と面倒なことで申し訳ありません。

    <code>
    #include "mbed.h"
    #include "SdUsbConnect.h"
    #define MOUNT_NAME "storage"

    DigitalIn button0(USER_BUTTON0);
    DigitalOut led1(LED1);

    int main()
    {
    led1 = 0;
    printf("push button\r\n");
    while (button0 == 1);
    printf("--------------------\r\n");

    char file_name[32], data[50];
    SdUsbConnect storage(MOUNT_NAME);
    storage.wait_connect();

    FILE * fp;
    for (int retry_cnt = 0; retry_cnt < 10; retry_cnt++) {
    fp = fopen(file_name, "w");
    if (fp != NULL) {
    fwrite(data, sizeof(char), sizeof(data), fp);
    fclose(fp);
    printf("Saved file %s(retry_cnt=%d)\r\n", file_name, retry_cnt);
    led1 = 1;
    break;
    }
    }
    while (1);
    }
    </code>
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • dkato
    0 dkato over 2 years ago in reply to Moo
    ファイル名の設定が抜けています。fopen()の前にファイルfile_nameにファイル名を設定してください。
    sprintf(file_name, "/"MOUNT_NAME"/img_1.jpg");

    e2studio環境での注意としては、Mbed環境では「mbed_app.json」にてアプリケーションのオプションを設定することが多いですが、Mbed環境以外では「mbed_app.json」の設定は反映されないため、「mbed_config.h」に直接設定を記載する必要があります。(Mbedではmbed_app.jsonに設定を記載すると自動的にmbed_config.hに反映される)

    また、私の使っているSDですが、HDPMCSDH4GC10というものを使っています。かなり昔に買ったものです。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
  • Moo
    0 Moo over 2 years ago in reply to dkato
    >ファイル名の設定が抜けています。
    うわわ!やっちまった!しまった~
    無事に書けました。まったくもうしくじりました。恥ずかしいです。すみません。

    mbed_app.jsonの件、了解しました。
    SDカードの件も了解です。
    私も別のカードを探し出して試してみます。

    P.S.
    フラッシュへのアクセスのプログラムを見させて頂きました。
    github.com/.../GR-Boards_FlashAccess_sample
    パラメータの保存などではこちらを使わせて頂きます。
    綺麗なコードを沢山提供して頂いて有り難うございます。
    CPUのハードマニュアルを読み込んでコードを書くのは大変ですが、お陰様でとても楽をさせて貰っています。
    感謝しています。
    • Cancel
    • Up 0 Down
    • Reply
    • Verify Answer
    • Cancel
サイト使用条件
プライバシーポリシー
お問い合わせ
© 2010-2020 Renesas Electronics Corporation. All rights reserved.