こんにちは。NoMaYです。#5連投の1つ目です。今は(今後も?)e2 studioでのみ作れるFreeRTOSプロジェクトですが、以下のプログラムを作ってみました。TB-RX65N用(1) TBボードのLED0を500ms毎にOn/Offする(FreeRTOS APIのvTaskDelay()を使用)(2) TBボードのSW1押下毎にLED1をOn/Offする(タスクでセマフォ待ちして割り込みでセマフォ待ち解除)(3) TBボードのSCI1で3文字受信毎に3文字エコーバックする(タスクでセマフォ待ちして割り込みで3文字毎にセマフォ待ち解除)Renesas RX Simulator用(1') Visual ExpressionのLED部品を50ms(但しシミュレーション上の時間)毎にOn/Offする(上の(1)の括弧内と同様)(2') Visual ExpressionのBUTTON部品押下毎にLED部品をOn/Offする(上の(2)の括弧内と同様)(3') Renesas Debug Virtual Console⇔SCI1で3文字受信毎に3文字エコーバックする(上の(3)の括弧内と同様)プロジェクトのファイル一式 (CC-RX V2.03でビルド、zipファイルをe2 studioに直接インポート可能)japan.renesasrulz.com/cafe_rene/m/sample_program/434sim_rx65n_freertos_proj_fit_scfg_ccrx_c_e2v750_20190924.zip 1.23MBsim_rx65n_freertos_proj_fit_scfg_ccrx_c_e2v760_20191019.zip 1.23MB (主にGNURX版との合わせ込みです)含まれるプロジェクトsim_rx65n_freertos_proj_fit_scfg ← こちら側にソースがあります(TB-RX65Nでも動作可)(*1,*2)tb_rx65n_freertos_proj_fit_scfg ← こちら側にソースは無いです(TB側はSIM側のソースフォルダをリンク機能で参照します)(*1,*2)x_DO_NOT_BUILD_rx65n_freertos_proj_fit_scfg_0 ← ソース編集前のRXスマートコンフィグレータ設定直後のソース(*3)*1:以前に別スレッド「RenesasさんからRXマイコンの低価格Target Boardが出たのでサンプルプログラムをCSplus projectへ変換してみようと思います」に投稿したプロジェクトと同じIDコードを設定しています。*2:実機用の.launchファイルは当方特有の事情でオンボードエミュレータが使えない為に未確認です。*3:RXスマートコンフィグレータの設定を行った直後にRXスマートコンフィグレータに生成させたソースがx_DO_NOT_BUILD_rx65n_freertos_proj_fit_scfg_0プロジェクトのsrcフォルダのソースです。ファイル比較ツールで比較することで、RXスマートコンフィグレータに生成させた後、どのように編集したか分かります。出来るだけ同じプログラムにしたかった/する為に、Renesas RX Simulator用に以下の#if~#else~#endifがあります。(私のパソコンの遅さゆえにそうしたものもあります。)(A) Visual ExpressionのBUTTON部品押下からのPORTB.PIDR.BIT.B1書き換えをポーリングしてIRQ4割り込みをエミュレート(B) Renesas Debug Virtual Consoleからの受信到着待ちをポーリングしてSCI1のRXI1割り込みをエミュレート(C) Renesas Debug Virtual Consoleへの送信可能待ちをポーリングしてSCI1のTXI1/TEI1(*3)割り込みをエミュレート(D) FreeRTOSのRX600v2ポートレイヤは別スレッドで試したRenesas RX Simulator用の無理矢理な代替実装を使用(実機動作可)(E) その別スレッドで試したr_bspモジュールのクロック切り替え時の無限ループ対処をフラッシュキャッシュ有効化時にも適用(F) TB-RX65N用では500msの点滅間隔をRenesas RX Simulator用では50ms(但しシミュレーション上の時間)の点滅間隔に変更(G) TB-RX65N用では10msのチャタリング除去待ち時間をRenesas RX Simulator用では待ち時間は無しに変更*3:もう少し正確に書くとTEI1の動作ではなくICUのGROUPBL0割り込みとGROUPBL0のビット6の動作に関してです。コーディング上の小技として以下のこともやってみました。(H) CGコンポーネント初期化用のr_cg_hardware_setup.cでFITモジュール端子設定関数を呼ぶStart user code~End user code内の記述(I) r_bspモジュールのソースを直接変更せずにRenesas RX Simulator用の無限ループ対処を組み込む#defineマクロFreeRTOS関連では以下のような設定変更や記述追加も行いました。(a) r_bsp_config.h(a-1) Uスタックサイズを0へ(FreeRTOS管理下のメモリがタスクのスタックに使われるので)(Iスタックはそのまま使われます)(a-2) Heapサイズを0へ(FreeRTOS管理下のメモリをFreeRTOSのスレッドセーフなAPIで操作する方が安全と思われますので)(b) FreeRTOSConfig.h(b-1) #define __TYPEDEF__ 1 を削除(b-2) #define configINCLUDE_PLATFORM_H_INSTEAD_OF_IODEFINE_H 1 を追加(b-3) #define configENABLE_BACKWARD_COMPATIBILITY 0 を追加(c) freertos_start.c(c-1) 別スレッド同様にRenesas RX Simulator用のRX600v2ポートレイヤの無理矢理な代替実装で使うCMT1の重複エラーを追加(c-2) 別スレッド同様にAmazon AWSのFreeRTOS Kernel Developer Guideのサンプルコードを試せるようにvPrintString()を追加(c-3) vAssertCalled(), vApplicationMallocFailedHook(), vApplicationStackOverflowHook()でvPrintString()でメッセージを出力(c-4) vApplicationTickHook()でIRQ4やSIC1の割り込み動作エミュレート用の関数を呼び出す(ここが一番手っ取り早そうだった)(c-5) FreeRTOSプロジェクトでmain_task()がFreeRTOS Objectコンポーネント管理外なので対処(今回はmain_task()は空です)(c-1) Heapサイズを0にするとsbrk()が無いというリンクエラーになってしまうのでエラー処理のみのsbrk()を追加後日手を入れたいと思っていることに以下のことがあります。(イ) R_SCI_RXモジュールのAPI+FreeRTOS APIで受信エラーをタスク側で拾うにはどうすると良いか?(RL78ではこうしたけれど)(ロ) 最終的に使わなかったR_CMT_RXモジュールとRX600v2ポートレイヤの無理矢理な代替実装の両方でCMT1の使用が重複してしまう問題への対処(R_CMT_RXモジュールに手を入れるか?)この後、2投目~5投目は以下の通りです。2投目・IRQ4割り込みエミュレーションのソース (大げさなものでは無いです)・SCI1のRXI1/TXI1/TEI1(前述の*3を参照)割り込みエミュレーションのソース (大げさなものでは無いです)・CGコンポーネント初期化用のr_cg_hardware_setup.cでFITモジュール端子設定関数を呼ぶStart user code~End user code内の記述・r_bspモジュールのソースを直接変更せずにRenesas RX Simulator用の無限ループ対処を組み込む#defineマクロ3投目・FreeRTOSプロジェクトでmain_task()がFreeRTOS Objectコンポーネント管理外なので対処(今回はmain_task()は空です)・tb_rx65n_main.c, main_task.c, task_LED0.c, task_LED1.c, task_CONIO.cのソース4投目 (ひたすら画面コピーです)・Visual Expressionの部品の設定・Visual Expressionの設定・Renesas Debug Virtual Consoleの設定・コンソールのCOMポートの設定5投目 (ひたすら画面コピーです)・RXスマートコンフィグレータの設定以下、画面コピーと写真です。Renesas RX Simulatorで実行TB-RX65Nで実行RXスマートコンフィグレータに生成させた後に編集/追加したソース(右側のペイン)[履歴]sim_rx65n_freertos_proj_fit_scfg_ccrx_c_e2v750_20190924.zip・初版sim_rx65n_freertos_proj_fit_scfg_ccrx_c_e2v760_20191019.zip・MOTファイルは変わりません・VOLATILEマクロ追加(GNURX版との合わせ込み) 変更ファイル: src/smc_gen/r_config/r_bsp_config.h, src/sim_rx65n_int_emulation.c・machine.hファイル追加(CC-RX版では未使用)(GNURX版との合わせ込み) 追加ファイル: src/r_bsp_modified/GNURX_support/machine.h 変更ファイル: src/smc_gen/r_config/r_bsp_config.h・GNURX版でのワーニング対処の反映(GNURX版との合わせ込み) 変更ファイル: src/smc_gen/r_pincfg/Pin.c・スタック情報ファイルを生成するプロジェクト設定を追加 変更ファイル: .cproject・実機用の.lauchファイルを追加(当方特有の事情でオンボードエミュレータが使えない為に未確認です) 追加ファイル: "sim_rx65n_freertos_proj_fit HardwareDebug.launch", "tb_rx65n_freertos_proj_fit HardwareDebug.launch"等
こんにちは。NoMaYです。#5連投の4つ目です。以下、Renesas RX Simulator用のVisual ExpressionとRenesas Debug Virtual Consoleの設定、TB-RX65N用のコンソールのCOMポートの設定です。(ひたすら画面コピーです。) ちなみに、Visual Expressionの設定は、以下のファイルに自動的に保存され、デバッグ開始時に自動的に復元されるようになっていました。sim_rx65n_freertos_proj_fit_scfg/.settings/vediagram.xml
<?xml version="1.0"?> <Elements> <DIAGRAM> <VEModelDiagram.BackgroundGridLinesOption>true</VEModelDiagram.BackgroundGridLinesOption> <VEModelDiagram.BackgroundImageOption></VEModelDiagram.BackgroundImageOption> <VEModelDiagram.BackgroundImageStretchOption>true</VEModelDiagram.BackgroundImageStretchOption> </DIAGRAM> <IMAGE> <VEModelChildElement.LocationX>26</VEModelChildElement.LocationX> <VEModelChildElement.LocationY>26</VEModelChildElement.LocationY> <VEModelChildElement.SizeCX>124</VEModelChildElement.SizeCX> <VEModelChildElement.SizeCY>124</VEModelChildElement.SizeCY> <VEModelChildElement.expressionTitleVisible>true</VEModelChildElement.expressionTitleVisible> <VEModelChildElement.minRange>0.0</VEModelChildElement.minRange> <VEModelChildElement.maxRange>100.0</VEModelChildElement.maxRange> <VEModelChildElement.expressionName>PORTD.PODR.BIT.B6</VEModelChildElement.expressionName> <VEModelChildElement.expressionUpdatesDisabled>false</VEModelChildElement.expressionUpdatesDisabled> <VEModelChildElement.foregroundColor>16777215</VEModelChildElement.foregroundColor> <VEModelChildElement.backgroundColor>0</VEModelChildElement.backgroundColor> <VEModelImage.stretchImagesToFit>true</VEModelImage.stretchImagesToFit> <VEModelImage.rangeInputNumberFormat>Decimal</VEModelImage.rangeInputNumberFormat> <VEModelImage.rangeValues>1|To|1|icons/imageelement/LEDType1_square_grey.png|false</VEModelImage.rangeValues> <VEModelImage.rangeValues>0|To|0|icons/imageelement/LEDType1_square_green.png|false</VEModelImage.rangeValues> </IMAGE> <IMAGE> <VEModelChildElement.LocationX>176</VEModelChildElement.LocationX> <VEModelChildElement.LocationY>26</VEModelChildElement.LocationY> <VEModelChildElement.SizeCX>125</VEModelChildElement.SizeCX> <VEModelChildElement.SizeCY>124</VEModelChildElement.SizeCY> <VEModelChildElement.expressionTitleVisible>true</VEModelChildElement.expressionTitleVisible> <VEModelChildElement.minRange>0.0</VEModelChildElement.minRange> <VEModelChildElement.maxRange>100.0</VEModelChildElement.maxRange> <VEModelChildElement.expressionName>PORTD.PODR.BIT.B7</VEModelChildElement.expressionName> <VEModelChildElement.expressionUpdatesDisabled>false</VEModelChildElement.expressionUpdatesDisabled> <VEModelChildElement.foregroundColor>16777215</VEModelChildElement.foregroundColor> <VEModelChildElement.backgroundColor>0</VEModelChildElement.backgroundColor> <VEModelImage.stretchImagesToFit>true</VEModelImage.stretchImagesToFit> <VEModelImage.rangeInputNumberFormat>Decimal</VEModelImage.rangeInputNumberFormat> <VEModelImage.rangeValues>1|To|1|icons/imageelement/LEDType1_square_grey.png|false</VEModelImage.rangeValues> <VEModelImage.rangeValues>0|To|0|icons/imageelement/LEDType1_square_green.png|false</VEModelImage.rangeValues> </IMAGE> <PUSHBUTTON> <VEModelChildElement.LocationX>326</VEModelChildElement.LocationX> <VEModelChildElement.LocationY>25</VEModelChildElement.LocationY> <VEModelChildElement.SizeCX>124</VEModelChildElement.SizeCX> <VEModelChildElement.SizeCY>125</VEModelChildElement.SizeCY> <VEModelChildElement.expressionTitleVisible>true</VEModelChildElement.expressionTitleVisible> <VEModelChildElement.minRange>0.0</VEModelChildElement.minRange> <VEModelChildElement.maxRange>100.0</VEModelChildElement.maxRange> <VEModelChildElement.expressionName>PORTB.PIDR.BIT.B1</VEModelChildElement.expressionName> <VEModelChildElement.expressionUpdatesDisabled>false</VEModelChildElement.expressionUpdatesDisabled> <VEModelChildElement.foregroundColor>15790320</VEModelChildElement.foregroundColor> <VEModelChildElement.backgroundColor>0</VEModelChildElement.backgroundColor> <VEModelChildElement.numberFormat>Natural</VEModelChildElement.numberFormat> <VEModelPushButton.buttonName>BUTTON</VEModelPushButton.buttonName> <VEModelPushButton.injectionValue>0</VEModelPushButton.injectionValue> </PUSHBUTTON> </Elements>