こんにちは。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です。遅くなりました。zipファイルを受け取りました。解凍も出来ました。readme.txtに目を通しているところです。[追記] 2018/02/24 23:28rx65n_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.cdemos\renesas\rx65n-rsk-kit\common\application_code\main.cシェルティさんのmain()のソース(シェルティさんがされた確認と同じことが出来る筈です)demos\renesas\rx65n-envision-kit\ccrx-e2studio6\src\rx65n_envision_kit_aws.cdemos\renesas\rx65n-rsk\ccrx-e2studio6\src\rx65n_rsk_aws.c.cdemos\renesas\rx65n-envision-kit\ccrx-csplus\src\rx65n_envision_kit_aws.cdemos\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 typesrc\lcd_conf.c(362):W0520118:A void function may not return a valuesrc\lcd_conf.c(373):W0520120:Return value type does not match the function typesrc\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) ソースファイルの差し替え その1Amazon 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.haws_demo_config.haws_mqtt_agent_config.haws_mqtt_config.haws_secure_sockets_config.haws_shadow_config.haws_wifi_config.h以下のファイルをコピーフォルダ: demos\vendor\board\common\config_filesファイル:aws_bufferpool_config.haws_demo_config.haws_mqtt_agent_config.haws_mqtt_config.haws_secure_sockets_config.haws_shadow_config.haws_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-kitlib\secure_sockets\portable\renesas\rx65n-envision-kitlib\wifi\portable\renesas\rx65n-envision-kitそれぞれコピーしたファイルlib\pkcs11\portable\vendor\board\pkcs11.clib\secure_sockets\portable\vendor\board\aws_secure_sockets.clib\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.clib/aws/FreeRTOS-Plus-TCP/source/protocols/FTP/FreeRTOS_FTP_server.clib/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)#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-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-e2studio6demos\renesas\rx65n-rsk\common以下のフォルダのファイルをコピーdemos\renesas\rx65n-envision-kit\ccrx-e2studio6demos\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\refsrc\smc_gen\r_t4_rx\libsrc\smc_gen\r_t4_driver_rx\srcsrc\smc_gen\r_t4_driver_rx\refsrc\smc_gen\r_sys_time_rx\srcsrc\smc_gen\r_sys_time_rx\refsrc\smc_gen\r_sys_time_rxsrc\smc_gen\r_pincfgsrc\smc_gen\r_ether_rx\src\physrc\smc_gen\r_ether_rx\srcsrc\smc_gen\r_ether_rx\refsrc\smc_gen\r_ether_rxsrc\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\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\refsrc\smc_gen\r_t4_rx\libsrc\smc_gen\r_t4_driver_rx\srcsrc\smc_gen\r_t4_driver_rx\refsrc\smc_gen\r_sys_time_rx\srcsrc\smc_gen\r_sys_time_rx\refsrc\smc_gen\r_sys_time_rxsrc\smc_gen\r_pincfgsrc\smc_gen\r_ether_rx\src\physrc\smc_gen\r_ether_rx\srcsrc\smc_gen\r_ether_rx\refsrc\smc_gen\r_ether_rxsrc\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\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\includesrc\FreeRTOS_usersrc
手作業でライブラリパスを修正修正前
%ProjectFolder%/../%ProjectName%/src/smc_gen/r_t4_rx/lib/T4_Library_rxv1_ether_little.libsrc/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です。リプライが遅くなりました。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 FreeRTOSwww.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.pdfRX65N 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.htmlIssue Date : Oct.01.17Category : Other Sample CodesRX65N Group Application Note RX65N Real-time OS Package V1.0.00Applicable ProductsRX65N, RX651RX Driver PackageCommentsApplication Notes (r01an4033es0100-rx65n.pdf) and Sample Program (Source, ( e2 studio / CC-RX )) are included.Related function: USB, RTOS, ConnectivityFile Size77.78 MByte2. Copy an-r01an4033es0100-rx65n-connectivity.zip\an-r01an4033es0100-rx65n-connectivity\RX65N_2M_realtime_OS_pkg\r_bsp_rtos\ here3. Copy an-r01an4033es0100-rx65n-connectivity.zip\an-r01an4033es0100-rx65n-connectivity\RX65N_2M_realtime_OS_pkg\r_cmt_rtos_rx\ hereThen please update r_bsp_rtos\board\rskrx65n_2mb\hwsetup.c by following the steps below.4. Delete r_bsp_rtos\board\rskrx65n_2mb\hwsetup.c5. Move update!.hwsetup.c to r_bsp_rtos\board\rskrx65n_2mb\hwsetup.cBest 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_pincfgsrc\smc_gen\r_ether_rx\src\physrc\smc_gen\r_ether_rx\srcsrc\smc_gen\r_ether_rx\refsrc\smc_gen\r_ether_rxsrc\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\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\includesrc\realtime_OS_pkg\r_bsp_rtossrc\realtime_OS_pkg\r_cmt_rtos_rxsrc\realtime_OS_pkg\r_cmt_rtos_rx\srcsrc\FreeRTOS_usersrc