こんにちは。NoMaYです。#2連投の1つ目です。ルネサスさんのアプリケーションノートに以下の『RX100シリーズ RX100上でCoreMarkを実行する方法』というRSK-RX111+IAR EW統合開発環境でEEMBCのCoreMarkベンチマークを実行するものがあったのですが、これをRX-TB 3種類+CC-RX/GNURXへ移植してみようと思います。まず、手始めにTB-RX130+CC-RX+CS+で試してみました。(後日、他のTBボードやGNURXでも動かしてみようと思います。さらに、e2 studioでも動かせるようにしてみようと思います。なお、その時は、GitHub上でEEMBCが公開しているCoreMarkベンチマークの以下のリポジトリのソースに差し替え、かつ、RXスマートコンフィグレータが生成したソースを出来るだけ使うような作りに変更しよう、と思っています。)プロジェクトのファイル一式tb_rx130_coremark_ccrx_c_csplus_20191026.zip 384KBアプリケーションノート: RX100シリーズ RX100上でCoreMarkを実行する方法www.renesas.com/jp/ja/search?keywords=CoreMark&f[0]=content_type:documentドキュメントwww.renesas.com/jp/ja/document/apn/rx100-series-running-coremark-rx100サンプルプログラムwww.renesas.com/jp/ja/document/scd/rx100-series-running-coremark-rx100GitHub上でEEMBCが公開しているCoreMarkベンチマークのソースgithub.com/eembc/coremarkTB-RX130+CC-RX V2.03で試した結果と試した時のCC-RXの最適化オプションは、以下の画面コピーの通りです。得られたCoreMark値が91.5、動作周波数が32MHz、よって、CoreMark/MHzは2.86、となりました。(ちなみに、CoreMark値やCoreMark/MHzは、そもそもそういうものなのですが、最適化オプションによりかなり値が変わります。) なお、以下の画面コピーの通り、RSK-RX111+EWRX V2.41.1でのCoreMark/MHzは3.073のようでした。また、ルネサスさんの製品ページでのRX130(やRX111)のCoreMark/MHzは3.08です。
こんにちは。NoMaYです。#3連投の2つ目です。プロジェクト構造とCC-RX/GNURXの最適化オプション設定は以下の画面コピーの通りです。CC-RX+CS+の場合CC-RX+e2 studioの場合GNURX+e2 studioの場合GitHub上でEEMBCが公開しているCoreMarkベンチマークのソースからの変更箇所は以下の画面コピーの通りです。なお、リポジトリと今回使用したソースのURLは以下の通りです。リポジトリgithub.com/eembc/coremark今回使用したソースgithub.com/eembc/coremark/tree/21d473aae1変更したソースと変更箇所RXスマートコンフィグレータが生成したソースのStart user code~End user code内に追加したコードは以下の通りです。また、これらの中で、CoreMarkベンチマークのソースのportmeソースとインターフェイスする為の関数はtimer_gettick()とserial_charput()の2つ(赤文字箇所)です。src/smc_gen/Config_MTU2/Config_MTU2.h
/* Start user code for function. Do not edit comment generated here */unsigned long timer_gettick(void);/* End user code. Do not edit comment generated here */
src/smc_gen/Config_MTU2/Config_MTU2.c
/* Start user code for adding. Do not edit comment generated here */unsigned long timer_gettick(void){ unsigned long cycles; /* Stop the lower 16-bit counter (it makes also the upper 16-bit counter stop) */ R_Config_MTU2_Stop(); /* Combine two 16-bit counters to form 32-bit counter value */ cycles = ((unsigned long)(MTU2.TCNT) & 0xffff); cycles |= ((unsigned long)(MTU1.TCNT) << 16); /* Resume the lower 16-bit counter (it makes also the upper 16-bit counter resume) */ R_Config_MTU2_Start(); return cycles;}/* End user code. Do not edit comment generated here */
src/smc_gen/Config_SCI1/Config_SCI1.h
/* Start user code for function. Do not edit comment generated here */void serial_charput(char output_char);/* End user code. Do not edit comment generated here */
src/smc_gen/Config_SCI1/Config_SCI1.c
/* Start user code for global. Do not edit comment generated here */volatile bool g_SCI1_tx_ready_flag = false; /* SCI1 transmit end flag *//* End user code. Do not edit comment generated here */
/* Start user code for adding. Do not edit comment generated here */void serial_charput(char output_char){ R_Config_SCI1_Serial_Send((uint8_t *)&output_char, 1); do {} while (false == g_SCI1_tx_ready_flag); g_SCI1_tx_ready_flag = false;}/* End user code. Do not edit comment generated here */
src/smc_gen/Config_SCI1/Config_SCI1_user.c
/* Start user code for global. Do not edit comment generated here */extern volatile bool g_SCI1_tx_ready_flag; /* SCI1 transmit end flag *//* End user code. Do not edit comment generated here */
static void r_Config_SCI1_callback_transmitend(void){ /* Start user code for r_Config_SCI1_callback_transmitend. Do not edit comment generated here */ g_SCI1_tx_ready_flag = true; /* End user code. Do not edit comment generated here */}
src/smc_gen/general/r_cg_hardware_setup.c
/* Start user code for global. Do not edit comment generated here *//* Workaround to execute additional initialization */void R_Systeminit1(void);void R_Systeminit2(void);void R_Systeminit(void){ R_Systeminit1(); R_Systeminit2();}#define R_Systeminit R_Systeminit1/* End user code. Do not edit comment generated here */
/* Start user code for adding. Do not edit comment generated here */void R_Systeminit2(void){ /* Do not call any functions which enables generating any interrupt requests. */ R_Config_SCI1_Start(); R_Config_MTU1_Start(); R_Config_MTU2_Start();}/* End user code. Do not edit comment generated here */