こんにちは。NoMaYです。ライセンスはMIT Licenseでした。TLSとしてmbed TLSが使用されていました。サポートされているボードの写真を見ていたら、どれにも有線LANコネクタが無いことに気付きました。時代の流れでしょうか、、、Getting Started with Amazon FreeRTOSaws.amazon.com/freertos/getting-started/Amazon FreeRTOSaws.amazon.com/freertos/Amazon FreeRTOS ソースコードgithub.com/aws/amazon-freertos[関連リンク]FreeRTOS - freertos.orgwww.freertos.org/FreeRTOS - sourceforge.netsourceforge.net/projects/freertos/files/FreeRTOS kernel自体はCC-RXにも対応github.com/aws/amazon-freertos/tree/master/lib/FreeRTOS/portable/RenesasAmazon FreeRTOSはTLSにmbed TLSを使用github.com/aws/amazon-freertos/tree/master/lib/third_party/mbedtls[ニュース]組み込み業界に大インパクト「Amazon FreeRTOS」の衝撃 - 大原雄介,MONOistmonoist.atmarkit.co.jp/mn/articles/1712/28/news011.htmlアマゾン「AWS IoT」は何が衝撃的なのか - 大原雄介,MONOistmonoist.atmarkit.co.jp/mn/articles/1510/21/news026.html(2018/01/01 : 記事を選び直しました。)[追記]もしかしたら、オープンソースライセンスのドライバライブラリが用意されていないから、ルネサスさんはアマゾンさんに相手にして貰えないのかも、、、ちなみに、FreeRTOS kernel自体のライセンスがV10からModified GPLからMIT Licenseに変わったようです。
シェルティさん、こんにちは。NoMaYです。本年も宜しくお願い致します。着々と進んでいるようですね。プロジェクトにFreeRTOS-Plus-TCPを含めるようにする件、了解しました。やってみます。(その時、もしかすると、Amazon FreeRTOS V1.1.0ベースに変えるかも知れません。)あと、以下のウェブページに気付きましたので、リンクを張っておきます。(ただし詳しいものでは無かったです。)Amazon FreeRTOS Porting Guidedocs.aws.amazon.com/freertos/latest/userguide/porting-guide.htmlまた、GitHubのIssuesに以下のリクエストが投稿されていたことに気付きましたので、リンクを張っておきます。やりとりの雰囲気から思ったのですが、ルネサスさんのRXへの対応も問答無用で拒絶されるようなことは無さそうな気がしました。パッチを投稿すれば受け付けて貰えるかも知れません。Support for ESP8266github.com/aws/amazon-freertos/issues/1Support for Espressif ESP32github.com/aws/amazon-freertos/issues/3課題はルネサスさんのドライバライブラリのライセンスですが、FITは無理としても、コード生成機能に関しては、このスレッドの最初の投稿に書いたsourceforge.netのFreeRTOS kernelのソースのDemoフォルダのRX231のサンプルプログラムにコード生成機能で生成されたソースが含まれていましたので、やってやれなくはない気がしました。それに対し、FITに関しては、このスレッドの幾つか前の投稿で見付けたルネサスさんのアプリケーションノートにあったFITとFreeRTOSを組み合わせるサンプルプログラムを見ていて、どうも非公式ながらルネサスさんの社内には、r_bsp_rtosとか、r_cmt_rtos_rxとか、更にはFreeRTOSをFITモジュール化したものまで、あるらしいことに気付きました。FITに関しては、そういうやり方もありそうな気がしました。(取らぬ狸の皮算用ではありますが、以前の別スレッドの経験から、Amazon FreeRTOSをFITモジュール化することも自力で出来るのではないかと思いました。)なお、これらのFreeRTOS kernel+コード生成機能で生成されたソースを含むサンプルプログラムやFreeRTOS kernel+FITのサンプルプログラムにはCS+のプロジェクトが含まれていませんでしたので、年末にコンバート作業をやってCS+でビルド出来るようにしてみました。これは、新しくスレッドを立てて、後で投稿してみようと思っています。[ニュース]ちなみに、年末に以下の記事が出ていました。(意図されたことなのか分かりませんが、FreeRTOS kernelがサポートしているMCUの種類として、SHの名前は出しているのにRXの名前は出していませんでしたね、、、)組み込み業界に大インパクト「Amazon FreeRTOS」の衝撃 - 大原雄介,MONOistmonoist.atmarkit.co.jp/mn/articles/1712/28/news011.html
こんにちは。NoMaYです。この先どうなるのか分かりませんが、ちょっと好奇心から、GitHub上でAmazon FreeRTOSをforkしてみました。まだforkしただけで何の変更もしていませんが、、、github.com/NoMaY-jp/amazon-freertos
こんにちは。NoMaYです。今までRX231-RSKのプロジェクトファイルでやっていましたが、RX65N Envision Kitのプロジェクトファイルへ変更して、以下のようにしてみました。後ほどzipファイルに固めたものを投稿します。(1) RX65N Envision Kitの.projectと.cprojectを流用して.projectと.cprojectを再作成(2) RX65N Envision KitではFITやコード生成機能がスマートコンフィグレータに統合されたことに対応(3) Amazon FreeRTOSのソースコードをOTA Agentのベータ版が追加されたV1.1.0へ変更(4) Amazon FreeRTOSに含まれるFreeRTOS kernelのFreeRTOS-Plus-TCPを含めるように変更(5) config_filesフォルダのFreeRTOSConfig.hとFreeRTOSIPConfig.hの流用元を変更
(1) RX65N Envision Kitの.projectと.cprojectを使用して.projectと.cprojectを再作成以下の製品ページからデモファームウェア(ソースコード)のダウンロードページへ行って、RX65N Envition Kit Demo Firmware with Source Codeのrx65n_envisionkit.zipをダウンロードし、含まれていたRX65N Secure Bootプロジェクトの.projectと.cprojectを流用して.projectと.cprojectを再作成しました。(なお、今はまだリンクまで辿り着かないので関係ありませんが、RX65N Secure Bootプロジェクトで設定されていたセクションや追加されていたライブラリはそのままになっていますので、リンクまで辿り着くようになった時点で、その点を見直す必要があります。)RX65N Envision KIT 製品ページwww.renesas.com/ja-jp/products/software-tools/boards-and-kits/renesas-promotion-boards/rx65n-envision-kit.html
(2) RX65N Envision KitではFITやコード生成機能がスマートコンフィグレータに統合されたことに対応同様に、RX65N Secure Bootプロジェクトのscfgファイルを流用してスマートコンフィグレータを利用出来るようにしました。今回、BSPはRX65N Secure Bootプロジェクトのクロック設定のまま残して、他のコンポーネントを一旦削除した後、CMTとRSPIを追加しました。(なお、コンポーネントは取り敢えず追加してみたというところで、設定は見直す必要があります。)
(3) Amazon FreeRTOSのソースコードをOTA Agentのベータ版が追加されたV1.1.0へ変更プロジェクト構造やインクルードパス/マクロ定義の変更は.projectや.cprojectあるいはewpファイルの新旧を比較して推測しました。(なお、GitHubにはプロジェクトの比較機能があり、以下のURLなどで比較結果を表示させることが出来ますが、今のところプロジェクト全体の比較結果の中の該当ファイルの表示箇所へジャンプさせるような手段しか見当たらず、今回の場合はプロジェクト全体の差分が大きいのでジャンプするのに時間が掛かるようです。また、Microchip Curiosity PIC32MZEFに関しては、ソースが追加されたのがV1.1.0であり、V1.0.0のソースが存在しませんので、比較結果はありません。) ちなみに、今のところOTA Agentのベータ版が追加されているのはTexas Instruments CC3220SF-LAUNCHXLとWindows Simulatorの2つのみです。demos\nxp\lpc54018_iot_module\iar\aws_demos.ewpgithub.com/aws/amazon-freertos/compare/v1.0.0...v1.1.0#diff-6f8e55efce8c79414970e6baa9a41f3bdemos\pc\windows\visual_studio\aws_demos.vcxproj.filtersgithub.com/aws/amazon-freertos/compare/v1.0.0...v1.1.0#diff-d0ae91d5447bb6a74ddccfbb02ab35a4demos\st\stm32l475_discovery\ac6\.cprojectdemos\st\stm32l475_discovery\ac6\.projectgithub.com/aws/amazon-freertos/compare/v1.0.0...v1.1.0#diff-d79cf9777a8eec4ff0f5747da19f0765demos\ti\cc3220_launchpad\ccs\.cprojectdemos\ti\cc3220_launchpad\ccs\.projectgithub.com/aws/amazon-freertos/compare/v1.0.0...v1.1.0#diff-2c2a1f88087cc60628b236f661947ce7これらの情報を参考にして以下のようなプロジェクト構造に変更しました。
(4) Amazon FreeRTOSに含まれるFreeRTOS kernelのFreeRTOS-Plus-TCPを含めるように変更Amazon FreeRTOSに含まれていたFreeRTOS kernelにはFreeRTOS-Plus-TCPも含まれていましたので、使用されているものだと思っていたのですが、シェルティさんの調査により、使用されていなかったことが分かりました。今回、調べてみたところ、Amazon FreeRTOSのV1.1.0で追加されたMicrochip Curiosity PIC32MZEFのソースで使用されていることが分かりましたが、開発環境がMicrochip Harmonyとなっていて、Eclipse系ではありませんでした。また、Amazon FreeRTOSのWindows Simulatorでも使用されていましたが、開発環境はVisual Studioとなっていて、これもEclipse系ではありませんでした。GitHubのAmazon FreeRTOSのソースの次にSourceForgeのFreeRTOS kernelのソースを調べてみましたが、見付かったのは同じくFreeRTOS kernelのWindows SimulatorのVisual Studioのプロジェクトのみでした。最後にFreeRTOSのサイトを探してみたところ、以下のダウンロードページからダウンロードした160919_FreeRTOS_Labs.zipに、Eclipse系のAtollic TrueSTUDIOのプロジェクトの.projectと.cprojectが見付かりましたので、それを参考にすることにしました。FreeRTOS+TCP and FreeRTOS+FAT Source Code Free Downloadwww.freertos.org/FreeRTOS-Labs/RTOS_labs_download.html.projectと.cproject160919_FreeRTOS_Labs\FreeRTOS-Plus\Demo\FreeRTOS_Plus_TCP_and_FAT_STM32F4xxx\.project160919_FreeRTOS_Labs\FreeRTOS-Plus\Demo\FreeRTOS_Plus_TCP_and_FAT_STM32F4xxx\.cprojectなお、今回、FreeRTOS-Plus-TCPからMCUをアクセスする処理が記述されるソースであるNetworkInterface.cは以下のファイルをコピーしました。(CopyrightはAmazon.com, Incでは無くMicrochip Technology Incorporated and its subsidiariesでしたが、ライセンスは通常のMITライセンスでした。)コピー元:amazon-freertos-1.1.0\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\pic32mzef\NetworkInterface_eth.cコピー先:amazon-freertos-1.1.0\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX600\NetworkInterface.cこの階層には以下のファイルもあったのですが、必要な処理が足りているか分からず、コピーしませんでした。amazon-freertos-1.1.0\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\SH2A\NetworkInterface.cこの階層には他にも以下のフォルダがあり、それぞれにNetworkInterface.cがありました。amazon-freertos-1.1.0\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\ATSAM4Eksz8851snlLPC17xxLPC18xxSTM32FxxWinPCapZynqちなみに、以下のウェブページにポーティングについての説明がありました。Porting FreeRTOS+TCP to a Different Microcontrollerwww.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Porting.html
(5) config_filesフォルダのFreeRTOSConfig.hとFreeRTOSIPConfig.hの流用元を変更FreeRTOSのコンフィグレーションファイルであるFreeRTOSConfig.hは、今まで以下のRX231-RSKのものを持って来ていましたが、今回は以下のRX64M-RSKのものを持って来ることにしました。今までの流用元:FreeRTOSv10.0.0\FreeRTOS\Demo\RX200_RX231-RSK_Renesas_e2studio\src\FreeRTOSConfig.h今までの流用先:amazon-freertos-1.0.0\demos\renesas\rx231-rsk\common\config_files\FreeRTOSConfig.h今回の流用元:FreeRTOSv10.0.1\FreeRTOS\Demo\RX600_RX64M_RSK_Renesas_e2studio\Source\FreeRTOSConfig.h今回の流用先:amazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\FreeRTOSConfig.hそれに対し、FreeRTOS-Plus-TCPのコンフィグレーションファイルであるFreeRTOSIPConfig.hは、今まで(使用されていなかったのですが)以下のSTMicroelectronics STM32L4 Discovery Kit IoT Nodeのものを持って来ていましたが、今回は(Amazon FreeRTOSのV1.1.0で使用されていることが分かった)以下のMicrochip Curiosity PIC32MZEFのものを持って来ることにしました。今までの流用元:amazon-freertos-1.0.0\demos\st\stm32l475_discovery\common\config_files\FreeRTOSIPConfig.h今までの流用先:amazon-freertos-1.0.0\demos\renesas\rx231-rsk\common\config_files\FreeRTOSIPConfig.h今回の流用元:amazon-freertos-1.1.0\demos\microchip\curiosity_pic32mzef\common\config_files\FreeRTOSIPConfig.h今回の流用先:amazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\FreeRTOSIPConfig.hちなみに、以下のウェブページにコンフィグレーションについての説明がありました。FreeRTOSConfig.hCustomisationwww.freertos.org/a00110.htmlFreeRTOSIPConfig.hFreeRTOS+TCP Configurationwww.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_IP_Configuration.html
こんにちは。NoMaYです。前の投稿で書いた通り、今までRX231-RSKのプロジェクトファイルでやっていたものを、RX65N Envision Kitのプロジェクトファイルへ変更したのですが、それを以下のzipファイルに固めました。(なお、再配布して良いか未確認だったことに気付きましたので、スマートコンフィグレータが生成したソースは除外しておきました。フォルダの残骸のみ残してあります。)aws_demos_renesas_rx_mcu_experiment_20180113.zip
amazon-freertos-1.1.0\demos\common\include\aws_application_version.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-csplus\aws_demos.mtpjamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-csplus\aws_demos.rcpcamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-csplus\aws_demos.rcpeamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-csplus\aws_demos.scfgamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-e2studio6\.cprojectamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-e2studio6\.projectamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-e2studio6\aws_demos.scfgamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-e2studio6\.settings\com.renesas.cdt.managedbuild.renesas.ccrx.prefsamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-e2studio6\.settings\Dependency_Scan_Preferences.prefsamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-e2studio6\.settings\e2studio_project.prefsamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-e2studio6\.settings\renesasPGModel.xmlamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\ccrx-e2studio6\.settings\CodeGenerator\cgprojectDatas.datasamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\application_code\iodefine.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\application_code\main.camazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\application_code\time.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\aws_bufferpool_config.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\aws_demo_config.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\aws_ggd_config.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\aws_mqtt_agent_config.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\aws_mqtt_config.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\aws_secure_sockets_config.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\aws_shadow_config.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\aws_wifi_config.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\FreeRTOSConfig.hamazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\config_files\FreeRTOSIPConfig.hamazon-freertos-1.1.0\lib\FreeRTOS-Plus-TCP\source\portable\Compiler\Renesas\pack_struct_end.hamazon-freertos-1.1.0\lib\FreeRTOS-Plus-TCP\source\portable\Compiler\Renesas\pack_struct_start.hamazon-freertos-1.1.0\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX600\NetworkInterface.c
今回、コンパイルを通す為、以下の点に関してAmazon FreeRTOSのファイルを変更しています(ファイルが上書きされます)。(1) FreeRTOS-Plus-TCPでの構造体メンバのアラインメント指定にRenesas CC-RXコンパイラ対応を追加(2) OTA Aganetでのバージョン情報構造体メンバのアラインメント指定にRenesas CC-RXコンパイラ対応を追加なお、(2)に関連して、以下の点に関してもAmazon FreeRTOSのファイルを変更しようと一度は思ったのですが、すぐには無理そうだと気付きましたので、今回はやらずに先延ばししました。(3) OTA Aganetで使われるTinyCBORモジュールでのバイトオーダー指定のRenesas CC-RXコンパイラ対応は先延ばしまた、(2)と(1)に関連して、プロジェクトの設定で以下のことも行いました。(4) FreeRTOS-Plus-TCPでの構造体メンバのアラインメント指定の各種コンパイラ対応手法でワーニングが出るので抑止(5) OTA AganetのソースでCファイルにインクルードされるCファイルがあったのでインクルードされる側をビルドから除外あと、Amazon FreeRTOSのファイル以外にも、以前から、コンパイルを通す為に、iodefine.hとtime.hに関して特別なことをしていましたが、今回は以下のようにしています。(6) 今まで同じiodefine.hをBSP側とアプリケーション側で2重持ちしていたがアプリケーション側を#include "platform.h"へ変更(7) mbed TLSのソースがtime.hをインクルードしているがCC-RXに無いので中身の無いダミーファイルを作って対処(今までと同様)以下、詳細です。(1) FreeRTOS-Plus-TCPででの構造体メンバのアラインメント指定にRenesas CC-RXコンパイラ対応を追加今までもRenesas SHコンパイラに対応していたのですが、今回、以下のようにRenesas CC-RXコンパイラに対応させました。(コピーライト(Amazon.com, Inc. or its affiliates.)、ライセンス(MITライセンス)、その他のコメント、などは省略しています。)amazon-freertos-1.1.0\lib\FreeRTOS-Plus-TCP\source\portable\Compiler\Renesas\pack_struct_start.h変更前:github.com/aws/amazon-freertos/blob/v1.1.0/lib/FreeRTOS-Plus-TCP/source/portable/Compiler/Renesas/pack_struct_start.h変更後:
#ifdef _SH #ifdef __RENESAS__ #pragma pack 1 #endif#endif#ifdef __RX #ifdef __CCRX__ #pragma pack #endif#endif
amazon-freertos-1.1.0\lib\FreeRTOS-Plus-TCP\source\portable\Compiler\Renesas\pack_struct_end.h変更前:github.com/aws/amazon-freertos/blob/v1.1.0/lib/FreeRTOS-Plus-TCP/source/portable/Compiler/Renesas/pack_struct_end.h変更後:
#ifdef _SH #ifdef __RENESAS__ ; #pragma unpack #endif#endif#ifdef __RX #ifdef __CCRX__ ; #pragma unpack #endif#endif
Renesas SHコンパイラのマニュアルを見たところ、常に定義されるマクロとして以下のものがありました。__HITACHI_VERSION____HITACHI___SH__RENESAS_VERSION____RENESAS__Renesas CC-RXコンパイラのマニュアルを見たところ、常に定義されるマクロとして以下のものがありました。この中から__RXと__CCRX__を選びました。(私は__CCRX__があるなら__RENESAS__より意味が明確で分かり易いと思いましたので、こちらを選んだのですが、それよりも継承性の観点から、今までと同じものを選ぶ方が良いと言う考え方もあることと思います。)__RENESAS____RENESAS_VERSION____RX__CCRX__(2) OTA Aganetでのバージョン情報構造体メンバのアラインメント指定にRenesas CC-RXコンパイラ対応を追加これは以下のようにRenesas CC-RXコンパイラに対応させました。(コピーライト(Amazon.com, Inc. or its affiliates.)、ライセンス(MITライセンス)、その他のコメント、などは省略しています。)amazon-freertos-1.1.0\demos\common\include\aws_application_version.h変更前:github.com/aws/amazon-freertos/blob/v1.1.0/demos/common/include/aws_application_version.h変更後:
/* Application version structure. */#if (defined(__RX) && defined(__CCRX__))#pragma pack#else#pragma pack(push,1)#endiftypedef struct { union {#if (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || (__little_endian__ == 1) || WIN32 \ || (defined(__RX) && defined(__CCRX__) && defined(__LIT)) struct { uint16_t usBuild; uint8_t ucMinor; uint8_t ucMajor; } x;#elif (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || (__big_endian__ == 1) \ || (defined(__RX) && defined(__CCRX__) && defined(__BIG) struct version { uint8_t ucMajor; uint8_t ucMinor; uint16_t usBuild; } x;#else#error "Unable to determine byte order!"#endif uint32_t ulVersion32; } u;} AppVersion32_t;#if (defined(__RX) && defined(__CCRX__))#pragma unpack#else#pragma pack(pop)#endif
(3) OTA Aganetで使われるTinyCBORモジュールでのバイトオーダー指定のRenesas CC-RXコンパイラ対応は先延ばしこれに関しては、すぐには無理そうだと気付きましたので、今回はやらずに先延ばししました。amazon-freertos-1.1.0\lib\third_party\tinycbor\compilersupport_p.h全体:github.com/aws/amazon-freertos/blob/v1.1.0/lib/third_party/tinycbor/compilersupport_p.h抜粋:
#if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 403)) || \ (__has_builtin(__builtin_bswap64) && __has_builtin(__builtin_bswap32))# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__# define cbor_ntohll __builtin_bswap64# define cbor_htonll __builtin_bswap64# define cbor_ntohl __builtin_bswap32# define cbor_htonl __builtin_bswap32# ifdef __INTEL_COMPILER# define cbor_ntohs _bswap16# define cbor_htons _bswap16# elif (__GNUC__ * 100 + __GNUC_MINOR__ >= 608) || __has_builtin(__builtin_bswap16)# define cbor_ntohs __builtin_bswap16# define cbor_htons __builtin_bswap16# else# define cbor_ntohs(x) (((uint16_t)x >> 8) | ((uint16_t)x << 8))# define cbor_htons cbor_ntohs# endif# else# define cbor_ntohll# define cbor_htonll# define cbor_ntohl# define cbor_htonl# define cbor_ntohs# define cbor_htons# endif#elif defined(__sun)# include <sys/byteorder.h>#elif defined(_MSC_VER)/* MSVC, which implies Windows, which implies little-endian and sizeof(long) == 4 */# define cbor_ntohll _byteswap_uint64# define cbor_htonll _byteswap_uint64# define cbor_ntohl _byteswap_ulong# define cbor_htonl _byteswap_ulong# define cbor_ntohs _byteswap_ushort# define cbor_htons _byteswap_ushort#endif#ifndef cbor_ntohs# define cbor_ntohs(x) (((uint16_t)x >> 8) | ((uint16_t)x << 8))# define cbor_htons cbor_ntohs//# include <netinet/in.h>//# define cbor_ntohs ntohs//# define cbor_htons htons#endif#ifndef cbor_ntohl//# include <netinet/in.h>//# define cbor_ntohl ntohl//# define cbor_htonl htonl# define cbor_ntohl(x) ((((uint32_t)x >> 24) & 0xff) | (((uint32_t)x >> 8) & 0xff00) | (((uint32_t)x & 0xff00) << 8) | (((uint32_t)x & 0xff) << 24))# define cbor_htonl cbor_ntohl#endif#ifndef cbor_ntohll# define cbor_ntohll ntohll# define cbor_htonll htonll/* ntohll isn't usually defined */# ifndef ntohll# if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__# define ntohll# define htonll# elif defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__# define ntohll(x) ((ntohl((uint32_t)(x)) * UINT64_C(0x100000000)) + (ntohl((x) >> 32)))# define htonll ntohll# elif __little_endian__ == 1# define ntohll(x) ((cbor_ntohl(((uint32_t)(x))) * UINT64_C(0x100000000)) + (cbor_ntohl(((x) >> 32))))# define htonll ntohll# else# error "Unable to determine byte order!"# endif# endif#endif
(4) FreeRTOS-Plus-TCPでの構造体メンバのアラインメント指定の各種コンパイラ対応手法でワーニングが出るので抑止先程のpack_struct_start.hとpack_struct_end.hは、例えば以下のように使用されるのですが、Renesas CC-RXではワーニングが出ますので、このワーニングメッセージをインフォーメーションレベルメッセージに変換して抑止することにしました。amazon-freertos-1.1.0\lib\FreeRTOS-Plus-TCP\include\FreeRTOS_IP.h全体:github.com/aws/amazon-freertos/blob/v1.1.0/lib/FreeRTOS-Plus-TCP/include/FreeRTOS_IP.h抜粋:
#include "pack_struct_start.h"struct xMAC_ADDRESS{ uint8_t ucBytes[ ipMAC_ADDRESS_LENGTH_BYTES ];}#include "pack_struct_end.h"
ワーニングメッセージ:
W0521644:Definition at end of file not followed by a semicolon or a declarator
抑止するコンパイルオプション(このような設定を行える専用のGUIがe2 studioにもCS+にも用意されています):
-nomessage -change_message=information=21644
(5) OTA AganetのソースでCファイルにインクルードされるCファイルがあったのでインクルードされる側をビルドから除外インクルードしている側のソース:amazon-freertos-1.1.0\lib\ota\aws_ts_ota_agent.c全体:github.com/aws/amazon-freertos/blob/v1.1.0/lib/ota/aws_ts_ota_agent.c抜粋:
/*-----------------------------------------------------------*//* Private OTA abstractions. These are statics so the implementation is included in-line. */#include "aws_ts_ota_pal.c"/*-----------------------------------------------------------*/
インクルードされる側のソース:amazon-freertos-1.1.0\lib\ota\portable\ti\cc3220_launchpad\aws_ts_ota_pal.c全体:github.com/aws/amazon-freertos/blob/v1.1.0/lib/ota/portable/ti/cc3220_launchpad/aws_ts_ota_pal.c(6) 今まで同じiodefine.hをBSP側とアプリケーション側で2重持ちしていたがアプリケーション側を#include "platform.h"へ変更実は、2重持ちを解消しようとしてe2 studioでBSPモジュールの下層のiodefine.hのあるフォルダをインクルードパスに追加してみたのですが、残念ながらe2 studioのスマートコンフィグレータでコード生成を行うと強制的に削除されてしまいました。(恐らく、使用しているコンポーネントと設定されているインクルードパスの整合性を維持しようとする処理の副作用ではないか、と思われます。)次に、そのフォルダをe2 studioのユーザ指定コンパイルオプションの入力欄に以下のように設定しようと考えたのですが、このような小細工的な設定内容が品種に依存するのも今ひとつな気がするなぁ、と迷っていました。RX65Nの場合
-include="${workspace_loc:/${ProjName}/src/smc_gen/r_bsp/mcu/rx65n/register_access}"
RX231の場合(まだスマートコンフィグレータが対応していませんが)
-include="${workspace_loc:/${ProjName}/src/smc_gen/r_bsp/mcu/rx231/register_access}"
そうこうしているうちに、アプリケーション側のiodefine.hを以下のようにしてもコンパイルを通すことが出来ることに気付き、これはこれでトラブルの元だとは思いつつ、品種に依存しないという点で選択することにしました。amazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\application_code\iodefine.h
/* In case of Renesas RX MCUs, FreeRTOS kernel's "port.c" includes Renesas BSP's "iodefine.h".For example, it is located at "src/smc_gen/r_bsp/board/generic_rx65n/register_access/".Therefore it needs an include path "src/smc_gen/r_bsp/board/generic_rx65n/register_access".But e2 studio removes deeper include path than "r_bsp/" after code generation by built-in smart configurator.This "iodefine.h" is a workaround for such trouble of e2 studio and smart configurator. Because "platform.h" includes "board/generic_rx65n/r_bsp.h"(i.e. "src/smc_gen/r_bsp/board/generic_rx65n/r_bsp.h") then "r_bsp.h" includes "mcu/rx65n/register_access/iodefine.h"(i.e. "src/smc_gen/r_bsp/mcu/rx65n/register_access/iodefine.h").On the other hand, CS+ and stand-alone smart configurator doesn't remove such deeper include path.To be exact, "src/smc_gen/r_bsp/board/generic_rx65n/register_access" and so on are added forcibly.This "iodefine.h" works for such case of CS+ and smart configurator too.*/#include "platform.h"
(7) mbed TLSのソースがtime.hをインクルードしているがCC-RXに無いので中身の無いダミーファイルを作って対処(今までと同様)今までと同様に以下のようにしてあります。(実はmbed TLSのソースをちゃんとは見ていなくて、ちゃんと見ても他に手が無さそうであれば、もう少しちゃんとしたコメントに変えようと思ってます。)amazon-freertos-1.1.0\demos\renesas\rx65n-envision-kit\common\application_code\time.h
/* dummy file for experiment of aws demos project with renesas rx mcu */
以下、ビルドログとエラーメッセー/ワーニングメッセージです。aws_demos_renesas_rx_mcu_experiment_e2studio6_build_log_20180113.zip内容:aws_demos.e2studio6.build.logaws_demos.e2studio6.error.txtaws_demos_renesas_rx_mcu_experiment_csp_build_log_20180113.zip内容:aws_demos.CS+.build.logaws_demos.CS+.error.txt[リンク]Amazon FreeRTOS v1.1.0 ダウンロードgithub.com/aws/amazon-freertos/releases/tag/v1.1.0FreeRTOS kernel V10.0.1 ダウンロードsourceforge.net/projects/freertos/files/FreeRTOS/V10.0.1/[補足]以下、今回のインクルードパスの設定です。(スマートコンフィグレータが自動的に追加する分を含みますが、rcpcファイルをe2 studioでエクスポートしてCS+で読み込むという手順を取ったのと、e2 studioとCS+では追加されるフォルダ(強制的に削除される分も?)の数が異なっているのとで、頭の整理が追いつかずAS ISです。)e2 studioコンパイラ
${TCINSTALL}/include${workspace_loc:/${ProjName}/}${workspace_loc:/${ProjName}/config_files}${workspace_loc:/${ProjName}/application_code}${workspace_loc:/${ProjName}/application_code/renesas_code}${workspace_loc:/${ProjName}/application_code/common_demos/include}${workspace_loc:/${ProjName}/lib/aws/include}${workspace_loc:/${ProjName}/lib/aws/include/private}${workspace_loc:/${ProjName}/lib/aws/FreeRTOS/portable/Renesas/RX600v2}${workspace_loc:/${ProjName}/lib/aws/FreeRTOS-Plus-TCP/source/protocols/include}${workspace_loc:/${ProjName}/lib/aws/FreeRTOS-Plus-TCP/include}${workspace_loc:/${ProjName}/lib/aws/FreeRTOS-Plus-TCP/source/portable/Compiler/Renesas}${workspace_loc:/${ProjName}/lib/aws/ota}${workspace_loc:/${ProjName}/lib/third_party/jsmn}${workspace_loc:/${ProjName}/lib/third_party/pkcs11}${workspace_loc:/${ProjName}/lib/third_party/tinycbor}${workspace_loc:/${ProjName}/lib/third_party/mbedtls/include}${workspace_loc:/${ProjName}/src}${workspace_loc:/${ProjName}/src/smc_gen/r_bsp}${workspace_loc:/${ProjName}/src/smc_gen/r_config}${workspace_loc:/${ProjName}/src/smc_gen/r_cmt_rx}${workspace_loc:/${ProjName}/src/smc_gen/r_cmt_rx/src}${workspace_loc:/${ProjName}/src/smc_gen/Config_RSPI0}${workspace_loc:/${ProjName}/src/smc_gen/general}${workspace_loc:/${ProjName}/src/smc_gen/r_pincfg}
アセンブラ
${workspace_loc:/${ProjName}/src/smc_gen/Config_RSPI0}${workspace_loc:/${ProjName}/src/smc_gen/general}${workspace_loc:/${ProjName}/src/smc_gen/r_pincfg}
CS+コンパイル
src\smc_gen\r_pincfgsrc\smc_gen\r_configsrc\smc_gen\r_cmt_rx\refsrc\smc_gen\r_cmt_rxsrc\smc_gen\r_bsp\mcu\rx65n\register_accesssrc\smc_gen\r_bsp\mcu\rx65nsrc\smc_gen\r_bsp\mcu\allsrc\smc_gen\r_bsp\board\generic_rx65nsrc\smc_gen\r_bspsrc\smc_gen\generalsrc\smc_gen\Config_RSPI0...\common\config_files..\common\application_code..\common\application_code\renesas_code..\..\..\..\demos\common\include..\..\..\..\lib\include..\..\..\..\lib\include\private..\..\..\..\lib\FreeRTOS\portable\Renesas\RX600v2..\..\..\..\lib\FreeRTOS-Plus-TCP\source\protocols\include..\..\..\..\lib\FreeRTOS-Plus-TCP\include..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\Compiler\Renesas..\..\..\..\lib\ota\portable\ti\cc3220_launchpad..\..\..\..\lib\third_party\jsmn..\..\..\..\lib\third_party\pkcs11..\..\..\..\lib\third_party\tinycbor..\..\..\..\lib\third_party\mbedtls\include.\src
アセンブル
.\src\smc_gen\Config_RSPI0.\src\smc_gen\general.\src\smc_gen\r_pincfg
以下、作業で私が使っていたメモです。e2 studio知らぬ間に.cprojectが変化していないか注意するCS+何故か一括ビルドを行う設定がsmart configuratorでコード生成を行うと解除されてしまうので毎回再設定する手作業でプロジェクト構造を修正(実際に修正を実施)・ lib\third_party\mbedtlsカテゴリの下が壊れている(CS+のrcpcファイル読み込みの不具合?)ので修正・ srcの下のsmc_genをSmart Configuratorに変更してsrcの外へ出す(stand-alone smart configurator対応)手作業でプロジェクト構造を修正(したいと思っているが実施してないもの)・ common\application_codeカテゴリの下にrenesas_codeカテゴリを追加するかも(中身は空)・ lib\third_partyカテゴリの下にmcu_vendor\renesas\rx65n-envision-kitカテゴリを追加するかも(中身は空)手作業でプロジェクトの登録ファイルを修正・ プロジェクト変換情報_aws_demos.txt → 削除・ lib\FreeRTOS-Plus-TCP\source\ReadMe.url → 追加・ lib\third_party\mbedtls\library\Makefile → 追加・ lib\third_party\tinycbor\LICENSE → 追加手作業でインクルードパスを修正・ 略手作業でプロジェクト設定を変更・ [インクルード・ファイルが存在しないソースの扱い] を [再コンパイル/アセンブルしない] に変更
NoMaY さん
こんにちは、シェルティです。
本件、活動再開しました。諸事情あり1か月程進捗無しでした。NoMaYさんが上位層から攻めるのに対して、私は下位層から攻めております。良いタイミングでNoMaYさん側の活動と合流したいと考えています。
私の考えている構築手順としては以下のとおりです。RX65N Envision Kit、RX65N RSK(2MB版/暗号器あり品)をターゲットにコードメンテを維持します。
①ルネサスTCP/IPをターゲットで動作させる(Etherの動作確認)②SDIO無線LANを動作確認した時期のFreeRTOS 8.2.2をターゲットで動作させる③ルネサスのFreeRTOSパッケージ、9.0.0をターゲットで動作させる④Amazon FreeRTOS 1.1.0のFreeRTOS部分をターゲットで動作させる⑤Amazon FreeRTOS 1.1.0のFreeRTOS+TCP部分をターゲットで動作させる⑥Amazon FreeRTOS 1.1.0のmbed TLS部分をターゲットで動作させる⑦Amazon FreeRTOS 1.1.0のMQTT部分をターゲットで動作させる(AWSへの接続実験)⑧Amazon FreeRTOS 1.1.0のFreeRTOS+TCP部分のネットワーク層の結合部分を工夫して、 (1)Ether、(2)SPI接続無線LANモジュール、(3)SDIO無線LANモジュールの3種類を切り替えられるようにする⑨Amazon FreeRTOS 1.1.0のmbed TLS部分の暗号処理プリミティブのソフトウェア実装(AESとかRSAとか)をRX65N内蔵暗号器を使ったハードウェア実装に置き換える⑨NoMaYさんの環境にマージし、Amazon FreeRTOS本家コードへの追従を簡単にできるようにする⑩Amazon FreeRTOS のGitのforkに登録する⑪Amazon FreeRTOS のCertificationを受験し合格しGitの本家に登録する https://docs.aws.amazon.com/ja_jp/freertos/latest/userguide/freertos-qualification-program.html
現在、④まで進みました。これからが本番ですが、次⑤に挑戦します。NoMaYさんに先行して調べていただいた内容が役に立つと思います。
④までのZIPをアップします。と思ったのですが、ファイルサイズ上限に引っかかったのでファイル受け渡し方法を何らか考えてみます。
以上です
シェルティさん、こんにちは。NoMaYです。Amazon FreeRTOSですが、1週間ほど前にv1.2.0になりました。ソースの変更履歴を読んだ印象では、ポート443でTLS認証を使ったMQTTを使えるようになったのが大きなところのようです。(すみません。正直に言うと、Google先生に聞いて、おぼろげに理解した程度ですが。) これに対しても今までと同様のことを行おうと考えています。Amazon FreeRTOS 変更履歴github.com/aws/amazon-freertos/blob/master/change_log.txtAWS IoT Coreは、ポート443を使った証明書によるクライアント認証でMQTT接続をサポートできるようになりましたaws.amazon.com/jp/about-aws/whats-new/2018/02/aws-iot-core-now-supports-mqtt-connections-with-certificate-based-client-authentication-on-port-443/ポート443でTLS認証を使ったMQTT: なぜ便利で、どのように動くのかaws.amazon.com/jp/blogs/news/mqtt-with-tls-client-authentication-on-port-443-why-it-is-useful-and-how-it-works/私は、今、Amazon FreeRTOSのWindows Simulatorをe2 studio上でビルド出来るようにならないかと考え始めています。(e2 studioのQE for BLEのようなことが出来ないものかと思って、、、) 実は、先月、ものは試しで、まずはFreeRTOS kernelのWindows Simulatorを動かそうとしたら、以下の画面コピーのように、このパソコンでは動きません、と言われてしまって中断しているところですが、、、FreeRTOS Windows Port For Visual Studio or Eclipse and MingW www.freertos.org/FreeRTOS-Windows-Simulator-Emulator-for-Visual-Studio-and-Eclipse-MingW.htmlGetting Started with the FreeRTOS Windows Simulatordocs.aws.amazon.com/freertos/latest/userguide/getting_started_windows.htmlBluetooth® low energy対応開発支援ツール QE for BLE [テクニカルプレビュー版]www.renesas.com/ja-jp/products/software-tools/tools/solution-toolkit/qe--qe-for-bluetooth-smart.htmlところで、ファイルの受け渡しですが、以下の記事で紹介されているようなファイル転送サービスでも私の方は構わないです。登録不要でストレスゼロの大容量ファイル転送サービス7選【無料】navi.dropbox.jp/large-capacity-fileちなみに、Rulzでは、1つのzipファイルの最大サイズは1MB(だったと思う)ですが、1つの投稿にzipファイルを複数個添付することも出来て、先日、500KB~900KBのzipファイルを4個添付したことがあります。(ただ、予告無くシステムが変更されて出来なくなる可能性もあり、しかもやっかいなことにContent Under Reviewとなって消失してしまうこともありますので、投稿の下書きを残しておく等の対策をして投稿しないと危ないですが。)[関連リンク]Google検索: 無料 ファイル転送 オンラインストレージwww.google.co.jp/search?&q=無料+ファイル転送+オンラインストレージ
こんにちは。NoMaYです。すみません。以前の投稿でルネサスさんのサイトで検索した時にヒットしなかったので気付かなかったのですが、今日たまたま別のものを検索していたらRX65N-2MのFreeRTOSのアプリケーションノートに気付きました。RX65N Group Application Note RX65N Real-time OS Package V1.0.00 ドキュメントwww.renesas.com/ja-jp/doc/products/mpumcu/apn/rx/002/r01an4033es0100-rx65n.pdfRX65N Group Application Note RX65N Real-time OS Package V1.0.00 サンプルプログラムwww.renesas.com/ja-jp/software/D6001926.html
シェルティさん、こんにちは。NoMaYです。いつの間にかマルツさんがDigi-Keyと提携していて、村田製作所のType1FXキットがマルツさんから購入可能になっていました。1万5千円程ですね、、、www.digikey.jp/.../6612483www.marutsu.co.jp/.../16838741さらに、STM32L4 Discovery Kit IoT NodeのWi-FiモジュールのInventek ISM43362-M3G-L44もマルツさんで購入出来そうです。ただ、微妙な型番違いで何種類かありますので、どれになるのか後で調べてみるつもりです。www.marutsu.co.jp/GoodsListNavi.jsp?path=&q=Inventek+ISM43362-M3G-L441個から購入可能なものは以下のものISM43362-M3G-L44-E C2.5.0.3 1,897円ISM43362-M3G-L44-U C2.5.0.3 1,922円ISM43362-M3G-L44-E-C3.5.2.3 2,572円