マイコン初心者です。
いつもかふぇルネから情報を頂き、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なら、別の取っ掛かりを考えていくのですが。
マイコン初心者さん、こんにちは。NoMaYです。先ほどの件は、glcdc_initialize()を呼ぶようにしたのが、今回のプロジェクトから、ということでしょうかね?
NoMaYさん確認リプライありがとうございます。
>glcdc_initialize()を呼ぶようにしたのが、今回のプロジェクトから
チョット違います。
glcdc_initialize()は元々FreeRTOS kernel-Only環境で呼んでいて、FreeRTOS kernel-Only環境の
プロジェクトをafr環境に乗せ換えました。(ソケット通信機能を取り込み<=BMPデータ更新をソケット通信で行いたい)
FreeRTOS kernel-Only環境ではglcdc_initialize()での割り込みは設定はtrueで使用し
(RX65Nサンプル)期待した動作が行えました。(オーバーレイ、アルファブレンド
ガンマー、ブライトネス等)
afr環境では、FreeRTOS_IPInit()を実行するとr_ehernetが初期化され、Sokect機能が有効になり、PING機能もこの時点で有効になる。(理解に誤りがありましたら指摘願います)
これに別タスクで実行するglcdc_initialize()の割り込み設定にて、FreeRTOS_IPInit()で設定した
PING機能(Sokect機能)が正常に動作しなくなる現象の相談です。(私の環境ではこの様に見える)
PING動作が正常でなるなる条件がglcdc_initialize()の割り込み設定に依存しているのでは?の
相談です。
補足:
最初の不具合確認はFreeRTOS_IPInit()でSokect機能正常後、別クライアントタスクを
作成しPCとコネクト状態を確立後、不定期にディスコネクトが発生するでした。
原因を調べるため、このクライアントタスクを起動しないで、PING機能が
動作するかで確認することにし、glcdc_initialize()の割り込み設定が影響し
VPOS割り込みを有効にすると不具合が発生するのではと行きつきました。
マイコン初心者さん、こんにちは。NoMaYです。表現の厳密さはともかくも、RX65N FreeRTOS Kernel onlyプロジェクト → RX72N FreeRTOS(with IoT libraries)プロジェクトという移植案件、なのですね。そういうことならば、RX65N FreeRTOS Kernel onlyプロジェクトの時は、TCP/IPドライバはT4でしたでしょうか?(すみません、たぶん、この案件は私では早々とギブアップしてしまう、ことになりそうですが、情報集めです。)それで、思うに、RX72N Envision KitでLCDを扱うプロジェクトは以下にあり、ここでR_GLCDC_Open()することは行われていると思いますが、RX72N FreeRTOS(with IoT libraries)でもRX72N FreeRTOS(Kernel only)でも無い、というところが手詰まりな感じですね。1 GLCDC DRW2D emWin(Segger GUIミドルウェア) - RX72N Envision Kit Wikigithub.com/renesas/rx72n-envision-kit/wiki/1-GLCDC-DRW2D-emWin(Segger-GUIミドルウェア)
NoMaYさん。こんにちは。
マイコン初心者です。また長い記載になります。プロジェクトにつて整理します。
>RX65N FreeRTOS Kernel onlyプロジェクト → RX72N FreeRTOS(with IoT libraries)>プロジェクトという移植案件
RX65N FreeRTOS Kernel onlyプロジェクトは作成してません。(提供も無いと思います)【R01AN3509JJ0100】はベアメタル環境で、GLCDC、RSPI、SCI-IIC機能を制御しQSPI-ROMに保存したBMPデータをGLCDCへ表示するプロジェクトとQSPI-ROMへBMPデータを保存するプロジェクトの2種で構成されています。(T4は使用してません)
これを参考にRX72N EnvisionKitへ、最初にベアメタル版GLCDC制御を作成後FreeRTOS Kernel only版GLCDC制御を作成。この時点まではQSPI-ROMへBMPデータを保存するには別プロジェクトを使う不便な環境です。
この不便な環境をPCとのソケット通信でBMPデータ更新機能を付加するためにwith IoT libraries版を作成しました。
ところが、PCとの通信処理でソケットサーバーとのコネクト状態が不定期にディスコネクトが発生するため、with IoT libraries版作成時に不要なコード削除を止め出来るだけで変更を加えない版を作成し不具合を確認し今回ポストしました。
記載頂いたWebのSegger-GUIミドルウェアですが、RX65Nプロジェクトより先に確認したと記憶ですがマニュアルをみながらサンプル動作試みましたがその後、理解不足とCC-RXの壁(128k)に当たり断念しました。(CC-RX購入には踏み切れていません!)
個人的な感想で申し訳ありませんが、Segger-GUIはブラックボックス化されていてその他のモジュールとの関係がイメージできませんでした。(セミナーに参加すれば別かとは思いますが)
【glcdc_initialize()】と【FreeRTOS_IPInit()】が共存した環境を試された方がいましたら、その時のVPOS割り込み設定はどうされたかお教え頂けたらと思います。現在発生の不具合が私固有の問題であるのか確認したいと考えています。
2面のフレームバッファを同時に表示用として使い、オーバーレイ等の合成画像を表示してますが、1面のみ表示中に、もう片方の面に新しい画像準備後切り替えするタイミングにVPOS割り込みを使うのではと予想。(勝手な予想です。)
マイコン初心者さん、こんにちは。NoMaYです。たぶん、自分の勘違いしていた点は、以前の投稿で以下のように書かれていたのを、RX65Nで実際に何かを動かしていたことがある、というように受け取ったことのように思います。> FreeRTOS kernel-Only環境ではglcdc_initialize()での割り込みは設定はtrueで使用し> (RX65Nサンプル)期待した動作が行えました。(オーバーレイ、アルファブレンドガンマー、ブライトネス等)でも、以下の文面ですと、RX65Nで実際に動かしたことがあったわけでは無さそうですね。どうも失礼致しました。> これを参考にRX72N EnvisionKitへ、最初にベアメタル版GLCDC制御を作成後> FreeRTOS Kernel only版GLCDC制御を作成。サンプルプログラム【R01AN3509JJ0100】がRX65Nのものしか無いので(RX72Nの発表は2020年春)、RX65Nという単語が出てきていたのですね。そして、同じ引用ですけれども、以下までは動作していた、ということなのですね。> これを参考にRX72N EnvisionKitへ、最初にベアメタル版GLCDC制御を作成後> FreeRTOS Kernel only版GLCDC制御を作成。他方で、【afr-v202012.00-rx-1.0.2】の単体ではPingに関して動作していた、ということなのですね。ところが、2つを足して共存環境を作成したら動作しなかった、ということなのですね。どうも失礼致しました。> 【glcdc_initialize()】と【FreeRTOS_IPInit()】が共存した環境を試された方が> いましたら、その時のVPOS割り込み設定はどうされたかお教え頂けたらと思います。> 現在発生の不具合が私固有の問題であるのか確認したいと考えています。
NoMaYさん、 こんにちは。マイコン初心者です。
記載内容不備で内容不案内になり申し訳ありません。今回箇条書き頂いた内容の通りです。ありがとうございます。
glcdc_initialize()内で、R_GLCDC_Open(&glcdc_init_cfg)を実行するとLCD表示はしませんが表示のためのスキャン動作が始まるようです。(VPOS割り込みがこれ以降発生しブレークしました)
同様なことを行っている方がいましたら情報お願いします。
皆さん こんにちは。
その後、今回の環境を試されてる方からの情報がありませんでしたのでGCLDCのVPOS割り込み無しで試しています。
これまでFreeRTOSでのソケット通信でPCとローカル通信が可能となったので、タイムサーバーから時間情報を得ようと調べたところ以下に記載がありました。(既に試された方も居るかとは思いますが)<aws.amazon.com/.../>
この環境は以下のgithubからライブラリとデモアプリが入手でします。興味のある方参照してみてください。<github.com/.../coreSNTP><github.com/.../coreSNTP_Windows_Simulator>
【demo_config.h】に以下を追加して試しました(設定値が正しいかは不明ですがエラーになるので) #define democonfigLIST_OF_TIME_SERVERS "time.cloudflare.com", "pool.ntp.org" #define democonfigLIST_OF_AUTHENTICATION_SYMMETRIC_KEYS #define democonfigLIST_OF_AUTHENTICATION_KEY_IDS #define democonfigSNTP_CLIENT_POLLING_INTERVAL_SECONDS (1000) //1秒 #define pkcs11AES_CMAC_SIGNATURE_LENGTH (16UL) #define pkcs11configLABEL_CMAC_KEY "CMAC Key"
以下はafrの別ファイルで定義済みでしたので適当な名前に変更 #define democonfigDEMO_STACKSIZE configMINIMAL_STACK_SIZE
【SNTPClient.c】修正 xPlatformIsNetworkUp() が無いのでFreeRTOS_IsNetworkUp()に変更
以下はワーニング対応(無視でも可?) 以下の関数の第1引数 &pBackoffContextをpBackoffContextに変更 BackoffAlgorithm_InitializeParams BackoffAlgorithm_GetNextBackoff その他複数のワーニングにはキャストで対応(スタックへの配列確保は無視)
デモはSNTPクライアントタスクと、時間取得タスクが準備されていてます。 SNTPクライアントタスクは以下の周期で取得しました(お試しのため早いですが) vTaskDelay( pdMS_TO_TICKS( systemClock.pollPeriod * 60 ) ); // 1分=1秒*60 (時間情報はターミナル(SCI2)に出力されるので確認可能)
マイコン初心者です
いつもかふぇルネから情報を頂いています。
パソコン入れ替えで再度環境を準備し、以前のプロジェクトを新規作成したところ設定などを忘れていたことに気づいたのでメモ(備忘録必須)しながら作業しました。参考になるかは疑問ですがこのメモをアップします。(ラフな記載です)
内容は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