こんにちは。NoMaYです。別スレッドで、FreeRTOS kernel+FITのサンプルプログラムやFreeRTOS kernel+コード生成機能で生成されたソースを含むサンプルプログラムがあることに気付いたのですが、残念ながら、e2 studio v5のプロジェクトしか含まれておらずCS+のプロジェクトが含まれていませんでした。そこで、プロジェクトを変換してCS+でビルド出来るようにしてみました。また、変換したプロジェクトを以下のzipファイルに固めました。FreeRTOS_kernel_and_FIT_CG_20171230_1.zip 758KBFreeRTOS_kernel_and_FIT_CG_20171230_2.zip 562KBFreeRTOS_kernel_and_FIT_CG_20171230_3.zip 908KBFreeRTOS_kernel_and_FIT_CG_20171230_3'.zip 568KBそのサンプルプログラムは以下のものです。ちなみに、(1)を見ていて気付いたのですが、どうも非公式ながらルネサスさんの社内には、r_bsp_rtosとか、r_cmt_rtos_rxとか、更にはFreeRTOSをFITモジュール化したものまで、あるようです。なお、(3)はコード生成機能で生成されたソースはあるもののコード生成機能の設定情報が初期値のまま(設定をセーブし忘れた?)でしたので、ソースから設定情報を推測して復元してみたのですが、コード生成プラグインのバージョンが異なる為か、コードを再生成すると若干異なるソースや追加されるソースが生成されましたので、予めコードを再生成させておいた(3')も作ってみました。(1) an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\(2) an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\RX231 Group Serial Transfer Demo using RX real-time OS PackageMar.31.17 Source, Project( Firmware Integration Technology(FIT) / FreeRTOS )( e2 studio project / CC-RX ) www.renesas.com/ja-jp/doc/products/mpumcu/apn/rx/002/r01an3783es0100-rx231.pdfwww.renesas.com/ja-jp/software/D6001053.html(3) FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\(3') FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\FreeRTOS for Renesas RX231 (RXv2)Supporting GCC, IAR and Renesas compilerswww.freertos.org/RX231_RTOS_Renesas_GCC_IAR.htmlsourceforge.net/projects/freertos/files/FreeRTOS/V10.0.1/プロジェクトの変換は、基本的にはrcpcファイルをe2 studio(今回はv5.4.0を使用)でエクスポートしてCS+で読み込むという手順で行いましたが、以下のようなCS+では正しく取り扱えないe2 studio(というかEclipseやCDT)の機能を利用している箇所がありますので、その後に地道に手作業で修正を行いました。・ リンクされたフォルダ・ コンフィグレーション設定に応じた複数のサブフォルダに同名で内容の異なるソースファイルを置くまた、うまくe2 studioからCS+へ引き継がれない以下の設定に関しても、手作業で修正を行いました。・ コード生成先フォルダ(e2 studio側は変更不可ですがCS+側は変更可能なのでCS+側へは引き継げる筈だが)・ リンク順序(e2 studio v5.4.0ではmapとrcpcで順序が異なる、e2 studio v6.1.0はv5.4.0と順序が異なる)更に、それらに加え、以下のようなプロジェクトの変更も行いました。・ 毎回全ビルドになってしまうトラブルへの対処・ 日ごろ心がけようと思っている設定以下はCS+で読み込んだ後の作業で私が使っていたメモです。共通・ プロジェクト構造の修正(ちょっと(3)と(3')では意地になってしまったが)・ (3)と(3')のみ:コード生成先フォルダをcg_src→src\cg_srcへ修正・ (3)と(3')のみ:r_cg_main.cをビルドから除外・ (3)のみ:再生成時に追加されるr_cg_icu_user.cとr_cg_port_user.cをビルドから除外した状態で追加・ (3')のみ:r_cg_interrupt_handler.hはGCC向けにコード生成したものの残骸のようなので削除・ リンク順序を修正(e2 studioとCS+で同じmotファイルになるように)・ インクルードパスの修正・ ソースリストファイルを出力する・ C/C++ソースを出力する・ インクルードファイルが存在しないソースの扱い:再コンパイル/アセンブルしないコンパイルオプション・ クロスリファレンス情報を出力するリンクオプション・ リンケージリストファイルを出力する:はい(リスト内容=すべて)・ スタック使用量情報ファイルを出力する:はい・ 合計セクションサイズを出力する:はいzipファイルの内容は以下の通りです。(1) an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\e2 studioでのmapファイルは詳細出力(All)に変えています。(rcpcファイルをエクスポートした後に変更)rcpcファイルをエクスポートした時点では、元々のプロジェクトから設定を変更していません。e2 studio V5.4.0でのmotファイルとCS+ for CC(V6.00.00(2017/10/05版))でのmotファイルは一致しました。(当方特有の事情でCC-RX V2.03を使用しました。元々のプロジェクトではV2.05が使用されています。)
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\RX231_realtime_OS_pkg.mtpjan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\RX231_realtime_OS_pkg.rcpean-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\プロジェクト変換情報_RX231_realtime_OS_pkg.txtan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\RX231_realtime_OS_pkg.rcpcan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\USBPeripheral_LinkOrder_from_MAP_file_for_CS+.mtlsan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\USB_Host_LinkOrder_from_MAP_file_for_CS+.mtlsan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\USBPeripheral_csp_build\RX231_realtime_OS_pkg.mapan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\USBPeripheral_e2v540_build\RX231_realtime_OS_pkg.mapan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\USB_host_csp_build\RX231_realtime_OS_pkg.mapan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\USB_host_e2v540_build\RX231_realtime_OS_pkg.map
(2) an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\e2 studioでのmapファイルは詳細出力(All)に変えています。(rcpcファイルをエクスポートした後に変更)なお、アプリケーションノートの手順に従ってe2 studioのプロジェクトを完成させる必要があります。そして、プロジェクトを完成させた後に、rcpcファイルをエクスポートするようにしました。e2 studio V5.4.0でのmotファイルとCS+ for CC(V6.00.00(2017/10/05版))でのmotファイルは一致しました。(当方特有の事情でCC-RX V2.03を使用しました。元々のプロジェクトではV2.05が使用されています。)
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\serial_transfer.mtpjan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\serial_transfer.rcpean-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\プロジェクト変換情報_serial_transfer.txtan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\serial_transfer.rcpcan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\LinkOrder_from_MAP_file_for_CS+.mtlsan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\Debug_csp_build\serial_transfer.mapan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\Debug_e2v540_build\serial_transfer.mapan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\HardwareDebug_csp_build\serial_transfer.mapan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\HardwareDebug_e2v540_build\serial_transfer.mapan-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\r_config\modified\r_irq_rx_config.han-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\r_config\modified\r_sci_rx_config.han-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\Settings_of_IncludePaths_and_Macros.xml
(3) FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\元々のFreeRTOSv10.0.1のcgproject.cgpは今回復元されたファイルで上書きされます。e2 studioでのmapファイルは詳細出力(All)に変えています。(rcpcファイルをエクスポートした後に変更)rcpcファイルをエクスポートした時点では、元々のプロジェクトから設定を変更していません。e2 studio V5.4.0でのmotファイルとCS+ for CC(V6.00.00(2017/10/05版))でのmotファイルは一致しました。(当方特有の事情でCC-RX V2.03を使用しましたが、元々のプロジェクトでもV2.03が使用されています。)
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\RTOSDemo.mtpjFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\RTOSDemo.rcpeFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\RTOSDemo.rcpcFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\プロジェクト変換情報_RTOSDemo.txtFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\.settings\CodeGenerator\cgproject.cgpFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\LinkOrder_from_MAP_file_for_CS+.mtlsFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\HardwareDebug_csp_build\RTOSDemo.mapFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\HardwareDebug_e2v540_build\RTOSDemo.map
(3') FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\CS+のみです。CS+ for CC (V6.00.00(2017/10/05版))でコード生成させています。(当方特有の事情でCC-RX V2.03を使用しました。)
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\RTOSDemo.mtpjFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\RTOSDemo.rcpeFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\HardwareDebug_csp_build\RTOSDemo.mapFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Blinky_Demo\main_blinky.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_cgc.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_cgc.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_cgc_user.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_dbsct.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_hardware_setup.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_icu.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_icu.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_icu_user.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_intprg.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_macrodriver.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_main.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_port.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_port.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_port_user.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_resetprg.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_sbrk.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_sbrk.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_stacksct.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_userdefine.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_vect.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_vecttbl.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Full_Demo\IntQueueTimer.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Full_Demo\IntQueueTimer.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Full_Demo\main_full.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Renesas_Code\stacksct.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Renesas_Code\typedefine.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Renesas_Code\vect.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\FreeRTOSConfig.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\iodefine.hFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\main.cFreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\rskrx231def.h
以下、雰囲気が分かるような画面コピーです。(1) an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\(2) an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\(3) FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\(3') FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\
こんにちは。NoMaYです。(IKUZOさん、リプライ有難う御座います。後日返信致します。)RL78版のFreeRTOSですが、FreeRTOS kernelのソースコードツリーのデモプログラムのmain_blinky()とmain_full()の2つのモードがシミュレータで動くようになりましたので、今度は実デバイス(秋月電子さんのR5F100LGAFB変換モジュール)でも試してみました。ただ、念の為にと思ってシミュレータでLEDを繋げるポートの出力のHigh/Lowがトグルすることを確認してみたところ、ちょっと勘違いしていた箇所(ポカミス)を見付けてしまいました。そこを修正した後、実デバイスで動くことを確認出来ましたので、以下のzipファイルに固めてみました。FreeRTOS_Demo_RL78_multiple_RenesasCCRL_CS+_20180202.zip以前のソースでLEDを繋げるポートの出力をシミュレータで確認したところHi-zのままだった以下の関数はIARコンパイラのスタートアップルーチンから呼ばれるものでありCC-RLでは呼ばれないものだった(よって関数全体を条件コンパイルで除外することにしました)
#ifndef __CCRL__int __low_level_init(void){ portDISABLE_INTERRUPTS();#ifndef __CCRL__ /* Set fMX */ CMC = 0x00; MSTOP = 1U; /* Set fMAIN */ MCM0 = 0U; /* Set fSUB */ XTSTOP = 1U; OSMC = 0x10; /* Set fCLK */ CSS = 0U; /* Set fIH */ HIOSTOP = 0U;#endif /* __CCRL__ */ /* LED port initialization. */ LED_INIT(); return pdTRUE;}#endif /* __CCRL__ */
ポートの初期設定はコード生成機能で行うようにした(LEDを繋げるポートも変更しました) (追記: あっ、未使用のLED_INIT()マクロに変更漏れがありますね、後日修正します)R5F100LGAFBではLEDを繋げるポートの端子位置は以下になります今回のソースでLEDを繋げるポートの出力をシミュレータで確認したところHigh/Lowがトグルするようになった(シミュレータGUIウィンドウでの動作状況目視確認用に一時的に間隔を200ms→ 1msへ変更しています)なお、SourceForgeからFreeRTOS kernelのv10.0.1のソースコードの自己解凍exeファイル(もしくはzipファイル)をダウンロード出来るようになっていますので、解凍後に両者の上位フォルダの位置を合わせるようにしてフォルダを統合すればビルド出来るようになります。)この投稿に添付したFreeRTOS_Demo_RL78_multiple_RenesasCCRL_CS+_20180202のソースコードツリー
FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\iodefine.hFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\RTOSDemo.mtpjFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\RTOSDemo.rcpeFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\cstart.asmFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\demo_main.cFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\demo_specific_io.hFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\ExampleISR.asmFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\FreeRTOSConfig.hFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\hdwinit.asmFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\RegTest.asmFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_cg_cgc.cFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_cg_cgc.hFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_cg_cgc_user.cFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_cg_macrodriver.hFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_cg_userdefine.hFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_main.cFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_systeminit.cFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\stkinit.asmFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\Blinky_Demo\main_blinky.cFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\Full_Demo\main_full.cFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\DefaultBuild\RTOSDemo.mapFreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\DefaultBuild\RTOSDemo.motFreeRTOS\Source\portable\Renesas\RL78\ISR_Support.hFreeRTOS\Source\portable\Renesas\RL78\port.cFreeRTOS\Source\portable\Renesas\RL78\portasm.asmFreeRTOS\Source\portable\Renesas\RL78\portmacro.h
SourceForgeからダウンロードしたFreeRTOS kernelのv10.0.1のソースコードツリー