マイコン初心者です。
いつもかふぇルネから情報を頂き、RX72N-Envisonキットでプログラムを突いています。
今回FreeRTOS(Kernel-Only)で数個のtaskを登録し期待した動作が出来たのではと思い、FreeRTOS(with IOT libraries)に手をのばし始めました。これについて質問ポストします。よろしくお願いします。
Kernel-Only版ではSocket機能を含んでいないのでこれを組み込みたいと考えています。(PCとのローカル通信機能のみ)T4-もありますが、FreeRTOS+TCPが提供されているので試そうと考えました。
環境: IDE:E2Studio 2022-07 コンパイラ:GCC 8.3.0.202202(E2Studio:2022-07) arf:【v202012.00-rx-1.0.2】 基板:RX72N Envision Kit
1. afr FreeRTOS(with IOT libraries)のお勧めバージョンがありましたらお教えください。 ダウンロード時、日付では2021xx.xx.-rx-x.x.xなど沢山見えますが ダウンロードすると途中で止まり、成功率が良くありません。 使用中のプロバイダに問題が有るのと思いますが、何度もトライし取得したいと思います。
また、新規プロジェクト作成時以外で、FreeRTOS(with IOT libraries)の希望バージョンの 取得方法がありましたらお教えください。
【afr-v202012.00-rx-1.0.2】は何度かトライし成功しました。
2. プロジェクト生成のオブジェクト削減方法がありましたらお教えください。 afrを指定し新規プロジェクト生成で大量のソースが得られ、コンパイルすると約900kBオーバーです。 また、RAM、RAM2空間何れも使用され、GLCD用バッファが確保できない状況でです。 そこでフォルダ【application_code】-【demos】下の【include】と【network_manager】以外は削除。 (一部関数などは別モジュールに保存) また【libraries】の一部も削除。結果 bssも含めRAM領域に詰めることができました(?)。 (これでRAM2領域を空け GLCD用バッファ確保できるの状態かと思っています。map情報では) LEDチカチカタスク(Kernel-Onlyと同じ処理)とソケットタスクで(main記載の関数から起動) LED点滅とPCからのPINGは確認できました。(簡単なメッセージ通信も含め)
この削除手順をプロジェクト作成時(E2Studioのインポート機能などで)で選択することは 可能でしょうか? 可能ならお教えください。(削除作業はカット&トライで確認です)
3. afrのマニュアルの入手法をご存知でしたらお教え願います。 上記の様に資料も確認しないで行った為、誤りが多々あると思われますので確認したいと 考えています。 以上、よろしくお願い致します。
マイコン初心者さん
こんにちは、シェルティです。ルネサスの中の人です。
RX72N Envision Kitをご活用いただきありがとうございます。
1.Release RX MCUs Amazon-FreeRTOS v1.0.2 comes from original 202012.00 が良いかと思います(すでにこれと同じ【afr-v202012.00-rx-1.0.2】をご利用いただいていますね)
https://github.com/renesas/amazon-freertos/releases
→この中から使いたいボードが対応している一番新しいバージョンを選ぶと良いです。
2.試していただいた通り、demoやlibrariesから不要なファイルを削除していってください。残念ながらe2 studio上でこの手の操作は今のところ出来ないです。RAファミリのFSPはこのあたり洗練されており、e2 studio上で「MQTTライブラリだけを取り外す」といったことが可能です。RXファミリもできるようにしていく考えです。
3.AFR(Amazon FreeRTOS)のマニュアルは以下から入手可能です。
https://aws.amazon.com/jp/freertos/ (トップページ)
https://docs.aws.amazon.com/freertos/latest/userguide/freertos-getting-started.html (FreeRTOSのgetting started)
以上です
シェルティさん、リプライありがとうございます。マイコン初心者です。
◎"これは御自身でRXスマートコンフィグレータでFITモジュールや CGコンポーネントを追加されてのことでしょうか?"
失礼しました。 オブジェクト全体でのサイズを記載しました。bssは386840です。 text data bss dec hex filename 569993 1024 386840 957857 e9da1 xxx.elf
RAM2への浸食なしで対応できるのではと思います。 (KernelのHEAP設定、半分でも可ではと思っています。 デフォルトは256K)
◎"afr FreeRTOS(with IOT libraries)のお勧めバージョン" 【afr-v202012.00-rx-1.0.2】でOK、ありがとうございます。
◎"ボードが対応している一番新しいバージョン" 更新されていたのですね。だいぶ前にダウンロードしたファイル使ってました。 今までこれが古かった為か、設定やビルドエラーに手間取っていました。 メンテナンスありがとうございます。
スマートコンフィグレータでコンポーネット更新のみでPING機能が確認できました。 (シリアルターミナルのSCI2のピン設定のみ実施)※MACアドレスのユニーク設定は必須ですが。
余りにも簡潔のため、【r_eter_rx】コンポーネントの"PHY-LSI address setting for ETHER0"を 【1】に変更する事まで忘れましたが、これも【0】のままで可でした。
新しいボート設定ファイルで新規プロジェクト作成することにします。
RAファミリでのFSP情報ありがとうございます。 ◎"AFR(Amazon FreeRTOS)のマニュアル"
AFRのマニュアル情報ありがとうございます。 参照させてい頂きます。
以上
マイコン初心者です
いつもかふぇルネから情報を頂いています。
パソコン入れ替えで再度環境を準備し、以前のプロジェクトを新規作成したところ設定などを忘れていたことに気づいたのでメモ(備忘録必須)しながら作業しました。参考になるかは疑問ですがこのメモをアップします。(ラフな記載です)
内容はRx72EnvisionKit用のFreeRTOS(KernelOnly)プロジェクト作成後FreeRTOS_TCP Ver3.1を取り込みソケット環境作成についてです。既知の情報かもしれませんが、どなたかの参考になればと思い。
その他のタスクについては記載してませんが 4個くらい起動し一つはソケットクライアントタスクを起動しエコー機能なども確認した環境です。
TRACEALYZERでの詳細確認はしてません。(評価期間が短いのでサインするのを検討中)
FreeRTPS+TCP備忘録.xlsx
マイコン初心者さん、シェルティですこんにちは。ルネサスの中の人です。
FreeRTOS(KernelOnly)の上位にFreeRTOS+TCPを盛り付ける手順書エクセルについて確認しました。必要な手順が明確化されていて助かります。またこういった資料がルネサス公式で出せておらずすみません。近い将来、e2 studio上で 「FreeRTOS(Kernel Only)とFreeRTOS+TCP」のみを含む状態で新規プロジェクト作成できるよう、実装検討を進めています。手動で構築する場合はアップロードいただいたエクセルの手順を踏むのが現状最適です。
なお、「FreeRTOS(Kernel Only)とFreeRTOS+TCPとMbed TLSとAWS接続用のMQTTライブラリ等諸々」の環境は以下が最新版です。TCP/IPまでの場合はマイコン初心者さんのように手動でプロジェクトを組み立てるのが良くて、AWS接続まで視野に入れる場合は手作業でくみ上げるのは相当骨が折れる(シェルティは昔その道を開拓しました)のでe2 studioのプロジェクト生成機能に頼る(e2 studioが以下GitHubから最適なコードをダウンロードして自動で組み立てる)のが良いと思います。
https://github.com/renesas/iot-reference-rx
こんにちは。マイコン初心者です。
シェルティさん 早速の内容確認ありがとうございます。今後FreeRTOS with TCPの環境がプロジェクト生成時に対応頂けること期待します。
直ぐにでも応答べきのところ申し訳ありません。前回、簡単にソケットアプリも動作確認と記しながらソース記載しませんでしが、これは多数のカット&トライの残骸がありそれの修正をしてました。
そこそこ纏まったのでアップロードします。(動作保証なしですが)
ソースはRX72N EnvisionKitnのLCDへ表示する画像をPC等から更新できることを目的とし、参考にしたエコー通信機能を拡張し機能追加しましたが通信手順は手抜きです。(ヘッダ部がヒットすると不具合になる)エコー機能があると確認など便利なので今回も残してます。
サーバIPアドレスをソース埋め込みではサーバを替える度再コンパイルになるのを避けるためSDカードから取得としたのですがこの機能がない場合にも対応できる様に変更しました。22行のIPアドレスを環境に合わせ修正後、vApplicationDaemonTaskStartupHook()でソケット初期化完了後vStartMyClientTask();を呼ぶこと起動する予定。(先にプロトタイプ宣言必要)
動作保証はなしですが、どなたかの参考になればと他のTaskも整理後アップロードを考えています。
myClientTask.zip
こんにちはマイコン初心者です
動作保証は出来ませんが追加タスク1個をアップロードします。制御の詰めが甘いかと思いますが見た目では期待した動作です。どなたかの参考になれば
機能: 照度センサ制御 制御ソース部はRenesas様提供版参考 ※ 残念ながらISL29034はEOL期間を過ぎ入手は困難と思われます
概要: タスク起動でISL29034初期化後、照度データ取得し変数更新と LCDバックライトPWM制御 ※変数は別タスクで参照
プロジェクトへの取り込みと設定:
SCFGでのコンポーネント追加: 〇【I2Cマスターモード】をリソース【SCI11】選択で追加 〇【PWMモードタイマ】をリソース【MTU7】選択で追加
SCFGでのコンポーネント設定変更: 〇I2Cマスターモード 【ビットレート】 【400】 kbps 【ビットレートモジュレーション機能有効】へチェック 【割込みレベル】 【レベル2】 〇PWMモードタイマ 【カウンタクリア要因】 【TRGC7コンペアマッチ(TRGC7を周期...】 【カウンタクロック】 【PCLK/32】 【TGRC(D)7子】 【アウトプットコンペアマッチレジスタ】 【MTIOC7C端子】 【端子初期出力は0、コンペアマッチで1出力】※Port6_7 【TGRDコンペアマッチ一致時動作】 【MTIOC7C端子から0出力】 【PWM周期】 【10】 【ms】 【TGRD初期値】 【0】
【I2Cマスターモード】は他に【SCI6】で追加。設定は同じ(タッチパネル制御用)
〇FreeTROS_Object 【Tasks】タブ選択し追加ボタンを押し新たなtask作成 作成したtask行の【Task Code】,【Task_Name】へそれぞれ 【task_ALS】を入力 それ以外はデフォルト
タスク本体ファイル更新: ファイル【task_ALS.c】はSCFGでコード生成すると同じ名前で【src/frtos_skeleton】フォルダに 生成される。これの中身入れ替え
その他ファイルのプロジェクト取り込み: 【src】直下へフォルダ【mySrc】作成後そこへ以下ファイルコピー 1) isl29034_cnt.c 2) isl29034_cnt.h 3) isl29034_sensor.h 4) my_sci_def.h
SCFG生成で作成されたファイル修正: 【src\smc_gen\Config_SCI11_user.c】で同じコメント文の間へ挿入 1. インクルード文追加 /* Start user code for include. Do not edit comment generated here */ #include "../mySrc/my_sci_def.h" /* End user code. Do not edit comment generated here */
2. グローバル変数追加 /* Start user code for global. Do not edit comment generated here */ extern stTarnsStat sci11_state; /* End user code. Do not edit comment generated here */ 3. 送信終了割込み関数へ追加 /* Start user code for r_Config_SCI11_callback_transmitend. Do not edit comment generated here */ sci11_state.TxEnd = 1; /* End user code. Do not edit comment generated here */ 4. 受信終了割込み関数へ追加 /* Start user code for r_Config_SCI11_callback_receiveend. Do not edit comment generated here */ sci11_state.RxEnd = 1; /* End user code. Do not edit comment generated here */
CMTで呼び出される周期割込み用ソース(プロジェクト名.c)追加: 1. インクルード文 #include "./mySrc/my_sci_def.h" 2. 外部変数定義 extern stTarnsStat sci11_state; // SCI11(照度センサ用IIC通信) タイムアウト管理 3. CMT_ISR関数(既にあるLED制御の下あたりへ) // --------------------------------------------------------- // Light Sensor(ISL29034)I2C通信監視用タイマ制御 if (sci11_state.WaitCount) sci11_state.WaitCount--;
task_ALS .zip
動作保証は出来ませんが、また追加タスク1個をアップロードします。SNTPからの時刻取得は直接ソケット通信が良いかと思いますがEnviosnキット搭載のESP32を使用しSNTPで時刻取得するタスクです。スマートな手順かは?ですが参考になれば
機能: SNTPサーバから時刻を取得し SYS_TIMEモジュールの初期化 制御ソースはカット&トライで作成(誤っているかも) 一度取得すればタスクは消滅。 ※SNTPサーバへの負荷増加は避ける
概要: タスク起動でESP32初期化後、Uart通信でWiFi機能を制御
プロジェクトへの取り込みと設定: SCFGでのコンポーネント追加 〇【Generic system timer for RX MCUs using CMT Module】を選択し終了で登録 設定オプションなし
SCFGでのコンポーネント設定変更: 〇【r_sci_rx】を選択し【プロパティ】を開き 【Include software support for channel 7】を【Not】から【Include】 ※すでに1,2のchannelは【Include】済み 【SCI7】の信号はRXD7,TXD7のみ選択(端子はP90,P92使用)
〇FreeTROS_Object 【Tasks】タブ選択し追加ボタンを押し新たなtask作成 作成したtask行の【Task Code】、【Task Name】へそれぞれ 【task_WIFI】を入力 それ以外はデフォルト 【Queues】タブ選択し追加ボタンを押し新たなQueue作成 作成したQueue行の【Queue Handleler】へ【queue_handle_SD】、【Queue Length】へ32を入力
タスク本体ファイル更新: ファイル【task_WIFI.c】はSCFGでコード生成すると同じ名前で【src/frtos_skeleton】フォルダに 生成される。これの中身入れ替え
その他ファイルのプロジェクト取り込み: 【src】直下の【mySrc】フォルダへ以下ファイルコピー 1) esp32_cnt.c 2) esp32_cnt.h 3) esp32_cnt_msgdef.h 4) time_month_cnt.c 5) time_month_cnt.h 6) sd_type_def.h
ESP32とAP接続パラメータのSSDIDとパスワードの設定【esp32_cnt_msgdef.h】記載の定数 TxCmd5[]を環境に合わせ書き換える 以下のコメントを有効にする【//#define INITIAL_SETUP】
コンパイル後実行すれば時刻設定が完了する予定!
動作確認はデバッカー環境が良いかと思いますESP32のTxDはPmod2の2pinへ出力するで(3.3Vロジックなので変換器要)端末と接続すればモニター可能(SCI7経由で)(端子間接続機能があればSCI7を使わなですむのですが)一度実行し成功したら【//#define INITIAL_SETUP】をコメントアウト(遅くてもよいならそのままでも可)
2.4Gでの接続確認済み。5Gでは接続失敗(コマンド変更要?、非対応?)
task_WIFI.zip
こんにちはマイコン初心者です。
動作保証は出来ませんが、また追加タスク1個アップロードします。
どなたかの参考なれば。
機能: SDカード制御
概要:別タスクからの要求処理(ホストアドレス要求含む) カード挿抜ログなど 通電状態を示すLED、SDカード取り出し要求SW制御
プロジェクトへの取り込みと設定: SCFGでコンポーネント追加 〇【SD Mode SDHI Driver】を選択し終了で登録 〇【SD Mode SD Memory Card Driver】を選択し終了で登録 〇【Memory Driver Interface for Open Source FAT File System】を選択し終了で登録 △【Open Source FAT File System】は上記操作で登録される プロパティ修正は以下のコンポーネント 【SD Mode SDHI Driver】のr_sdhi_rx 【Memory Driver Interface for Open Source FAT File System】のr_tfat_driver SCFGでコンポーネント設定変更: 〇【r_sdhi_rx】を選択し【プロパティ】を開き 【Use CH0 SDHI_WP】の【Used】からチェックマークを消す
〇【r_tfat_driver】を選択し【プロパティ】を開き 【Number of SD memory card drives】の値を【1】に設定 【Memory Drives 0】の値を【SD memory card】に設定
〇FreeTROS_Object 【Tasks】タブ選択し追加ボタンを押し新たなtask作成 作成したtask行の【Task Code】,【Task Name】へそれぞれ 【task_SD】を入力 それ以外はデフォルト 【Queues】は既に作成済み(task_WIFI組み込み時)
SCFGでコード生成後以下ファイル修正: 〇【src\smc_gen\r_sdc_sdmem_rx\src\r_sdc_sd_config.c】 詳細はRenesas資料【R01AN4233JJ0300 Rev.3.00】参照 ※Wait系関数のFreeRTOS対応 タスク本体ファイル更新: ファイル【task_SD.c】はSCFGでコード生成すると同じ名前で【src/frtos_skeleton】フォルダへ 生成される。これの中身入れ替え
その他ファイルのプロジェクト取り込み: 【src】直下の【mySrc】フォルダへ以下ファイルコピー 1) sd_card_cnt.c 2) sd_card_cnt.h (sd_type_def.hは取り込み済み)
他ファイル修正: 以下の機能を追加 SDカードへの電源供給LED2制御(LED2のHEART動作中止) SDカード抜き取り要求SW2
CMTの周期割込みファイル修正 1)定義追加 #define SD_LED_PORT (PORT5.PODR.BIT.B5) #define SD_LED_OFF (0) #define SD_LED_ON (1) #define P_SW_DATA (PORT0.PIDR.BIT.B7) extern uint8_t g_SDPowerStateLed; extern uint8_t g_ReqSDCartEject; 2)関数修正 〇 HEART_LED_PORT ^= 1;をコメントアウト 〇以下追加 static uint8_t sd_led_counter = 0; if (g_SDPowerStateLed == 1 || // 点滅 sd_led_counter ) { sd_led_counter++; if (sd_led_counter > 100) { sd_led_counter = 0; } SD_LED_PORT = sd_led_counter & 0x10; HEART_LED_PORT = (sd_led_counter & 0x10) != 0 ? 0: 1; } else if (g_SDPowerStateLed == 0) { // 消灯 SD_LED_PORT = SD_LED_OFF; HEART_LED_PORT = 1; } else { // 点灯 SD_LED_PORT = SD_LED_ON; HEART_LED_PORT = 0; } static uint32_t sw_scan_data = 0; sw_scan_data = (sw_scan_data << 1) | (~(P_SW_DATA) & 0x01); if (sw_scan_data == 0x3F) { g_ReqSDCartEject = 1; // 抜き取り要求 } ※ソース整理中ソケット通信モジュールの修正すべき箇所を思いつく。 (sd_card_cnt.cは修正済み) 1. IPアドレスの変数配列はuint32_tは メモリの無駄使い static uint8_t g_ServerIPAddr[4] = {... extern uint8_t g_ServerIPAddr[4]; 2. SDタスクへのIPアドレス要求はセマフォ待ち時間指定したが、準備できるまで待つのが すなおな処理かと考え portMAX_DELAYに変更(後のエラー処理も不要) xSemaphoreTake(semaphore_handle_ServerIPUpdate, portMAX_DELAY); 以上
task_SD.zip
動作保証は出来ませんが、QSPI制御部のみアップロードします。今回はヘルプ依頼も含んでいます。
LCD表示画像保存用のQSPI-ROM(MX25L3233F)制御です。ソースはRenesasから提供頂いてるR01AN3509JJ0100サンプルソースを基に作成。
オリジナルソースからの修正点: 1. 256色LUT形式BMPファイルから65536色BMPファイルに変更(一部残っていますが) 変更理由: ※ 画像横幅は1画素byte数x画像横幅の値が64の整数倍(r01an3509jj0100-rx.pdf)の 制限がありオリジナルでは448x253x1byteで使用 これを480x272x2bytとした。ただし保存フォーマットは同じBMP。 (保存形式を合わす必要もないのですが) 2. 転送モードをFLASH_SPI_QUADにする(早くなったかは未確認)
ヘルプ: ソース整理中DMAでも可能にと思いつき、R01AN2662JJ0330を試したが 書き込みはOKですが、読み出しDMAで失敗し断念。(プロクラム転送はOK) 【rskrx72n】などで【USE_DMAC_FIT】を有効にて試され人がいたら アドバイスお願いします。(rskrx持ってません!) R01AN2662JJ0330でのモジュール構成は今後ROMなどを変更した場合、簡単に対応 できるのではないかと思っています。
プロジェクトへの取り込みと設定: SCFGでコンポーネント追加 〇【QSPI Clock Synchronus Single Master Control Module Usign ...】を選択し終了で登録 〇【Clock Synchronus Control Module for Serial Flash memory Access】を選択し終了で登録 △【Memory Driver】は上記操作で登録される プロパティ修正は3個すべて必要 SCFGでコンポーネント設定変更: 〇【r_qspi_smstr_rx】を選択し【プロパティ】を開き 【リソース】の【QMO/QIO0端子】と【QMI/QIO1端子】の使用へチェック
〇【r_Flash_spi】を選択し【プロパティ】を開き 【Devcie 0 32Mbit(4Mbyte)】の値【Control target】に変更 【Devcie 0 64Mbit(8Mbyte)】の値【Not Control target】に変更 【Devcie 0 Port Number】の値は【PORTD】に変更 【Devcie 0 Bit Number】の値は【PIN4】に変更
〇【r_memdrv_rx】を選択し【プロパティ】を開き 【Devcie 0 Driver】の値【QSPI clock sync....】に変更 【Devcie 0 transfer for xxx】の3種の値【30000000】に変更
ファイルのプロジェクト取り込み: 【src】直下の【mySrc】フォルダへ以下ファイルコピー 1) qspi_rom_cnt.c 2) qspi_rom_cnt.h 3) r_memory_config_RX72N_Envision.h
qspi_rom_cnt.zip
動作保証は出来ませんが、最後のタスクアップロードします。どなたかの参考になれば
task_LCDとその制御部ソース
概要: Renesasから提供頂いてるR01AN3509JJ0100サンプルを基に作成 サンプルとほぼ同じ 追加した時刻などの表示はフォントの使用権などが不明のため 一部関数を空にしてます(フォントは半角と全角の2種使用) Web等検索し対応ください またタッチパネル処理はポーリングで触れているを 検出で処理でしたが、割込でタスク起動しダウン検出処理に変更
プロジェクトへの取り込みと設定: SCFGでコンポーネント追加 〇【Graphics LCD Controller Module】を選択し終了で登録 〇【割込みコントローラ】を選択し【次へ】クリック後終了で登録(デフォルト名) 〇【I2Cマスタモード】を選択し【次へ】クリック後SCI6を選択後終了で登録 プロパティ修正は【割込みコントローラ】、【Config_SCI6】、【Config_PORT】 SCFGでコンポーネント設定変更: 〇【Config_ICU】を選択し【プロパティ】を開き 【IRQ4】を有効にし【立下りエッジ】、【レベル2】に設定
〇【Config_SCI6】は【Config_SCI11】と同じ設定にし 変数宣言、処理などもSCI11と同様にソース修正
〇【Config_PORT】の【PORTB-3】と【PORT6-6】を出力に設定
ファイルのプロジェクト取り込み: task_LCD.cは他のタスク同様にRTOS_Objectで登録後ファイル内容を入れ替え その他のソースは【src】直下の【mySrc】フォルダへ以下ファイルコピー 1) lcd_cnt.c 2) lcd_cnt.h 3) touch_panel_cnt.c 4) touch_panel_cnt.h 5) touch_def.h
その他: 表示切替をSDカード抜き要求と同じSW2に割り当てました。(他にスイッチ無かったので) 周期割込み関数内の以下に切替要求を挿入 if (sw_scan_data == 0x3F) { // オンのエッジ検出 gReqLcdDispModeChange = 1; <<<==ここへ(変数は外部定義で宣言) g_ReqSDCartEject = 1; // SDカード取り出し要求 } ※LCD用の画像データはRenesasから提供されているR01AN3509JJ0100のサンプルプロジェクト 【serialflash_writer_rx65n】の【image】内のBMPを480x272x16bitに変換後 ソースもサイズ等変更し実行でQSPIROMへ書き込む (ソケット通信での書き込みはWindowsなどのアプリ準備が必要 処理は単純)
以上 これでおしまい。
task_LCD.zip
前回おしまいとしましたが、Tracealyzerでの確認が抜けていたので試しました。その時のメモ。既に組み込ん済みの方もいるかと思いますが。
【Percepio Technical Support】の温かな支援を受けログ確認しました動作保証無しですが、どなたかの参考になれば。
Tracealyzer v4.8.2でストリームポートTCP使用。ログ情報は$(MyDocuments)/Tracealyzerに保存。これがOneDriveを参照しているとクラウドに保存されるので注意。Evaluation Edtionでは10日間ですが不具合も発見。
【Tracealyzer4】起動画面で以下操作 設定 【Recorder Settings】クリック 【Settings】ダイアログの【PFS Streaming Settings】をクリックし以下設定 【Target Connection】 TCP 【TCP Address:】 IPアドレス(RX72N Evision Kit) 【Port:】 8888(デフォルト)
開始 【Record Streaming Trace】クリック
E2Studio設定1: セットアップしたTracealyzerフォルダ下にあるFreeRTOS用フォルダ【.\FreeRTOS\TraceRecorder】を プロジェクトソースへコピー【.\src\TraceRecorder】
2: 不要フォルダ削除 .\src\TraceRecorder\streamports\TCPIP以外削除 .\src\TraceRecorder\extras削除
3: ファイル移動(パス設定数削減) .\src\TraceRecorder\streamports\TCPIP\config\trcStreamPortConfig.hを .\src\TraceRecorder\streamports\TCPIPへ移動 .\src\TraceRecorder\streamports\TCPIP\include\trcStreamPort.hを .\src\TraceRecorder\streamports\TCPIPへ移動
4: .\src\TraceRecorder\config\trcConfig.h変更 〇26行 コメントアウト //#error "Trace Recorder: Please include your processor's header file here and remove this line."
〇45行 TRC_CFG_HARDWARE_PORT定義 #define TRC_CFG_HARDWARE_PORT TRC_HARDWARE_PORT_Renesas_RX600
〇149行(スタックをモニタする場合の変更) #define TRC_CFG_ENABLE_STACK_MONITOR 1
5: .\src\TraceRecorder\config\trcKernelPortConfig.h変更 〇63行 FreeRTOSバージョン設定 #define TRC_CFG_FREERTOS_VERSION TRC_FREERTOS_VERSION_10_4_3 (TRC_CFG_RECORDER_MODEはRC_RECORDER_MODE_STREAMINGで設定済み)
6: .\src\TraceRecorder\include\trcHardwarePort.h変更 〇240行, 246行, 250行のCMT0をCMT3へ変更 #define TRC_HWTC_COUNT (CMT3.CMCNT) #define TRC_HWTC_COUNT (CMT3.CMCOR - CMT3.CMCNT) #define TRC_HWTC_PERIOD (CMT3.CMCOR + 1)
7: .\src\frtos_config\FreeRTOSConfig.hの最後へ追加 #if ( configUSE_TRACE_FACILITY == 1) <=== 追加 #include "trcRecorder.h" <=== 追加 #endif <=== 追加 #endif /* FREERTOS_CONFIG_H */
8: プロジェクトプロパティのC/C++ビルド-設定-Compiler-Includesへ以下追加 "${workspace_loc:/${ProjName}/src/smc_gen/r_bsp/mcu/rx72n/register_access/gnuc}" 注) "${workspace_loc:/${ProjName}/src/TraceRecorder/include}" "${workspace_loc:/${ProjName}/src/TraceRecorder/config}" "${workspace_loc:/${ProjName}/src/TraceRecorder/streamports/TCPIP}" 注)プロジェクトクリーン等で消えるの再設定要
9: ./src/frtos_startup/freertos_start.cの関数void Processing_Before_Start_Kernel(void)先頭へ以下追加 BaseType_t ret; xTraceEnable(TRC_START); <=== 追加 ※ 関数xTraceInitializeは呼び出し不要
10: .\src\TraceRecorder\streamports\TCPIP\trcStreamPor.cを添付ファイルに置き換える
不具合1: タッチ割込みでタスク生成したので、タスクリストが増える! 割込みでxTaskCreateはなしでね!タスクサスペンド、レジュームに変更 〇task_TP.c生成 SCFGでタッチパネル用タスク新たに作成(タスクハンドル設定とプライオリティ2) ソースは以下。 void task_TP(void * pvParameters) {/* Start user code for function. Do not edit comment generated here */ while(1) { vTaskSuspend( NULL );<= 直ぐサスペンド prvTouchPanelFunc(); <=タスクでは無く単なる関数のため名前変更 }/* End user code. Do not edit comment generated here */ }
〇、touch_panel_cnt.c(h)変更 関数名変更とvTaskDeleteを削除 //void prvTouchPanelTask(void * pvParameters) void prvTouchPanelFunc(void) <= 関数名変更 { | // uint32_t CMT_TP_INT_DelayCh; <= 2項の変更 // R_CMT_CreateOneShot(1*1000, CMT_TP_DlyIsr, &CMT_TP_INT_DelayCh); <=2項の変更 // vTaskDelete(NULL); <= 削除 }
〇TP_IRQ4_IsrCallback変更 extern TaskHandle_t xTaskHandle_TP; <=タスクハンドル void TP_IRQ4_IsrCallback(void) { // R_Config_ICU_IRQ4_Stop(); <= 2項の変更 portBASE_TYPE xYieldRequired; xYieldRequired = xTaskResumeFromISR( xTaskHandle_TP ); portYIELD_FROM_ISR( xYieldRequired ); }
2: タッチするとログが一時停止 〇touch_panel_cnt.c変更 割込解除が誘発した? 割込み禁止、許可処理を削除 修正は1項で記載済み ※ワンショットタイマは未使用
まだ他にも不具合があるかもですがTHE END trcStreamPort.zip
シェルティです、こんにちは。
RX72N Envision Kitをフル活用いただきありがとうございます。Tracealyzerも試していただき感謝です。Tracealyzerの組み込み方法について正しいことを確認しました。
以下RX72N Envision Kitのデモ用ファームウェアでTracealyzerが動作している様子を撮った動画です。
https://github.com/renesas/rx72n-envision-kit#tracealyzer-demo-on-rx72n-envision-kit
trcStreamPort.zip にはいっていたtrcStreamingPort.cも確認してみました。以下私が作成したコードと同じ具合でした。
https://github.com/renesas/rx72n-envision-kit/blob/master/libraries/3rdparty/tracealyzer_recorder/streamports/AFR_WIFI_LOCAL/trcStreamingPort.c
Tracealyzerは以下RX72N Envision Kitの解説ページで解説しているように「モニタデータは 20-200 KB/s (160 - 1600 Kbps) のレートで生成される」ようでして、モニタデータを相応の転送レートを持つ通信路でマイコンからPCに向けて出力する必要があり、UARTだと若干非力で、SPIだとPC側で受け取る治具作成が必要、TCPだと通信レートは良いけれどTCPを扱えるハードウェアを持つRXマイコンの品種が限られる、という課題がありました。
https://github.com/renesas/rx72n-envision-kit/wiki/Tracealyzer-Recorder%E3%81%AE%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95
ということで、現在試作中ですが、「GR-ROSE等のSPI通信が可能でEtherの口も備えるボード」でTracealyzerのモニタデータをSPIで受けEtherに転送するインタフェース変換機構を考え中です。これが出来れば以下のように任意のマイコンボードでSPI利用可能な1チャネルのみを利用しTracealyzerモニタシステムが出来るのではと考えてます。
FreeRTOSを搭載したTracealyzerでモニタしたいシステムマイコンボード→<SPI>→GR-ROSE等のSPI通信が可能でEtherの口も備えるボード→<ether>→PC(Tracealyzer)
シェルティさん、こんにちは。
マイコン初心者です。Tracealyzer動作確認ありがとうございます。
とても魅力的なRX72N Envision Kitのハード、ソフト。価格も戦略的で有難く使わせて頂きました。また魅力的な基板の提供頂けたら幸いです。
本基板は当分引き出しの中となります。ありがとうございました。
以上 (うっかりnoreplyへ返信してました)