マイコン初心者です。
いつもかふぇルネから情報を頂き、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のマニュアルの入手法をご存知でしたらお教え願います。 上記の様に資料も確認しないで行った為、誤りが多々あると思われますので確認したいと 考えています。 以上、よろしくお願い致します。
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