このトピックでは、Link SDK for Cを移植するときに定義する必要があるシステム関連のAPI操作について説明します。
前提条件
SDKが取得されます。 詳細については、「C用リンクSDKの取得」をご参照ください。
アーキテクチャ

Link SDK for Cは、さまざまなオペレーティングシステムまたはハードウェアプラットフォームをサポートします。 Link SDK for Cは、システム関連のAPI操作をカプセル化して、オペレーティングシステムまたはハードウェアプラットフォームと対話します。 製品を開発するときは、SDKでAPI操作を呼び出してビジネスロジックを実装する必要があります。 また、システム関連のAPI操作を定義するコードを記述する必要があります。
Link SDK for C V4.1.10以降では、トランスポート層セキュリティ (TLS) がSDKに実装されています。 ネットワーク関連のAPI操作を移植する場合、TCP送信を実装するだけで済みます。
SDKを以前のバージョンから最新バージョンにアップグレードする場合は、
aiot_port/*_port.cファイルでCORE_SYSDEP_MBEDTLS_ENABLEDパラメーターを設定してTSLをオフにする必要があります。
システム関連のAPI操作の説明
システム関連のAPI操作は、Link SDK for Cをオペレーティングシステムから切り離します。 操作を呼び出して、さまざまなオペレーティングシステムと対話できます。
システム関連のAPI操作のプロトタイプ定義はaiot_sysdep_portfile_tです。 グローバル変数g_aiot_sysdep_portfileを定義する必要があります。 グローバル変数は、SDKを移植するために、宛先オペレーティングシステムのAPIオペレーションによって実装される。
一般的な操作とmutex関連の操作は使いやすいです。 このトピックでは、操作を呼び出す方法については説明しません。 SDKを移植するときは、すべてのシステム関連のAPI操作を定義する必要があります。 操作を定義するときにNULLを指定することはできません。 それ以外の場合、エラーが発生します。
システム関連のAPI操作のリスト
データ型 | 操作 | 説明 |
一般的な操作 | core_sysdep_malloc | メモリに適用されます。 |
core_sysdep_free | メモリを解放します。 | |
core_sysdep_time | 現在のタイムスタンプを取得します。 Link SDKを使用して偏差を計算します。 | |
core_sysdep_sleep | スリープ時間をミリ秒単位で指定します。 | |
core_sysdep_rand | 乱数を生成します。 | |
ネットワーク関連の操作 | core_sysdep_network_init | セッションを作成します。 |
core_sysdep_network_setopt | セッションのパラメーターを設定します。 | |
core_sysdep_network_establish | Message Queuing Telemetry Transport (MQTT) またはHTTP接続を確立できるセッションを確立します。 | |
core_sysdep_network_recv | 指定されたセッションからデータを読み取ります。 | |
core_sysdep_network_send | 指定したセッションを使用してデータを送信します。 | |
core_sysdep_network_deinit | セッションを削除します。 | |
Mutex関連の操作 | core_sysdep_mutex_init | ミューテックスを作成します。 |
core_sysdep_mutex_lock | ミューテックスに適用されます。 | |
core_sysdep_mutex_unlock | ミューテックスをリリースします。 | |
core_sysdep_mutex_deinit | ミューテックスを削除します。 |
ネットワーク操作のパラメーターの設定
Link SDK for Cを移植するときは、core_sysdep_network_setopt操作のパラメーターを設定する必要があります。
次の表に、ソケットベースのネットワークタイプを指定するパラメーターを示します。 TCPおよびUDP接続を確立するためのパラメーターを設定できます。
項目
説明
CORE_SYSDEP_SOCKET_TCP_CLIENT
MQTT、HTTP、HTTP2、およびWebSocketプロトコルをサポートするTCPクライアント。 上記の機能を使用する場合は、パラメーターを設定する必要があります。
CORE_SYSDEP_SOCKET_UDP_CLIENT
UDPクライアント。 CoAP接続を確立する場合は、パラメーターを設定する必要があります。
次の表に、接続を確立するために必要なパラメーターを示します。
項目
説明
CORE_SYSDEP_NETWORK_SOCKET_TYPE
作成するソケットのタイプ。
データ型:
(core_sysdep_socket_type_t *)CORE_SYSDEP_NETWORK_HOST
接続の確立に使用されるドメイン名またはIPアドレス。 メモリは、上位層モジュールによって共有される。
データ型:
(char *)CORE_SYSDEP_NETWORK_BACKUP_IP
DNS解決が失敗した場合に使用されるバックアップIPアドレス。 指定する必要はありません。
CORE_SYSDEP_NETWORK_PORT
接続の確立に使用されるポート番号。
データ型:
(uint16_t *)CORE_SYSDEP_NETWORK_CONNECT_TIMEOUT_MS
接続を確立するためのタイムアウト期間。
データ型:
(uint32_t *)CORE_SYSDEP_NETWORK_MAX
このパラメーターはLink SDK for Cでは使用されません。パラメーターを設定する必要はありません。
サンプルコード
サンプルコードはPOSIX標準に基づいています。 Link SDK for Cをダウンロードするときは、SDKカスタマイズページでデバイスOSをPOSIX準拠に設定します。 Link SDK for Cは、portfile/aiot_port/posix_port.cファイルでサンプルコードを提供します。 サンプルコードは、POSIX標準に基づいてSDKを移植する方法を示しています。
結果の検証
Link SDK for Cを移植した後、次の手順を実行して、Link SDK for CのAPI操作が期待どおりに機能するかどうかを確認します。
を開きます。/LinkSDK/demos/sysdep_api_test_demo.cファイルを作成し、次の操作を実行します。タスクを作成する関数を定義します。
同時実行機能を検証します。 SDKが移植される移行先システムでタスクを作成する必要があります。
ヒープの最大サイズを指定します。
この項目は、ヒープがSDKで期待どおりに使用できるかどうかを確認するために使用されます。
サンプルコード
/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TODO START >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * / /* * TODO: タスクを作成して実行する関数を呼び出します。 タスクが終了すると、関数は自動的に存在します。 * @ param[in] エントリ関数の先頭。 * @ param[in] argv関数のパラメータ。 * / # include<pthread.h> void task_start(TASK_FUNCエントリ, void * argv) { pthread_t id; pthread_create(&id, NULL, (void *(*)(void *)) エントリ, argv); } /* TODO: ヒープの最大サイズ。 単位:バイト * / # define HEAP_MAX ( 20*1024) /* <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< TODO END <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */sysdep_api_test_demo.cという名前のデモファイルをコンパイルして実行します。結果を表示します。
成功
次のログが表示された場合、ポートされたLink SDK for CのAPI操作は期待どおりに機能します。
ライン [804]: TOTAL TEST START 行 [806]: TEST [1/5] [RANDOM_TEST] 。....................................[START] 行 [812]: TEST [1/5] [RANDOM_TEST] 。.................................... [成功] 行 [806]: TEST [2/5] [HEAP_TEST] 。....................................[START] 行 [812]: TEST [2/5] [HEAP_TEST] 。.................................... [成功] 行 [806]: TEST [3/5] [TIME_TEST] 。....................................[START] 行 [519]: 睡眠30000 msテスト 行 [499]: sleep_test_task_1 wanna sleepに入る: 10000ms 行 [499]: sleep_test_task_2 wanna sleepに入る: 10000ms Line[595]: sleep 10000ms start:[1642324352748] stop:[1642324362748] 予定 行 [812]: TEST [3/5] [TIME_TEST] 。.................................... [成功] 行 [806]: TEST [4/5] [NETWORK_TEST] 。....................................[START] 行 [372]: [NETWORK_TEST.RECV] テストの成功 行 [812]: TEST [4/5] [NETWORK_TEST] 。.................................... [成功] 行 [806]: TEST [5/5] [MUTEX_TEST] 。....................................[START] 行 [692]: mutex lock task1, unlock task2 3000 ms 行 [703]: task1値 [30-> 30] 、task2値 [30-> 60] 行 [715]: task1のロック解除、task2のロック3000 ms 行 [725]: task1値 [30-> 60] 、task2値 [60-> 60] 行 [736]: task1のロック解除、task2のロック3000 ms 行 [742]: task1値 [60 --> 90] 、task2値 [60 --> 90] 行 [812]: TEST [5/5] [MUTEX_TEST] 。.................................... [成功] ライン [816]: 総テスト成功失敗した
ファイルを最後の行まで実行できない場合、または最後の行の実行後にエラーメッセージが表示される場合は、次の表に基づいて問題をトラブルシューティングします。
エラーコード
説明
関連する API 操作
TEST_ERR_RANDOM
乱数を生成するために呼び出された関数をシステムがテストしたときに例外が発生しました。
core_sysdep_rand
TEST_ERR_MALLOC
システムがメモリアプリケーション機能をテストしたときに例外が発生しました。
core_sysdep_malloc
TEST_ERR_HEAP
システムがメモリアプリケーションとリリース機能をテストしたときに例外が発生しました。
core_sysdep_malloc
core_sysdep_free
TEST_ERR_SLEEP
システムがハイバネーションまたはシステム時間機能をテストしたときに例外が発生しました。
core_sysdep_time
core_sysdep_sleep
TEST_ERR_MUTEX
システムがmutex機能をテストしたときに例外が発生しました。
core_sysdep_mutex_init
core_sysdep_mutex_lock
core_sysdep_mutex_unlock
core_sysdep_mutex_deinit
TEST_ERR_NETWORK
システムがネットワーク機能をテストしたときに例外が発生しました。
core_sysdep_network_init
core_sysdep_network_setopt
core_sysdep_network_establish
core_sysdep_network_recv
core_sysdep_network_send
core_sysdep_network_deinit
TEST_ERR_GENERIC
不明なエラーが発生しました。
なし