FreeRTOSをFITやCG(や追々PDG2でも?)と一緒に使うサンプルプログラムをCSplusでビルド出来るプロジェクトにしてみた

こんにちは。NoMaYです。

別スレッドで、FreeRTOS kernel+FITのサンプルプログラムやFreeRTOS kernel+コード生成機能で生成されたソースを含むサンプルプログラムがあることに気付いたのですが、残念ながら、e2 studio v5のプロジェクトしか含まれておらずCS+のプロジェクトが含まれていませんでした。そこで、プロジェクトを変換してCS+でビルド出来るようにしてみました。また、変換したプロジェクトを以下のzipファイルに固めました。

FreeRTOS_kernel_and_FIT_CG_20171230_1.zip    758KB
FreeRTOS_kernel_and_FIT_CG_20171230_2.zip    562KB
FreeRTOS_kernel_and_FIT_CG_20171230_3.zip    908KB
FreeRTOS_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 Package
Mar.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.pdf
www.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 compilers
www.freertos.org/RX231_RTOS_Renesas_GCC_IAR.html
sourceforge.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.mtpj
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\RX231_realtime_OS_pkg.rcpe
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\プロジェクト変換情報_RX231_realtime_OS_pkg.txt
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\RX231_realtime_OS_pkg.rcpc
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\USBPeripheral_LinkOrder_from_MAP_file_for_CS+.mtls
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\USB_Host_LinkOrder_from_MAP_file_for_CS+.mtls
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\USBPeripheral_csp_build\RX231_realtime_OS_pkg.map
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\USBPeripheral_e2v540_build\RX231_realtime_OS_pkg.map
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\RX231_realtime_OS_pkg\USB_host_csp_build\RX231_realtime_OS_pkg.map
an-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.mtpj
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\serial_transfer.rcpe
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\プロジェクト変換情報_serial_transfer.txt
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\serial_transfer.rcpc
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\LinkOrder_from_MAP_file_for_CS+.mtls
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\Debug_csp_build\serial_transfer.map
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\Debug_e2v540_build\serial_transfer.map
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\HardwareDebug_csp_build\serial_transfer.map
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\HardwareDebug_e2v540_build\serial_transfer.map
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\r_config\modified\r_irq_rx_config.h
an-r01an3783es0100-rx231-connectivity\RX231_FreeRTOS_pkg\Demo\serial_transfer\r_config\modified\r_sci_rx_config.h
an-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.mtpj
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\RTOSDemo.rcpe
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\RTOSDemo.rcpc
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\プロジェクト変換情報_RTOSDemo.txt
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\.settings\CodeGenerator\cgproject.cgp
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\LinkOrder_from_MAP_file_for_CS+.mtls
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\HardwareDebug_csp_build\RTOSDemo.map
FreeRTOSv10.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.mtpj
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\RTOSDemo.rcpe
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\HardwareDebug_csp_build\RTOSDemo.map
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Blinky_Demo\main_blinky.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_cgc.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_cgc.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_cgc_user.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_dbsct.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_hardware_setup.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_icu.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_icu.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_icu_user.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_intprg.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_macrodriver.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_main.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_port.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_port.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_port_user.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_resetprg.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_sbrk.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_sbrk.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_stacksct.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_userdefine.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_vect.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\cg_src\r_cg_vecttbl.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Full_Demo\IntQueueTimer.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Full_Demo\IntQueueTimer.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Full_Demo\main_full.c
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Renesas_Code\stacksct.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Renesas_Code\typedefine.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\Renesas_Code\vect.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\FreeRTOSConfig.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\iodefine.h
FreeRTOSv10.0.1\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_CS+\src\main.c
FreeRTOSv10.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+\










Parents
  • こんにちは。NoMaYです。

    最初に余談ですが、今回、投稿がContent Under Reviewと表示されてしまう現象に遭遇してしまいましたので、投稿を少しずつ変更して調べてみました。(以前にもそうなってしまったことがあり、その時にも同じようなことをやって、その結果からそうならない範囲内で投稿するよう注意していて、先程の投稿もその範囲内だった筈なのですが、、、ちなみに、その時のやりとりの様子では、(少なくとも日本では)ルネサスの人も仕組みを知らないようでした、、、)

    結果、前回の投稿時は大丈夫だったのですが、最近(?)は「FreeRTOSv10.0.1」の文字列がURL(?)と解釈されるようになったのか、ファイルのリストの中にフォルダ名として含まれていたことで、多量のURLを記載した不正投稿だと判定されて(?)、Content Under Reviewになるっぽいです、、、(ここまで余談)

    以前からFreeRTOS kernelのソースコードツリーにIARコンパイラによるRL78版があることは気付いていたのですが、それをCC-RLコンパイラへ移植してみようと思いました。ひとまず、ビルドは通る(CS+ for CC(V6.00.00(2017/10/05版)とCC-RL V1.02)ようになりましたので、以下のzipファイルに固めてみました。(この後、シミュレータでデバッグして動くようにすることが出来れば、秋月電子さんのR5F100LGAFB変換モジュールで試してみるつもりです。その後、RL78のコード生成機能と一緒に使うにはどうするのが良いのか考えてみようと思います。)

    FreeRTOS_Demo_RL78_multiple_RenesasCCRL_CS+_20180128.zip

    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\iodefine.h
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\RTOSDemo.mtpj
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\RTOSDemo.rcpe
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\cstart.asm
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\demo_main.c
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\demo_specific_io.h
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\ExampleISR.asm
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\FreeRTOSConfig.h
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\hdwinit.asm
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\RegTest.asm
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_cg_cgc.c
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_cg_cgc.h
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_cg_cgc_user.c
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_cg_macrodriver.h
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_cg_userdefine.h
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_main.c
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\r_systeminit.c
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\stkinit.asm
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\Blinky_Demo\main_blinky.c
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\src\Full_Demo\main_full.c
    FreeRTOS\Demo\RL78_multiple_RenesasCCRL_CS+\DefaultBuild\RTOSDemo.map
    FreeRTOS\Source\portable\Renesas\RL78\ISR_Support.h
    FreeRTOS\Source\portable\Renesas\RL78\port.c
    FreeRTOS\Source\portable\Renesas\RL78\portasm.asm
    FreeRTOS\Source\portable\Renesas\RL78\portmacro.h




    また、一括でのdiffを取り易くする為、IARコンパイラのアセンブラソースの拡張子をCC-RLコンパイラのアセンブラの拡張子にリネームしたり、CS+のプロジェクトを作る時に流用した以前のFreeRTOS kernelのRX231のCS+のプロジェクトのフォルダ構成に合わせてEWRL78のプロジェクトのファイルを移動したり、といったことを行ったものも以下のzipファイルに固めました。(これで一括でのdiffが取り易くなります。)

    FreeRTOS_Demo_RL78_multiple_IAR_for_diff_20180128.zip





    なお、今回のCS+のプロジェクトでは、以前の投稿のFreeRTOS kernelのRX231のCS+のプロジェクトを流用して新規作成した後、手作業で、ファイルの差し替え、プロジェクト構造の調整、プロジェクト設定の修正、などを行いました。




  • >どうも非公式ながらルネサスさんの社内には、r_bsp_rtosとか、r_cmt_rtos_rxとか、更にはFreeRTOSをFITモジュール化したものまで、あるようです。

    まだまだマイコンでのオブジェクト指向やインスタンスなどはハードルがありそうですが、RTOSはもっと使われても良いと感じます。NoMaYさんのトライアルがルネサス内部活動と並行進行のような感じもしますが、とても有効に思います。ルネサスさんの公式の情報提供も近いことを期待します。
Reply
  • >どうも非公式ながらルネサスさんの社内には、r_bsp_rtosとか、r_cmt_rtos_rxとか、更にはFreeRTOSをFITモジュール化したものまで、あるようです。

    まだまだマイコンでのオブジェクト指向やインスタンスなどはハードルがありそうですが、RTOSはもっと使われても良いと感じます。NoMaYさんのトライアルがルネサス内部活動と並行進行のような感じもしますが、とても有効に思います。ルネサスさんの公式の情報提供も近いことを期待します。
Children
No Data