マイコン初心者です。
いつもかふぇルネから情報を頂き、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のマニュアル情報ありがとうございます。 参照させてい頂きます。
以上
前回NoMaYさん、シェルティさんから頂いた情報を基に複数のタスク起動し動作Okと思っていたのですが不具合が発生したので相談したくポストします。何か情報有りましたらお願いします。プロジェクトは再構築しデフォルトから可能な限り変更無しで作成。
チョット長い文になり、申し訳ありませんが宜しくお願い致します。
環境:前回と同じ
不具合状況: Window-PCからPINGをRX72N Envision Kitへ発行。 (ping xxx.xxx.xxx.xxx -n 100000 -w 5000) PINGに対して【要求がタイムアウトしました。】が発生します。 発生タイミングはランダムです。また発生後は復活することはないです。 (早い時で起動後5分くらいで発生、遅いと20分を超える場合あり)
プロジェクト作成設定: 1) afr-v202012.00-rx-1.0.2を選択しプロジェクト生成後 scfgのデバイス設定で【EnvisionKitRX72N(V1.13)】選択。 コンポーネントに【Ethernet Driver】【Graphics LCD Controler Module】【ポート】選択。 各コンポネントを最新バージョンに更新しコード生成。(例:r_bspは7.20) ※FreeRTOS_KernelのHeap領域は256*1024 -> 128*1024に変更 ※B_ETHERNET_BUFFERS_1,B_RX_DESC_1,B_TX_DESC_1, bssはRAM2へマップ(デフォルト)
2) main_task.cの【main_task()】で【glcdc_initialize()】実行後 無限ループ内でLED点灯制御に変更(可能な限り新たなタスク作成しないようにするため)
glcdc_initialize(); /* main loop */ while(1) { vTaskDelay(500); LED_PORT ^= 1; }
◎ glcdc_initialize()はRX65N用サンプルプログラム【R01AN3509JJ0100】の 【r_screen.c】【r_screen.h】使用。 フレームメモリアドレス IMAGE_RELOCATION_ADDR, IMAGE_RELOCATION_ADDR2を (0x00840000)、(0x00860000)に変更。<= (bss)との競合を避けるため。 ※最終的には256色では無く64k色仕様想定のため(0x00800000)~(0x0087xxxxx)を占有したい。 ※ コード生成直後のピン設定、フラッシュ設定、セマフォはそのまま使用。 ※【r_screen.c】の一部(タッチパネルや、RSPIリード)はコメントアウト。
3) main.cの【void vApplicationDaemonTaskStartupHook(void)】内の 【FreeRTOS_printf(( "The network is up and running\n" ))】の後はコメントアウト ※【FreeRTOS_IPInit()】を実行し、ネットワーク起動確認のみ。
確認状況: 1)【glcdc_initialize()】を起動しなければ【PING】動作問題無し。
2)【glcdc_initialize()】の先頭にあるフレームバッファ初期化無しでも現象発生。
3)【glcdc_initialize()】のret = R_GLCDC_Open(&glcdc_init_cfg);実行のみでも発生する。 ※この後にある【R_GLCDC_Control(GLCDC_CMD_START_DISPLAY, NULL)】をスキップ。 ret = R_GLCDC_Open(&glcdc_init_cfg); if (GLCDC_SUCCESS != ret) { while (1) { nop(); } } #ifdef WITHOUT_DISPLAY_START return; #endif
4)【glcdc_initialize()】の割り込み設定をfalseにすると発生しない。 これが大きく係わる?(Ethernet Driverと同じ割り込ベクター) /* Interrupt */ #ifdef SET_ERROR_PARAM <=これが有効なら現象発生。 glcdc_init_cfg.interrupt.vpos_enable = true; glcdc_init_cfg.interrupt.gr1uf_enable = false; glcdc_init_cfg.interrupt.gr2uf_enable = true; #else <=無効なら現象確認されない。 glcdc_init_cfg.interrupt.vpos_enable = false; glcdc_init_cfg.interrupt.gr1uf_enable = false; glcdc_init_cfg.interrupt.gr2uf_enable = false; #endif 割り込み禁止時では、4時間試し不具合は確認されませでした。 (割り込み禁止で動作するなら、【いいじゃん】が聞こえそうですが)
※最初に作成したプロジェクトでも割り込み禁止にすると不具合は発生しない。
考え方に誤り、確認すべき点有りましたらお願いします。
マイコン初心者さん、こんにちは。NoMaYです。まず一点確認させて欲しいのですが、ざっくり5分~20分ほどで動作がおかしくなるのは、前回時点のプロジェクトでも発生したことでしょうか?もし、OKのプロジェクトとNGのプロジェクトの2つがあるなら、差分を考察していくのも1つの取っ掛かりかなと思ったのです。前回のプロジェクトもNGなら、別の取っ掛かりを考えていくのですが。