お世話になります。
flash_demo_rskrx65nを使用してFlash の書き換え確認を行っております。その中で、ROMからRAMに書き換えコードをコピーしなくても書き換えが出来てしまいました。(出来ていると思っているだけかもしれません)自分の認識が間違いなのか。出来てしまうことは問題ないのか。教えてください。
以下の環境、手順を踏んで確認いたしました。
統合開発環境:e2studio 2022-01 (22.1.0)ツールチェイン:GCC for Renesas RX ver8.3.0.202104・RX65NのRAM600k/ROM2Mをリニアモードで使用
①スマートコンフィグレーションを使用してFlash FITをインポートFLASH_CFG_PARAM_CHECKING_ENABLE:1FLASH_CFG_CODE_FLASH_ENABLE: 1FLASH_CFG_DATA_FLASH_BGO:0FLASH_CFG_CODE_FLASH_BGO:0FLASH_CFG_CODE_FLASH_RUN_FROM_ROM: 0②FlashFITアプリケーションノート5.3.2.1に従ってlinker_script.ldの追記③main.cの内容をプロジェクト名.cにコピー④flash_copy_vector_table();をコメントアウト※組み込み関数get_intb(), set_intb()の置き換え(__builtin_rx_mvfc (0xC))が分からず、
ほかに割込みも使用していない為、コメントアウトしました。⑤デバッグを実行し、ブロック消去/書き込みをメモリコンソールにて確認⑥r_flash_rx.cのR_FlashCodeCopy();をコメントアウト⑦デバッグを実行し、ブロック消去/書き込みをメモリコンソールにて確認 →⑤の時と同様に書き換えられていることを確認
mitsuさん、こんにちは。NoMaYです。RX65NのROM2M品であれば出来ますよ。以下のスレッドが参考になるかと思います。(なお、マクロ定義値は見直した方が良さそうには思うのですけれども。)r_flash_rx のサンプルについてjapan.renesasrulz.com/cafe_rene/f/forum5/7726/r_flash_rxデュアルバンク機能時のオブジェクトダウンロード方法とVECTRESETの割り当てについてjapan.renesasrulz.com/cafe_rene/f/forum5/7901/vectresetスマートコンフィグレータ使用時のブート領域、フラッシュ領域の分割方法についてjapan.renesasrulz.com/cafe_rene/f/forum5/7915/thread
NoMaY様
参考スレッドありがとうございます。
>>RX65NのROM2M品であれば出来ますよ。以下のスレッドが参考になるかと思います。(なお、マクロ定義値は見直した方が良さそうには思うのですけれども。)
2M品であればデュアルバンク機能を利用することでROMからROMを書き換えられるよ。
という認識で合っていますでしょうか??
今回、1M以下品が最終ターゲットなのですが、手元に2M品しかなかったため、
デュアルモードではなくリニアモードでの利用をしたくてこのようなCONFIG設定値になっています。
mitsuさん、こんにちは。NoMaYです。> 2M品であればデュアルバンク機能を利用することでROMからROMを書き換えられるよ。> という認識で合っていますでしょうか??デュアルバンク機能搭載マイコンであれば、デュアルモードでもリニアモードでもROMからROMを書き換えられます。ただし、リニアモードでは書き換えるバンクと書き換えプログラムを実行しているバンクが異なっていれば、です。記憶では、デモプログラムは、書き換え先はROMの0xFFFFFFFF番地に近い方、書き換えプログラムは0番地に近い方となっていて、バンクが異なることになっていた筈だと思うのです。([追記] もっとも、デュアルモードも、書き換え時は、結局、(デモプログラムの逆の、書き換え先はROMの0番地に近い方、書き換えプログラムは0xFFFFFFFF番地に近い方、という位置関係なだけで)バンクが異なることには変わりないですけれども。)> ※組み込み関数get_intb(), set_intb()の置き換え(__builtin_rx_mvfc (0xC))が分からず、ちなみに、上記に関してはBSPが以下のマクロを提供していますよ。(他にも多数のCC-RXとGNURX(とIARコンパイラ)で共通に使えるマクロ/関数が提供されています。)smc_gen/r_bsp/mcu/all/r_rx_intrinsic_functions.h
#elif defined(__GNUC__)/* void __builtin_rx_mvtc (int reg, int val) */#define R_BSP_SET_INTB(x) __builtin_rx_mvtc(0xC, (int)(x))/* int __builtin_rx_mvfc (int) */#define R_BSP_GET_INTB() (void *)__builtin_rx_mvfc(0xC)
mitsuさん、こんにちは。NoMaYです。本件は、先日の私のリプライで大丈夫でしたでしょうか。
返信が遅くなり申し訳ありません。
違う領域(前半/後半)であればROMからROMを書き換えられることと、
BSPでマクロ/関数が提供されていることをこれから確認させて頂きます。