いつもお世話になっております.
zacxです.
この度,開発環境 CS+ ビルドツール CA78K0R マイコン R5F100FCを使って
動作中の変数値をマイコン内のデータフラッシュ記録させようと考えております.
初歩的なことからやり方やライブラリの扱い方を教えてください.
宜しくお願いいたします.
補足です.
ライブラリ FDLRL78 Type04をもとにプログラムを作成したのですが,
デバッグツール E1 にて動作させ PFDL_close()後のループ処理内でbreakポイントを設定し実行させてみたのですが
逆アセンブルの画面の ? の行で止まってしまいます.
どのようにすればよいでしょうか?
zacxさん、こんにちは。NoMaYです。>逆アセンブルの画面の ? の行で止まってしまいます.これは、プログラムが暴走してプログラム外へ飛び出して、コードフラッシュの消去時の値0xFFを実行したことにより、プログラムが止まったのでしょうね。私自身はFDLRL78 Type04ライブラリの知見が豊富な訳ではないですが、容易に試せるサンプルプログラムが存在していないのか、少し調べてみます。
zacxさん、こんにちは。NoMaYです。これって、以下のキーワードの指定では、サンプルプログラムがヒットしないのですね、、、キーワード検索: FDL RL78 Type04www.renesas.com/jp/ja/search/keyword-search.html#q=FDL+RL78+Type04でも、サンプルプログラム自体は存在していますね。以下のサンプルプログラムは試されていますか?(RSK RL78/G13以外では改造が必要ですが、、、)CA78K0R版ダウンロードwww.renesas.com/ja-jp/software/D3018057.htmlアプリケーションノートwww.renesas.com/ja-jp/doc/products/mpumcu/apn/rl78/002/r01an1362jj0120_rl78.pdfCC-RL版ダウンロードwww.renesas.com/jp/ja/software/D3016437.htmlアプリケーションノートwww.renesas.com/jp/ja/doc/products/mpumcu/apn/rl78/001/r01an2827jj0100_rl78.pdf[追記]製品ページのダウンロード欄にもサンプルプログラムは掲載されていませんね、、、データフラッシュライブラリwww.renesas.com/jp/ja/products/software-tools/tools/self-programming-library/data-flash-libraries.html#downloads
zacxさん、おはようございます、わりと"親切で暇人"と自負しているNAKAといいます。(笑) NAKAが去年やったのは、 ①まず、webからDLしたファイル pfdl.lib pfdl.h pfdl_types.h をプロジェクトに追加します。 ②それで、何となく自分のわかりやすい名前で関数を作ります。 /******************************************************************************* // 関数名 : fn_FDL_OPEN(unsigned short addr, unsigned short size, unsigned char* pdata) // 動作 : データフラッシュ開設 // 備考 : // 作製 : NAKA 17.07.04 // ****************************************************************************/ void fn_FDL_OPEN(void) { __near pfdl_descriptor_t descriptor_pstr; /* FDL Initialize parameter */ descriptor_pstr.fx_MHz_u08 = 20; /* CPU frequency : 20MHz */ descriptor_pstr.wide_voltage_mode_u08 = 0; /* Voltage mode : full speed mode */ PFDL_Open(&descriptor_pstr); } /******************************************************************************* // 関数名 : fn_FDL_ERASE(unsigned short block) // 動作 : データフラッシュ消去 // 備考 : // 作製 : NAKA 17.07.04 // ****************************************************************************/ unsigned char fn_FDL_ERASE(unsigned short block) { __near pfdl_request_t request_pstr = { 0x00 }; /* FDL function parameter */ unsigned char ret; request_pstr.index_u16 = block; /* Set to erase block */ request_pstr.command_enu = PFDL_CMD_ERASE_BLOCK; /* Set to FDL erase command */ ret = PFDL_Execute(&request_pstr); /* ---- Waiting for finish erase process ---- */ while (PFDL_BUSY == ret) { ret = PFDL_Handler(); } /* ---- Succeeded to erase process ---- */ if (PFDL_OK == ret) { ret = RET_OK; } /* ---- FDL access error ---- */ else { ret = RET_NG_DEVICE; } return ret; } /******************************************************************************* // 関数名 : fn_FDL_WRITE(unsigned short addr, unsigned short size, unsigned char* pdata) // 動作 : データフラッシュ書き込み // 備考 : // 作製 : NAKA 17.07.04 // ****************************************************************************/ unsigned char fn_FDL_WRITE(unsigned short addr, unsigned short size, unsigned char* pdata) { //__near pfdl_request_t request_pstr; /* FDL function parameter */ __near pfdl_request_t request_pstr = { 0x00 }; /* FDL function parameter */ unsigned char ret; /* ---- Set FDL parameter ---- */ request_pstr.index_u16 = addr; /* Set to write address */ request_pstr.data_pu08 = pdata; /* Set to write buffer pointer */ request_pstr.bytecount_u16 = size; /* Set to write size */ request_pstr.command_enu = PFDL_CMD_WRITE_BYTES; /* Set to FDL write command */ ret = PFDL_Execute(&request_pstr); /* ---- Waiting for finish write process ---- */ while (PFDL_BUSY == ret) { ret = PFDL_Handler(); } /* ---- Succeeded to write process ---- */ if (PFDL_OK == ret) { ret = RET_OK; } else { ret = RET_NG_DEVICE; } return ret; } ③そいでmain(使うところで) fn_FDL_OPEN(); //フラッシュメモリライブラリ_OPEN fn_FDL_ERASE(0); //フラッシュメモリの0BLOCKを消去 Wt_DATA[0] = 0xAA; Wt_DATA[1] = 0xBB; Wt_DATA[2] = 0xCC; Wt_DATA[3] = 0xDD; Wt_DATA[4] = 0xEE; Wt_DATA[5] = 0xAB; Wt_DATA[6] = 0xCD; Wt_DATA[7] = 0xEF; fn_FDL_WRITE(0x0000,8,Wt_DATA); //フラッシュメモリに書き込み みたいに使いました。 なにも読まずにやったので、適当すぎますが、動いてますよ! どっかでサンプルっぽいものがあったと思います。たぶんNoMaY先生が示してくれたものだと思います。
P.S. チョコ先生に教えてもらって、
https://japan.renesasrulz.com/cafe_rene/f/002-2095199602/4201/rfp/21653#pi4368=2
のアドバイスから追っていったと思います。 こんな感じです。
zacxさん、こんにちは。NoMaYです。プログラムが暴走してしまったらしいことに関して、1つ気になることが頭に浮かびました。スタックをセルフRAMおよびFFE20H-FFEFFH(もちろん使用しているレジスタバンクにも)に配置してはいけないことになっているのですが、そこは避けてあるでしょうか?(先日、別スレッドで78K0や78K0Rのことを混同してしまったことがあったので、これも混同してしまっている危惧はあるのですが、気になりましたので。)[脱線ですが]遠くない将来、このぐらいの質問にはAI(人工知能)が私たちに代わって親切に応えてくれる時代が来るような気がしました、、、(どういうわけか突然そんな考えが頭に浮かんできました、、、あっ、でも、学習段階では、私達のリプライデータがないと駄目なのかな???、、、)
zacxさん、こんにちはNAKAです。 昼休み暇だったので、どのサンプルみてやったのだろう?と探してたら an_r01an2013jj0100_rl78_fld っていうのがフォルダの中に残ってました。もしよかったら見てみてください。 CS+用はcc-RLではなくてCAでしたがCコードなのでそんなに変わらないだろうと思って貼り付けたら動きました。 使っているのはRL78/I1EとF14,F15くらいですが NoMayさんの >スタックをセルフRAMおよびFFE20H-FFEFFH(もちろん使用しているレジスタバンクにも)に配置してはいけないことになっているのですが.... なんててことも全く意識せずただ貼り付けたら動いてます。 ライブラリの扱い方ですが なんとなく、 request_pstr.***.***=***; request_pstr.command_enu = PFDL_CMD_WRITE_BYTES; みたいにパラメータ類を設定して ret = PFDL_Execute(&request_pstr); みたいに実行すると動くのかなぁ?と連想してやってみたら動きました。 NAKAは毎回資料もろくに読まずに連想ゲームみたいに試しながらやってます.....とほほ。反省! P.S. 先日の台風21号で自宅のカーポートのポリカ板が3枚飛ばされました!修理代13万円!! 火災保険では20万円から保障がきくので、あと7万円くらいリビングのサッシのガラスでも割ろうかなぁ~ と考えてしまいました。涙)
zacxさん、こんにちは。NoMaYです。その後、どうでしょうか? 出来るようになったでしょうか?