Amazon FreeRTOSだそうです。ルネサスさんのRXは参加しないのかな?

こんにちは。NoMaYです。

ライセンスはMIT Licenseでした。TLSとしてmbed TLSが使用されていました。サポートされているボードの写真を見ていたら、どれにも有線LANコネクタが無いことに気付きました。時代の流れでしょうか、、、

Getting Started with Amazon FreeRTOS
aws.amazon.com/freertos/getting-started/

Amazon FreeRTOS
aws.amazon.com/freertos/

Amazon FreeRTOS ソースコード
github.com/aws/amazon-freertos

[関連リンク]

FreeRTOS - freertos.org
www.freertos.org/

FreeRTOS - sourceforge.net
sourceforge.net/projects/freertos/files/

FreeRTOS kernel自体はCC-RXにも対応
github.com/aws/amazon-freertos/tree/master/lib/FreeRTOS/portable/Renesas

Amazon FreeRTOSはTLSにmbed TLSを使用
github.com/aws/amazon-freertos/tree/master/lib/third_party/mbedtls

[ニュース]

組み込み業界に大インパクト「Amazon FreeRTOS」の衝撃 - 大原雄介,MONOist
monoist.atmarkit.co.jp/mn/articles/1712/28/news011.html

アマゾン「AWS IoT」は何が衝撃的なのか - 大原雄介,MONOist
monoist.atmarkit.co.jp/mn/articles/1510/21/news026.html

(2018/01/01 : 記事を選び直しました。)

[追記]

もしかしたら、オープンソースライセンスのドライバライブラリが用意されていないから、ルネサスさんはアマゾンさんに相手にして貰えないのかも、、、

ちなみに、FreeRTOS kernel自体のライセンスがV10からModified GPLからMIT Licenseに変わったようです。

  • NoMaYさん

    シェルティです、こんにちは。

    ⑤が完了しました。
    DHCPによるIPアドレス取得、取得したIPアドレスに対しPCからpingリクエスト実行し、
    応答が返ってくることを確認しました。
    shelty1.servegame.com/.../experiment.zip

    かなりやっつけで実装していて、このままだと通信性能が全然でないはずなので、
    一通り動作確認ができたら、もう一度真剣に⑤に取り組みます。

    続いて⑥に取り掛かります。
    ⑥もなんとなくコンパイルが通るところまでは実験しました。
    ここまでこれば、あとはデータ処理だけの話なので、ゴールが見えてきた感じがします。

    #思ったより早く片付いたので、Amazon FreeRTOSはいったん横においておいて、
     別の仕事(週明けの出張準備など)を進めるかもしれません。

    ■進捗報告
    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の本家に登録する
     docs.aws.amazon.com/.../freertos-qualification-program.html

    以上です
  • シェルティさん、こんにちは。NoMaYです。

    遅くなりました。zipファイルを受け取りました。解凍も出来ました。readme.txtに目を通しているところです。

    [追記] 2018/02/24 23:28

    rx65n_envision_kit_awsもrx65n_rsk_awsもビルド出来ました。(環境はe2 studio v6.2.0+CC-RX V2.03です。)

  • こんにちは。NoMaYです。

    今回、Amazon FreeRTOSのソースのライブラリ(カーネル以外という意味)のMCU依存やボード依存となるソースを中身が空の関数のテンプレート(Amazon FreeRTOSのソースツリーに含まれる○○○/portable/vendor/board/○○○.c)のソースにして、リンクまでは辿り着くようにしました。リンクを通すところまでやりたかったのですが、CC-RXの無償評価版のサイズ制限をオーバーしてしまい、それは出来ませんでした。(今後、GNURXでのプロジェクトにも手を出すことになりそうです。) ここまでを以下のzipファイルに固めました。今回、Amazon FreeRTOS v1.2.0のソースと、シェルティさんの2018/02/24 17:43の投稿のソースと、以下のzipファイルのソース、の3つをマージしてビルドすることになります。

    aws_demos_renesas_rx_mcu_experiment_20180228.zip

    行った作業の概要は以下の通りです。

    (1) Amazon FreeRTOS v1.2.0へ追従する
    (2) シェルティさんの2018/02/24 17:43の投稿のソースをプロジェクトに取り込む(当方のzipファイルはソースを含まず)
    (3) リンクまで辿り着くようにする
    (4) rx65n-rskのプロジェクトを追加する(今まではrx65n-envision-kitのプロジェクトのみだった)
    (5) CS+のプロジェクトに変換する

    作業の詳細は後で投稿しますが、ソースツリーの構築方法について書きます。以下の手順でソースツリーを構築して下さい。(少々面倒なので、週末にでもGitHubへ登録してみようと思っています。とはいえ、ルネサスさんのFITモジュールのライセンスの都合上、スマートコンフィグレータで生成されるソースと生成されるライブラリは登録しないと思います(scfgファイルを登録するので当面は同等のソースが生成出来るから)。それでも、問題はBSPとCMTとT4のFreeRTOS対応の部分をどうするかで、これは来週になってから思案してみようと思っています。)

    (A) ソースツリーの構築方法

    (A-1) Amazon FreeRTOS v1.2.0のzipファイルをダウンロードして解凍する
    (A-2) 添付したzipファイルをダウンロードして解凍する
    (A-3) フォルダの上位階層の位置を合わせて(A-1)に(A-2)をマージする(以下のファイルは上書きされます)
     demos\common\include\aws_application_version.h
     lib\FreeRTOS-Plus-TCP\include\NetworkInterface.h
     lib\FreeRTOS-Plus-TCP\source\portable\Compiler\Renesas\pack_struct_end.h
     lib\FreeRTOS-Plus-TCP\source\portable\Compiler\Renesas\pack_struct_start.h
     lib\third_party\tinycbor\compilersupport_p.h
    (A-4) シェルティさんの2018/02/24 17:43の投稿のzipファイルをダウンロードして解凍する
    (A-5) シェルティさんのソースを以下のようにマージする
     rx65n_envision_kit_aws\src\*.* (time.hとamazon-freertos-master\は除く) → demos\renesas\rx65n-envision-kit\ccrx-e2studio6\src\
     rx65n_envision_kit_aws\src\*.* (time.hとamazon-freertos-master\は除く) → demos\renesas\rx65n-envision-kit\ccrx-csplus\src\
     rx65n_rsk_asw\src\*.* (amazon-freertos-master\は除く) → demos\renesas\rx65n-rsk\ccrx-e2studio6\src\
     rx65n_rsk_asw\src\*.* (amazon-freertos-master\は除く) → demos\renesas\rx65n-rsk\ccrx-csplus\src\

    今回、main()を含むソースが2つあります。デフォルトではAmazon FreeRTOSのソースが有効になっていますが、理屈の上ではシェルティさんのソースを有効にすればシェルティさんがされた確認と同じことが出来る筈です。

    Amazon FreeRTOSのmain()のソース(ライブラリのMCU依存やボード依存となるソースが未実装なので動作しません)

    demos\renesas\rx65n-envision-kit\common\application_code\main.c
    demos\renesas\rx65n-rsk-kit\common\application_code\main.c

    シェルティさんのmain()のソース(シェルティさんがされた確認と同じことが出来る筈です)

    demos\renesas\rx65n-envision-kit\ccrx-e2studio6\src\rx65n_envision_kit_aws.c
    demos\renesas\rx65n-rsk\ccrx-e2studio6\src\rx65n_rsk_aws.c.c

    demos\renesas\rx65n-envision-kit\ccrx-csplus\src\rx65n_envision_kit_aws.c
    demos\renesas\rx65n-rsk\ccrx-csplus\src\rx65n_rsk_aws.c.c

    今回出るワーニングは以下の通りです。(当方特有の事情でCC-RX V2.03でビルドした時のものです。)

    ..\..\..\common\mqtt\aws_subscribe_publish_loop.c(339):W0520550:Variable "xTickCount" was set but never used
    ..\common\application_code\main.c(528):W0520177:Variable "xTasksAlreadyCreated" was declared but never referenced
    ..\common\application_code\main.c(72):W0520177:Variable "ucIPAddress" was declared but never referenced
    ..\common\application_code\main.c(79):W0520177:Variable "ucNetMask" was declared but never referenced
    ..\common\application_code\main.c(86):W0520177:Variable "ucGatewayAddress" was declared but never referenced
    ..\common\application_code\main.c(93):W0520177:Variable "ucDNSServerAddress" was declared but never referenced
    ..\common\application_code\main.c(215):W0520177:Function "prvWifiConnect" was declared but never referenced
    ..\common\application_code\main.c(400):W0520550:Variable "gpt_dhcp" was set but never used
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\FreeRTOS_IP.c(1746):W0520550:Variable "pcType" was set but never used
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\FreeRTOS_TCP_IP.c(805):W0520550:Variable "uxFrontSpace" was set but never used
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\FreeRTOS_TCP_IP.c(1434):W0520177:Variable "xPreviousState" was declared but never referenced
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\FreeRTOS_TCP_IP.c(1122):W0520177:Function "prvTCPFlagMeaning" was declared but never referenced
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\FreeRTOS_TCP_WIN.c(1489):W0520177:Variable "ulFirstSeq" was declared but never referenced
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(99):W0520223:Function "lan_open" declared implicitly
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(107):W0520167:Argument of type "void (*)(void)" is incompatible with parameter of type "TaskFunction_t"
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(108):W0520042:Operand types are incompatible ("BaseType_t" and "BaseType_t (*)(TaskFunction_t, const char *const, const uint16_t, void *const, UBaseType_t, TaskHandle_t *const)")
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(115):W0520167:Argument of type "void (*)(void)" is incompatible with parameter of type "TimerCallbackFunction_t"
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(97):W0520177:Variable "channel" was declared but never referenced
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(122):W0520147:Declaration is incompatible with "BaseType_t xNetworkInterfaceOutput(NetworkBufferDescriptor_t *const, BaseType_t)" (declared at line 35 of "..\..\..\..\lib\FreeRTOS-Plus-TCP\include\NetworkInterface.h")
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(129):W0520223:Function "lan_write" declared implicitly
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(150):W0520223:Function "get_random_number" declared implicitly
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(194):W0520223:Function "lan_read" declared implicitly
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(217):W0520223:Function "rcv_buff_release" declared implicitly
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(185):W0520550:Variable "pktSuccess" was set but never used
    ..\..\..\..\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c(185):W0520550:Variable "pktLost" was set but never used
    ..\..\..\..\lib\third_party\tinycbor\cborpretty.c(160):W0520546:Transfer of control bypasses initialization of:
                Variable "b" (declared at line 196)
    ..\..\..\..\lib\third_party\tinycbor\cborpretty.c(348):W0520188:Enumerated type mixed with another type
    src\lcd_conf.c(362):W0520118:A void function may not return a value
    src\lcd_conf.c(373):W0520120:Return value type does not match the function type
    src\lcd_conf.c(173):W0520177:Variable "_aBufferPTR" was declared but never referenced

    なお、無償評価版のサイズ制限をオーバーして以下のエラーになります。

    F0563430:The total section size exceeded the limit

     

  • こんにちは。NoMaYです。

    先ほどの投稿に添付したzipファイルでの今回の作業の詳細です。

    以下、繰り返しになりますが、概要です。

    (1) Amazon FreeRTOS v1.2.0へ追従する
    (2) シェルティさんの2018/02/24 17:43の投稿のソースをプロジェクトに取り込む(当方のzipファイルはソースを含まず)
    (3) リンクまで辿り着くようにする
    (4) rx65n-rskのプロジェクトを追加する(今まではrx65n-envision-kitのプロジェクトのみだった)
    (5) CS+のプロジェクトに変換する

    以下、詳細です。




    (1) Amazon FreeRTOS v1.2.0へ追従する

    Amazon FreeRTOS v1.1.0とAmazon FreeRTOS v1.2.0のソースツリーを比較したところ以下の通りでした。




    (1-1) .projectファイルの修正

    Amazon FreeRTOS v1.2.0ではリンクされたリソースの1つ(OTAモジュールのソースの1つ)のファイルの名前が変更(aws_ts_ota_agent.c→aws_ota_agent.c)されていましたので、それを.projectファイルに反映しました。

    今まで

            <link>
                <name>lib/aws/ota/aws_ts_ota_agent.c</name>
                <type>1</type>
                <locationURI>AWS_IOT_MCU_ROOT/lib/ota/aws_ts_ota_agent.c</locationURI>
            </link>

    今回

            <link>
                <name>lib/aws/ota/aws_ota_agent.c</name>
                <type>1</type>
                <locationURI>AWS_IOT_MCU_ROOT/lib/ota/aws_ota_agent.c</locationURI>
            </link>

    ちなみに、Amazon FreeRTOS v1.2.0ではSTM32L4 Discovery Kit IoT NodeのプロジェクトにもOTAモジュールのソースが追加されたのですが、以下のようにリソースのリンクされ方がTexas Instruments CC3220SF-LAUNCHXのプロジェクトとは微妙に異なっていました。

    Texas Instruments CC3220SF-LAUNCHXLのプロジェクト

            <link>
                <name>lib/aws/ota</name>
                <type>2</type>
                <locationURI>BASE_DIR_ROOT/lib/ota/portable/ti/cc3220_launchpad</locationURI>
            </link>

     

            <link>
                <name>lib/aws/ota/aws_ota_cbor.c</name>
                <type>1</type>
                <locationURI>BASE_DIR_ROOT/lib/ota/aws_ota_cbor.c</locationURI>
            </link>
            <link>
                <name>lib/aws/ota/aws_rsprintf.c</name>
                <type>1</type>
                <locationURI>BASE_DIR_ROOT/lib/ota/aws_rsprintf.c</locationURI>
            </link>
            <link>
                <name>lib/aws/ota/aws_ota_agent.c</name>
                <type>1</type>
                <locationURI>BASE_DIR_ROOT/lib/ota/aws_ota_agent.c</locationURI>
            </link>

    STM32L4 Discovery Kit IoT Nodeのプロジェクト

            <link>
                <name>lib/aws/ota</name>
                <type>2</type>
                <locationURI>virtual:/virtual</locationURI>
            </link>

     

            <link>
                <name>lib/aws/ota/aws_ota_cbor.c</name>
                <type>1</type>
                <locationURI>AWS_IOT_MCU_ROOT/lib/ota/aws_ota_cbor.c</locationURI>
            </link>
            <link>
                <name>lib/aws/ota/aws_rsprintf.c</name>
                <type>1</type>
                <locationURI>AWS_IOT_MCU_ROOT/lib/ota/aws_rsprintf.c</locationURI>
            </link>
            <link>
                <name>lib/aws/ota/aws_ota_agent.c</name>
                <type>1</type>
                <locationURI>AWS_IOT_MCU_ROOT/lib/ota/aws_ota_agent.c</locationURI>
            </link>
            <link>
                <name>lib/aws/ota/aws_ota_pal.c</name>
                <type>1</type>
                <locationURI>AWS_IOT_MCU_ROOT/lib/ota/portable/st/stm32l475_discovery/aws_ota_pal.c</locationURI>
            </link>

    (1-2) ソースファイルの差し替え その1

    Amazon FreeRTOS v1.2.0へ追従させました。

    差し替え対象

    フォルダ: demos\renesas\rx65n-envision-kit\common\application_code
    ファイル:
    main.c

    以下のファイルをコピー

    フォルダ: demos\vendor\board\common\application_code
    ファイル:
    main.c

    (1-3) ソースファイルの差し替え その2

    こちらは、Amazon FreeRTOS v1.2.0へ追従させるというよりは、むしろ、コピー元を変更したといった方が良いかも知れません。(今までdemos\st\stm32l475_discovery\common\config_fileフォルダのファイルをコピーしていました。)

    差し替え対象

    フォルダ: demos\renesas\rx65n-envision-kit\common\config_files
    ファイル:
    aws_bufferpool_config.h
    aws_demo_config.h
    aws_mqtt_agent_config.h
    aws_mqtt_config.h
    aws_secure_sockets_config.h
    aws_shadow_config.h
    aws_wifi_config.h

    以下のファイルをコピー

    フォルダ: demos\vendor\board\common\config_files
    ファイル:
    aws_bufferpool_config.h
    aws_demo_config.h
    aws_mqtt_agent_config.h
    aws_mqtt_config.h
    aws_secure_sockets_config.h
    aws_shadow_config.h
    aws_wifi_config.h




    (2) シェルティさんの2018/02/24 17:43の投稿のソースをプロジェクトに取り込む(当方のzipファイルはソースを含まず)

    (2-1) .cprojectファイルの修正

    コンパイラバージョンの変更
    インクルードパスの削除/追加
    ライブラリの削除/追加
    C言語標準ライブラリの設定を変更
    SECURE_BOOTの設定を除去
    ビルドから除外するファイルの変更

    (2-2) aws_demos.scfgファイルの差し替え

    差し替え対象

    demos\renesas\rx65n-envision-kit\ccrx-e2studio6\aws_demos.scfg

    上記のファイルを削除して、シェルティさんの以下のファイルをコピーして、aws_demos.scfgにリネーム

    rx65n_envision_kit_aws\rx65n_envision_kit_aws.scfg

    (2-3) NetworkInterface.hファイルの差し替え

    差し替え対象

    lib\FreeRTOS-Plus-TCP\include\NetworkInterface.h

    シェルティさんの以下のファイルをコピー

    rx65n_envision_kit_aws\src\amazon-freertos-master\lib\FreeRTOS-Plus-TCP\include\NetworkInterface.h

    補足

    以下のプロトタイプ宣言の1行が追加されています

    uint32_t ulRand(void);

    (2-4) NetworkInterface.cファイルの追加

    コピー先ファイル

    lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c

    シェルティさんの以下のファイルをコピー

    rx65n_envision_kit_aws\src\amazon-freertos-master\lib\FreeRTOS-Plus-TCP\source\portable\NetworkInterface\RX\NetworkInterface.c

    (2-5) その他のファイルの追加

    コピー先フォルダ

    demos\renesas\rx65n-envision-kit\ccrx-e2studio6\src\

    シェルティさんの以下のファイルとサブフォルダをコピー(当方のzipファイルは以下のファイルを含まず)

    rx65n_envision_kit_aws\src\*.* (time.hとamazon-freertos-master\は除く)




    (3) リンクまで辿り着くようにする

    (3-1) 以下のフォルダを作成しファイルをコピー

    コピーしたファイルは中身が空の関数のテンプレートのソース(○○○/portable/vendor/board/○○○.c)です。

    作成したフォルダ

    lib\pkcs11\portable\renesas\rx65n-envision-kit
    lib\secure_sockets\portable\renesas\rx65n-envision-kit
    lib\wifi\portable\renesas\rx65n-envision-kit

    それぞれコピーしたファイル

    lib\pkcs11\portable\vendor\board\pkcs11.c
    lib\secure_sockets\portable\vendor\board\aws_secure_sockets.c
    lib\wifi\portable\vendor\board\aws_wifi.c

    (3-2) 以下のフォルダを作成し空のファイルを作成

    まだOTAモジュールに関してはテンプレートのソースが用意されていませんでしたので、一旦、空のファイルを作成しました。(後で自力で中身が空の関数を追加する為です。)

    作成したフォルダ

    lib\ota\portable\renesas\rx65n-envision-kit

    作成した空のファイル

    aws_ota_pal.c

    (3-3) リンクされたリソースのリンク先を変更

    上記の(3-1)と(3-2)のフォルダを指すようにしました。

    今まで


    今回


    (3-4) 以下のソースファイルをビルドから除外

    FreeRTOS-Plus-FATのソースを呼び出しているようでリンクが通りそうに無かったからです。

    lib/aws/FreeRTOS-Plus-TCP/source/protocols/Common/FreeRTOS_TCP_server.c
    lib/aws/FreeRTOS-Plus-TCP/source/protocols/FTP/FreeRTOS_FTP_server.c
    lib/aws/FreeRTOS-Plus-TCP/source/protocols/HTTP/FreeRTOS_HTTP_server.c

    (3-5) aws_application_version.hを修正(以前と同じ修正)

    ファイル: demos\common\include\aws_application_version.h
    変更後:

    /* Application version structure. */
    #if (defined(__RX) && defined(__CCRX__))
    #pragma pack
    #else
    #pragma pack(push,1)
    #endif
    typedef 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-6) compilersupport_p.hを修正(先延ばししていた修正)

    ファイル: 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
    #elif defined(__RX) && defined(__CCRX__)
    #  include <builtin.h>
    #  if defined(__LIT)
    #    define cbor_ntohll(x)  ((cbor_ntohl(((uint32_t)(x))) * UINT64_C(0x100000000)) + (cbor_ntohl(((x) >> 32))))
    #    define cbor_htonll     cbor_ntohll
    #    define cbor_ntohl      _builtin_revl
    #    define cbor_htonl      _builtin_revl
    #    define cbor_ntohs      _builtin_revw
    #    define cbor_htons      _builtin_revw
    #  else
    #    define cbor_ntohll
    #    define cbor_htonll
    #    define cbor_ntohl
    #    define cbor_htonl
    #    define cbor_ntohs
    #    define cbor_htons
    #  endif
    #endif

    (3-7) pkcs11.cを修正(中身が空の関数のテンプレートのソースです)

    元々はlib\pkcs11\portable\vendor\board\pkcs11.cをコピーしたものなのですが、エラーが含まれていました。

    ファイル: lib\pkcs11\portable\renesas\rx65n-envision-kit\pkcs11.c
    内容:

    /* PKCS#11 Interface Include. */
    #include "aws_pkcs11.h"

    /* C runtime includes. */
    #include <stdio.h>

    (3-8) aws_ota_pal.cを修正(空のファイルに中身が空の関数を追加しただけです)

    まだOTAモジュールに関してはテンプレートのソースが用意されていませんでしたので、先ほど作成した空のファイルに自力で中身が空の関数を追加しました。

    ファイル: lib\ota\portable\renesas\rx65n-envision-kit\aws_ota_pal.c
    内容:

    #ifdef INCLUDE_FROM_OTA_AGENT

    /* Abort receiving the specified OTA update by closing the file.
     * This shall do whatever is necessary to clean up the file on the STM32L4xx platform.
     * Today this is does not require much of anything.
     */

    static OTA_Err_t prvAbort(OTA_FileContext_t * const C)
    {
        /* FIX ME. */
        return kOTA_Err_SoftwareBug;
    }

    /* Attempt to create a new receive file for the OTA update. */

    static bool_t prvCreateFileForRx(OTA_FileContext_t * const C)
    {
        /* FIX ME. */
        return pdFALSE;
    }

    /* Close the specified file. This may authenticate the file if it is marked as secure. */

    static OTA_Err_t prvCloseFile(OTA_FileContext_t * const C)
    {
        /* FIX ME. */
        return kOTA_Err_SoftwareBug;
    }

    static OTA_Err_t prvActivateNewImage(void)
    {
        /* FIX ME. */
        return kOTA_Err_SoftwareBug;
    }

    /* Set the final state of the last transferred (final) OTA file.
     */

    static OTA_Err_t prvSetImageState (OTA_ImageState_t eState)
    {
        /* FIX ME. */
        return kOTA_Err_SoftwareBug;
    }

    /* Verify the signature of the specified file. */

    static OTA_Err_t prvCheckFileSignature(OTA_FileContext_t * const C)
    {
        /* FIX ME. */
        return kOTA_Err_SoftwareBug;
    }

    /* Read the specified signer certificate from the file system into a local buffer. The allocated
       memory becomes the property of the caller who is responsible for freeing it.
     */

    static u8 * prvReadAndAssumeCertificate(const u8 * const pucCertName, s32 * const lSignerCertSize)
    {
        /* FIX ME. */
        return NULL;
    }

    /* Write a block of data to the specified file. */

    static s16 prvWriteBlock(OTA_FileContext_t * const C, s32 iOffset, u8 * const pacData, u32 iBlockSize)
    {
        /* FIX ME. */
        return -1;
    }

    #endif

    (3-9) main.cを修正

    元々はdemos\vendor\board\common\application_code\main.cをコピーしたものなのですが、エラーが含まれていました。(実は、ワーニングも出るのですが、そちらはそのままにしました。)

    ファイル: demos\renesas\rx65n-envision-kit\common\application_code\main.c
    内容:

    #include "FreeRTOS.h"
    #include "task.h"
    #include "FreeRTOS_IP.h"

     

    void vApplicationIPNetworkEventHook( eIPCallbackEvent_t eNetworkEvent );

    (3-10) main.cを修正 その2

    ファイル: demos\renesas\rx65n-envision-kit\common\application_code\main.c

    以下の関数を#if 0~#endifで囲む

    void vApplicationIPNetworkEventHook( eIPCallbackEvent_t eNetworkEvent )
    void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
                                        StackType_t ** ppxIdleTaskStackBuffer,
                                        uint32_t * pulIdleTaskStackSize )
    void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,
                                         StackType_t ** ppxTimerTaskStackBuffer,
                                         uint32_t * pulTimerTaskStackSize )
    void vApplicationMallocFailedHook()
    void vApplicationStackOverflowHook( TaskHandle_t xTask, char * pcTaskName )
    void vApplicationIdleHook( void )

    以下の関数をシェルティさんのソースからコピーして#if 1~#endifで囲む

    ER R_TCPIP_UserCallback(UB channel, UW eventid, VP param)
    const char * pcApplicationHostnameHook( void )
    void vApplicationIPNetworkEventHook( eIPCallbackEvent_t eNetworkEvent )

    (3-11) helper.cを追加

    とにかく足りない関数を中身が空の関数でも構わないので追加しました。なお、main.cで除いた関数をhelper.cで足しているのは、シェルティさんのmain()のソースを有効にした場合もリンクまで辿り着くようにする為です。)

    ファイル:
    demos\renesas\rx65n-envision-kit\common\application_code\helper.c
    内容:

    #include "FreeRTOS.h"
    #include "mbedtls/entropy_poll.h"
    #include "aws_application_version.h"

    /* Declare the firmware version structure for all to see. */
    const AppVersion32_t xAppFirmwareVersion = {
       .u.x.ucMajor = APP_VERSION_MAJOR,
       .u.x.ucMinor = APP_VERSION_MINOR,
       .u.x.usBuild = APP_VERSION_BUILD,
    };

    int mbedtls_hardware_poll( void *data, unsigned char *output, size_t len, size_t *olen )
    {
      return 0;
    }

    void abort( void )
    {
        for(;;){}
    }

    /* Logging task */
    void vMainUARTPrintString( char * pcString )
    {
    }
    /*-----------------------------------------------------------*/

    /* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
     * implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
     * used by the Idle task. */
    void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
                                        StackType_t ** ppxIdleTaskStackBuffer,
                                        uint32_t * pulIdleTaskStackSize )
    {
    /* If the buffers to be provided to the Idle task are declared inside this
     * function then they must be declared static - otherwise they will be allocated on
     * the stack and so not exists after this function exits. */
        static StaticTask_t xIdleTaskTCB;
        static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];

        /* Pass out a pointer to the StaticTask_t structure in which the Idle
         * task's state will be stored. */
        *ppxIdleTaskTCBBuffer = &xIdleTaskTCB;

        /* Pass out the array that will be used as the Idle task's stack. */
        *ppxIdleTaskStackBuffer = uxIdleTaskStack;

        /* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer.
         * Note that, as the array is necessarily of type StackType_t,
         * configMINIMAL_STACK_SIZE is specified in words, not bytes. */
        *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
    }
    /*-----------------------------------------------------------*/

    /* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
     * implementation of vApplicationGetTimerTaskMemory() to provide the memory that is
     * used by the RTOS daemon/time task. */
    void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,
                                         StackType_t ** ppxTimerTaskStackBuffer,
                                         uint32_t * pulTimerTaskStackSize )
    {
    /* If the buffers to be provided to the Timer task are declared inside this
     * function then they must be declared static - otherwise they will be allocated on
     * the stack and so not exists after this function exits. */
        static StaticTask_t xTimerTaskTCB;
        static StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ];

        /* Pass out a pointer to the StaticTask_t structure in which the Idle
         * task's state will be stored. */
        *ppxTimerTaskTCBBuffer = &xTimerTaskTCB;

        /* Pass out the array that will be used as the Timer task's stack. */
        *ppxTimerTaskStackBuffer = uxTimerTaskStack;

        /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.
         * Note that, as the array is necessarily of type StackType_t,
         * configMINIMAL_STACK_SIZE is specified in words, not bytes. */
        *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
    }
    /*-----------------------------------------------------------*/



    (4) rx65n-rskのプロジェクトを追加する(今まではrx65n-envision-kitのプロジェクトのみだった)

    (4-1) プロジェクトフォルダの作成

    以下のフォルダを作成

    demos\renesas\rx65n-rsk\ccrx-e2studio6
    demos\renesas\rx65n-rsk\common

    以下のフォルダのファイルをコピー

    demos\renesas\rx65n-envision-kit\ccrx-e2studio6
    demos\renesas\rx65n-envision-kit\common

    (4-2) .projectファイルと.cprojectファイルの修正

    フォルダ名の変更
    など

    (4-3) aws_demos.scfgファイルの差し替え

    差し替え対象

    demos\renesas\rx65n-rsk\ccrx-e2studio6\aws_demos.scfg

    上記のファイルを削除して、シェルティさんの以下のファイルをコピーして、aws_demos.scfgにリネーム

    rx65n_rsk\rx65n_rsk.scfg

    (4-4) その他のファイルの差し替え

    差し替え対象

    demos\renesas\rx65n-rsk\ccrx-e2studio6\src\*.*

    上記のファイルを削除して、シェルティさんの以下のファイルとサブフォルダをコピー(当方のzipファイルは以下のファイルを含まず)

    rx65n_rsk\src\*.* (amazon-freertos-master\は除く)




    (5) CS+のプロジェクトへ変換

    プロジェクトの変換は、基本的にはrcpcファイルをe2 studioでエクスポートしてCS+で読み込むという手順で行いましたが、その後に手作業で修正を行っています。

    手作業でプロジェクト構造を修正
    ・ lib\third_partyカテゴリの位置を修正
    ・ lib\third_party\mbedtlsカテゴリが壊れている(CS+のrcpcファイル読み込みの不具合?)ので修正
    ・ lib\third_party\tinycborカテゴリが壊れている(CS+のrcpcファイル読み込みの不具合?)ので修正
    ・ lib\third_partyカテゴリの下位にmcu_vendor\renesas\DriverLibName\DriverLibVersionカテゴリを追加(中身は空)
    ・ common\application_codeカテゴリの下位にrenesas_codeカテゴリを追加(中身は空)

    手作業でプロジェクトの登録ファイルを修正
    ・ プロジェクト変換情報_aws_demos.txt → 削除
    ・ lib\FreeRTOS-Plus-TCP\source\ReadMe.url → 追加

    手作業でSmart Configuratorカテゴリとsrc\smc_genカテゴリの重複を解消
    ・ Smart Configuratorを起動してソースを生成させた後でsrc\smc_genカテゴリを削除

    手作業でインクルードパスを修正

    修正前

    src\smc_gen\r_t4_rx\ref
    src\smc_gen\r_t4_rx\lib
    src\smc_gen\r_t4_driver_rx\src
    src\smc_gen\r_t4_driver_rx\ref
    src\smc_gen\r_sys_time_rx\src
    src\smc_gen\r_sys_time_rx\ref
    src\smc_gen\r_sys_time_rx
    src\smc_gen\r_pincfg
    src\smc_gen\r_ether_rx\src\phy
    src\smc_gen\r_ether_rx\src
    src\smc_gen\r_ether_rx\ref
    src\smc_gen\r_ether_rx
    src\smc_gen\r_config
    src\smc_gen\r_cmt_rx\ref
    src\smc_gen\r_cmt_rx
    src\smc_gen\r_bsp\mcu\rx65n\register_access
    src\smc_gen\r_bsp\mcu\rx65n
    src\smc_gen\r_bsp\mcu\all
    src\smc_gen\r_bsp\board\generic_rx65n
    src\smc_gen\r_bsp
    src\smc_gen\general
    ..\..\..\..\lib\third_party\tinycbor
    ..\..\..\..\lib\third_party\mbedtls\include\mbedtls
    ..\%ProjectName%
    ..\%ProjectName%\config_files
    ..\%ProjectName%\application_code
    ..\%ProjectName%\application_code\renesas_code
    ..\%ProjectName%\application_code\common_demos\include
    ..\%ProjectName%\lib\aws\include
    ..\%ProjectName%\lib\aws\include\private
    ..\%ProjectName%\lib\aws\FreeRTOS\portable\Renesas\RX600v2
    ..\%ProjectName%\lib\aws\FreeRTOS-Plus-TCP\source\protocols\include
    ..\%ProjectName%\lib\aws\FreeRTOS-Plus-TCP\include
    ..\%ProjectName%\lib\aws\FreeRTOS-Plus-TCP\source\portable\Compiler\Renesas
    ..\%ProjectName%\lib\aws\ota
    ..\%ProjectName%\lib\third_party\jsmn
    ..\%ProjectName%\lib\third_party\pkcs11
    ..\%ProjectName%\lib\third_party\tinycbor
    ..\%ProjectName%\lib\third_party\mbedtls\include
    ..\%ProjectName%\src\FreeRTOS_user
    ..\%ProjectName%\src
    ..\%ProjectName%\src\smc_gen\r_bsp
    ..\%ProjectName%\src\smc_gen\r_config
    ..\%ProjectName%\src\smc_gen\r_cmt_rx
    ..\%ProjectName%\src\smc_gen\r_cmt_rx\src
    ..\%ProjectName%\src\smc_gen\r_ether_rx
    ..\%ProjectName%\src\smc_gen\r_sys_time_rx
    ..\%ProjectName%\src\smc_gen\r_sys_time_rx\src
    ..\%ProjectName%\src\smc_gen\r_t4_driver_rx
    ..\%ProjectName%\src\smc_gen\r_t4_driver_rx\src
    ..\%ProjectName%\src\smc_gen\r_t4_rx
    ..\%ProjectName%\src\smc_gen\r_t4_rx\lib
    ..\%ProjectName%\src\smc_gen\general
    ..\%ProjectName%\src\smc_gen\r_pincfg

    修正後

    src\smc_gen\r_t4_rx\ref
    src\smc_gen\r_t4_rx\lib
    src\smc_gen\r_t4_driver_rx\src
    src\smc_gen\r_t4_driver_rx\ref
    src\smc_gen\r_sys_time_rx\src
    src\smc_gen\r_sys_time_rx\ref
    src\smc_gen\r_sys_time_rx
    src\smc_gen\r_pincfg
    src\smc_gen\r_ether_rx\src\phy
    src\smc_gen\r_ether_rx\src
    src\smc_gen\r_ether_rx\ref
    src\smc_gen\r_ether_rx
    src\smc_gen\r_config
    src\smc_gen\r_cmt_rx\ref
    src\smc_gen\r_cmt_rx
    src\smc_gen\r_bsp\mcu\rx65n\register_access
    src\smc_gen\r_bsp\mcu\rx65n
    src\smc_gen\r_bsp\mcu\all
    src\smc_gen\r_bsp\board\generic_rx65n
    src\smc_gen\r_bsp
    src\smc_gen\general
    .
    ..\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\renesas\rx65n-envision-kit (rx65n-envision-kitの場合)
    ..\..\..\..\lib\ota\portable\renesas\rx65n-rsk (rx65n-rskの場合)
    ..\..\..\..\lib\third_party\jsmn
    ..\..\..\..\lib\third_party\pkcs11
    ..\..\..\..\lib\third_party\tinycbor
    ..\..\..\..\lib\third_party\mbedtls\include
    src\FreeRTOS_user
    src

    手作業でライブラリパスを修正

    修正前

    %ProjectFolder%/../%ProjectName%/src/smc_gen/r_t4_rx/lib/T4_Library_rxv1_ether_little.lib
    src/smc_gen/r_t4_rx/lib/T4_Library_rxv1_ether_little.lib

    修正後

    src/smc_gen/r_t4_rx/lib/T4_Library_rxv1_ether_little.lib

    手作業でプロジェクト設定を変更
    ・ [一括ビルドを行う] を [はい] に変更(Smart Configuratorでコード生成すると何故か [いいえ] になる)
    ・ [インクルード・ファイルが存在しないソースの扱い] を [再コンパイル/アセンブルしない] に変更

    手作業でリンク順を合わせる
    ・ rcpcファイルのLinkOrderデータをmtlsフォーマットに切り出してインポートする(UTF-8,CR+LF,BOM付))
      aws_demos.libは除去しておく(含まれていてもエラーにはならない)

  • NoMaYさん

    シェルティです、こんにちは。

    毎度ありがとうございます。うまくくっつきそうな雰囲気になってきましたね。

    以下問題については、お任せください。
    >問題はBSPとCMTとT4でFreeRTOS対応された部分をどうするかで、これは来週になってから思案してみようと思っています。

    ⑥のmbed TLSを先に動かそうと思いましたが、
    足元がしっかり作れてないと上っていけない性分なので、
    思い直して今週は⑤のデバイスドライバ周りの整備を優先しようと考えています。
    T4周りのコードは削除して、FreeRTOS+TCPから直接Etherドライバを呼び出すよう改良します。
    また、ゼロコピーにもトライしてみます。

    ただ今週も1日しか自由時間(Amazon FreeRTOSを触れる時間)がありません。
    残り1日は山のように溜まっているメールの片づけ・・・がんばります・・・。

    また報告します。

    ■進捗報告
    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部分をターゲットで動作させる ★3/3, 3/4 はここを再度メンテ
    ⑥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の本家に登録する
     docs.aws.amazon.com/.../freertos-qualification-program.html

    以上です
  • NoMaYさん

    シェルティです、こんにちは。

    ルネサスTCP/IP(T4)と癒着していたところを完全に剥がしました。
    あと、Ether割り込みからFreeRTOS+TCPに受信イベント通知ができるようになり、
    これまで最大10msかかっていたping応答が常にusオーダ(割り込み駆動)に収まるようになりました。
    まだゼロコピー対応(送受信データのポインタ渡し)はできてませんが、通信性能はまともになりました。

    データアップロードしました。
    shelty1.servegame.com/.../experiment.zip

    来週以降はゼロコピー対応はやはり少し置いておいて、mbed TLS対応に進みます。
    コンパイルは通るようになりました。

    ■進捗報告
    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内蔵暗号器を使ったハードウェア実装に置き換える
    ⑩Ether層のゼロコピーに対応する
    ⑪NoMaYさんの環境にマージし、Amazon FreeRTOS本家コードへの追従を簡単にできるようにする
    ⑫Amazon FreeRTOS のGitのforkに登録する
    ⑬Amazon FreeRTOS のCertificationを受験し合格しGitの本家に登録する
     docs.aws.amazon.com/.../freertos-qualification-program.html

    以上です
  • シェルティさん、こんにちは。NoMaYです。

    リプライが遅くなりました。zipファイルを受け取りました。rx65n_envision_kit_awsもrx65n_rsk_awsもビルド出来ました。(環境はe2 studio v6.2.0+CC-RX V2.03です。)

    >週末にでもGitHubへ登録してみようと思っています。
    すみません。使おうと思っていたGithub DesktopというGUI版ツールが64bit版Windows用しかなくて当方の32bit版Windowsでは使えず、そこでgitのコマンドライン版ツールを触ってみたら、使い方で分からない&エラーにも遭遇して、まだ登録出来ていません。

  • こんにちは。NoMaYです。

    現在、GitHubへ登録してみようと作業中ですが、ウェブで調べものをしていたところ、2月末にドイツで行われた組み込みシステム展示会(embedded world 2018)で、Amazon FreeRTOSの新しい話が2つあったことを知りました。

    (1) IAR SystemsがIAR Embedded Workbench for ArmのAmazon FreeRTOS用のプラグインを発表

    IARシステムズがArm Cortex-MベースのIoTアプリケーションの十分なコントロールのためAmazon FreeRTOSとの統合を強化
    www.iar.com/jp/about-us/newsroom/press-releases/20180227iar-systems-enhances-amazon-freertos-integration-for-full-control-of-arm-cortex-m-based-iot-applications/

    IARシステムズのC-SPY® RTOSアウェアネスプラグインを有効にすることで、Amazon FreeRTOSと統合されたIAR Embedded Workbenchは、その上にビルドされたアプリケーションに高度なコントロールと可視性をもたらします。選択されたタスクのコードの位置・レジスタ内容・コールスタック情報・ローカル変数が表示され、タスク固有のブレークポイントとタスク固有のステッピングがタスクのデバッグを容易にします。

    このデバッガプラグインは便利かも、、、

    ちなみに、少し昔の投稿ですが、IARのコンパイラは40%のマーケットシェアを持っているらしいです。

    IARのコンパイラ(Embedded Workbenchも?)は40 persentのMarket shareを持っている(Renesas調査@2015)らしい
    japan.renesasrulz.com/cafe_rene/f/forum21/4668/iar-embedded-workbench-40-persent-market-share-renesas-2015

    (2) Espressif SystemsがESP32のAmazon FreeRTOS対応を発表

    Espressif’s ESP32 to Support Amazon FreeRTOS
    www.espressif.com/en/media_overview/news/espressifs-esp32-support-amazon-freertos

    The two companies will continue working together in order to bring the Amazon FreeRTOS-qualified ESP32 to the market, and make the secure connection of an ESP32 to AWS IoT even easier.

    広報の展示会ブース写真が絶妙かも、、、

    ちなみに、この広報と関係があるかは分かりませんが、ESP32のCPUであるXtensa向けのAmazon FreeRTOSのForkが出来ていました。(記憶を辿るとFork自体は以前からあったような気がします。でもxtensa-v1.0.0としてソースが公開されたのは先月末なのかなと思われます。) 追記: Cadenceのシミュレータが対象で、かつ、コンパイラもGCCは使えません、と書いてありましたので、広報に書かれていたものとは別物でありそうな気がして来ました。

    Cloud-native IoT operating system for microcontrollers. With Xtensa architecture support.
    github.com/foss-xtensa/amazon-freertos
     

  •  こんにちは。NoMaYです。

    先週の3月3日のシェルティさんのソースを取り込んでGitHubへ登録してみました。Amazon FreeRTOSのソースは既にv1.2.2に進んでいますが、まだこちらはv1.2.0を下敷きにしています。

    github.com/NoMaY-jp/amazon-freertos

    今回、当初は登録後に思案するつもりだった以下の懸案事項のうちで、シェルティさんが作業して下さいましたT4を除いた、残りの2つのBSPとCMTについて、ちょっと気付いたことがありましたので一緒に試してみました。

    >問題はBSPとCMTとT4のFreeRTOS対応の部分をどうするかで、これは来週になってから思案してみようと思っています。

    気付いたこととは、BSPとCMTについては、以前の投稿の以下のアプリケーションノートのRTOS対応のBSPとCMTをそのまま使えば良いのではないか、ということです。つまり、このアプリケーションノートのzipファイルの中からr_bsp_rtosフォルダとr_cmt_rtos_rxフォルダを抜き出してしまえば良いのではないか、ということです。

    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.pdf

    RX65N Group Application Note RX65N Real-time OS Package V1.0.00 サンプルプログラム
    www.renesas.com/ja-jp/software/D6001926.html

    とはいえ、スマートコンフィグレータが生成するr_bspフォルダとr_cmt_rxフォルダの内容と干渉しないようにする必要がありますので、以下のような手を考えてみました。

    ・ スマートコンフィグレータが生成するr_bspフォルダとr_cmt_rxフォルダに対してビルドから除外する設定を行う
    ・ ビルド前ステップでr_bspフォルダとr_cmt_rxフォルダをリネームしてインクルードパスが効かないようにする
      r_bspフォルダの名前 → r_bsp__unusedという名前にリネーム
      r_cmt_rxフォルダの名前 → r_cmt_rx__unusedという名前にリネーム
    ・ ビルド前ステップでr_bspフォルダとr_cmt_rxフォルダをリネームするのに以下のMS-DOSコマンドを使いました
    e2 studioの場合
    @(if exist ..\src\smc_gen\r_bsp echo renaming folder: r_bsp --^> r_bsp__unused && ren ..\src\smc_gen\r_bsp r_bsp__unused) && @(if exist ..\src\smc_gen\r_cmt_rx echo renaming folder: r_cmt_rx --^> r_cmt_rx__unused && ren ..\src\smc_gen\r_cmt_rx r_cmt_rx__unused)
    CS+の場合
    @(echo 'Use r_bsp_rtos and r_cmt_rtos_rx instead of r_bsp and r_cmt_rx') && @(if exist src\smc_gen\r_bsp echo renaming folder: r_bsp --^> r_bsp__unused && ren src\smc_gen\r_bsp r_bsp__unused) && @(if exist src\smc_gen\r_cmt_rx echo renaming folder: r_cmt_rx --^> r_cmt_rx__unused && ren src\smc_gen\r_cmt_rx r_cmt_rx__unused)
    ・ リネーム後のフォルダに対してもビルドから除外する設定を行う(e2 studioのみ、CS+は未登録ならビルドしない為)
    ・ 抜き出したr_bsp_rtosフォルダとr_cmt_rtos_rxフォルダはスマートコンフィグレータのsmc_genフォルダの外に置く

    やってみると、狙った通り、干渉しないようにすることが出来ましたので、スマートコンフィグレータでコード生成する度にしなければならない余分な作業というものはありません。

    ただ、惜しいことに、アプリケーションノートのRTOS対応のBSPのhwsetup.cには変えた方が良い/変えないといけない点がありましたので、アプリケーションノートのzipファイルの中から抜き出した時にhwsetup.cを差し替えて下さい。手順(英文)を書いた以下のファイル(update!.txt)と差し替える新しいファイル(update!.hwsetup.c)をsrc\realtime_OS_pkgフォルダに含めておきました。

    At first, please get r_bsp_rtos module and r_cmt_rx module by following the steps below.

    1. Download an-r01an4033es0100-rx65n-connectivity.zip from https://www.renesas.com/en-eu/software/D6001925.html

    Issue Date : Oct.01.17
    Category : Other Sample Codes

    RX65N Group Application Note RX65N Real-time OS Package V1.0.00

    Applicable Products
    RX65N, RX651
    RX Driver Package

    Comments
    Application Notes (r01an4033es0100-rx65n.pdf) and Sample Program (Source, ( e2 studio / CC-RX )) are included.
    Related function: USB, RTOS, Connectivity

    File Size
    77.78 MByte

    2. Copy an-r01an4033es0100-rx65n-connectivity.zip\an-r01an4033es0100-rx65n-connectivity\RX65N_2M_realtime_OS_pkg\r_bsp_rtos\ here

    3. Copy an-r01an4033es0100-rx65n-connectivity.zip\an-r01an4033es0100-rx65n-connectivity\RX65N_2M_realtime_OS_pkg\r_cmt_rtos_rx\ here

    Then please update r_bsp_rtos\board\rskrx65n_2mb\hwsetup.c by following the steps below.

    4. Delete r_bsp_rtos\board\rskrx65n_2mb\hwsetup.c

    5. Move update!.hwsetup.c to r_bsp_rtos\board\rskrx65n_2mb\hwsetup.c

    Best regards

    (↑あっ、最初の文のr_cmt_rxはr_cmt_rtos_rxの間違いですね。後で、GitHubに登録したものを直しておきます。)

    以下、ビルド前ステップの設定とビルド時の画面コピーです。

    e2 studioの場合





    CS+の場合



    以下、今回のインクルードパスの設定です。

    e2 studioの場合 (Smart Configuratorが生成したフォルダはリストの下の方に追加されます)

    ${TCINSTALL}/include
    /${ProjName}/
    /${ProjName}/config_files
    /${ProjName}/application_code
    /${ProjName}/application_code/renesas_code
    /${ProjName}/application_code/common_demos/include
    /${ProjName}/lib/aws/include
    /${ProjName}/lib/aws/include/private
    /${ProjName}/lib/aws/FreeRTOS/portable/Renesas/RX600v2
    /${ProjName}/lib/aws/FreeRTOS-Plus-TCP/source/protocols/include
    /${ProjName}/lib/aws/FreeRTOS-Plus-TCP/include
    /${ProjName}/lib/aws/FreeRTOS-Plus-TCP/source/portable/Compiler/Renesas
    /${ProjName}/lib/aws/ota
    /${ProjName}/lib/third_party/jsmn
    /${ProjName}/lib/third_party/pkcs11
    /${ProjName}/lib/third_party/tinycbor
    /${ProjName}/lib/third_party/mbedtls/include
    /${ProjName}/src/realtime_OS_pkg/r_bsp_rtos
    /${ProjName}/src/realtime_OS_pkg/r_cmt_rtos_rx
    /${ProjName}/src/realtime_OS_pkg/r_cmt_rtos_rx/src
    /${ProjName}/src/FreeRTOS_user
    /${ProjName}/src
    /${ProjName}/src/smc_gen/r_bsp
    /${ProjName}/src/smc_gen/r_config
    /${ProjName}/src/smc_gen/r_cmt_rx
    /${ProjName}/src/smc_gen/r_cmt_rx/src
    /${ProjName}/src/smc_gen/r_ether_rx
    /${ProjName}/src/smc_gen/general
    /${ProjName}/src/smc_gen/r_pincfg

    CS+の場合 (Smart Configuratorが生成したフォルダはリストの上の方に追加されます)

    src\smc_gen\r_pincfg
    src\smc_gen\r_ether_rx\src\phy
    src\smc_gen\r_ether_rx\src
    src\smc_gen\r_ether_rx\ref
    src\smc_gen\r_ether_rx
    src\smc_gen\r_config
    src\smc_gen\r_cmt_rx\ref
    src\smc_gen\r_cmt_rx
    src\smc_gen\r_bsp\mcu\rx65n\register_access
    src\smc_gen\r_bsp\mcu\rx65n
    src\smc_gen\r_bsp\mcu\all
    src\smc_gen\r_bsp\board\generic_rx65n
    src\smc_gen\r_bsp
    src\smc_gen\general
    .
    ..\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\renesas\rx65n-envision-kit (rx65n-envision-kitの場合)
    ..\..\..\..\lib\ota\portable\renesas\rx65n-rsk (rx65n-rskの場合)
    ..\..\..\..\lib\third_party\jsmn
    ..\..\..\..\lib\third_party\pkcs11
    ..\..\..\..\lib\third_party\tinycbor
    ..\..\..\..\lib\third_party\mbedtls\include
    src\realtime_OS_pkg\r_bsp_rtos
    src\realtime_OS_pkg\r_cmt_rtos_rx
    src\realtime_OS_pkg\r_cmt_rtos_rx\src
    src\FreeRTOS_user
    src

     

  • NoMaYさん

    シェルティです、こんにちは。

    いつも貴重な調査を実施いただき、ありがとうございます。
    NoMaYさんに挙げていただいた内容はパッケージ内の
    readme.txtの課題に記載しました。

    私の進捗ですが、Amazon FreeRTOS v1.2.2を使用して、
    RX65NをAmazon Web ServiceにSSL接続することが出来ました。
    Amazon FreeRTOS v1.2.2内包の純正コンポーネント
    (FreeRTOS、FreeRTOS+TCP、SSL/TLS、MQTT等)を活用しています。

    実は年始に研究開発予算を確保し協力会社に支援要請を行っておりました。
    これにより2月後半から開発を加速させております。⑥⑦については
    協力会社の支援により、ここ数週間で一気に進捗させることができました。

    進捗報告です。

    ■最新パッケージ
    shelty1.servegame.com/.../experiment.zip

    ■進捗
    RX65N Envision Kit、RX65N RSK(2MB版/暗号器あり品)をターゲットにコードメンテを維持します。
    下記 Amazon FreeRTOS 1.2.x は適宜最新コードに更新していきます。
    2018/03/17時点での適用コードは 1.2.2 です。

    ①ルネサスTCP/IPをターゲットで動作させる(Etherの動作確認)
    ②SDIO無線LANを動作確認した時期のFreeRTOS 8.2.2をターゲットで動作させる
    ③ルネサスのFreeRTOSパッケージ、9.0.0をターゲットで動作させる
    ④Amazon FreeRTOS 1.2.xのFreeRTOS部分をターゲットで動作させる
    ⑤Amazon FreeRTOS 1.2.xのFreeRTOS+TCP部分をターゲットで動作させる
    ⑥Amazon FreeRTOS 1.2.xのmbed TLS部分をターゲットで動作させる
    ⑦Amazon FreeRTOS 1.2.xのMQTT部分をターゲットで動作させる(AWSへの接続実験)
    ⑧Amazon FreeRTOS 1.2.xのFreeRTOS+TCP部分のネットワーク層の結合部分を工夫して、
     (1)Ether、(2)SPI接続無線LANモジュール、(3)SDIO無線LANモジュールの3種類を
     切り替えられるようにする ★いまここ@シェルティ
    ⑨Amazon FreeRTOS 1.2.xのmbed TLS部分の暗号処理プリミティブの
     ソフトウェア実装(AESとかRSAとか)をRX65N内蔵暗号器を使った
     ハードウェア実装に置き換える ★いまここ@協力会社
    ⑩Ether層のゼロコピーに対応する
    ⑪Amazon FreeRTOS本家環境にマージし、Amazon FreeRTOS本家コードへの追従を簡単にできるようにする
    ⑫Amazon FreeRTOS のGitのforkに登録する
    ⑬Amazon FreeRTOS のCertificationを受験し合格しGitの本家に登録する
     docs.aws.amazon.com/.../freertos-qualification-program.html
     
    ■今後の予定
    ⑦より前にもまだ細かい課題はありますが、今後は⑧⑨以降を進めてまいります。
    ソフトウェア開発の目途がついたので、対応ボード環境(場合によってはボード開発も実施)を整備し
    RXマイコンのAmazon FreeRTOS対応Amazon Web Service IoT開発キットとして、
    一般販売を目指してまいります。

    # 前にも書いたかもしれませんが、シェルティはルネサス関係者です。

    以上です