全部产品
Search
文档中心

IoT Platform:Contoh cara mem-porting Link SDK untuk C

更新时间:Jul 02, 2025

Topik ini menjelaskan operasi API terkait sistem yang perlu didefinisikan saat Anda mem-porting Link SDK untuk C.

Prasyarat

SDK telah diperoleh. Untuk informasi lebih lanjut, lihat Memperoleh Link SDK untuk C.

Arsitektur

Kerangka keseluruhan

Link SDK untuk C mendukung berbagai sistem operasi atau platform perangkat keras. SDK ini mengenkapsulasi operasi API terkait sistem untuk berinteraksi dengan sistem operasi atau platform perangkat keras. Saat mengembangkan produk, Anda harus memanggil operasi API dalam SDK untuk mengimplementasikan logika bisnis dan menulis kode untuk mendefinisikan operasi API terkait sistem.

Catatan
  • Pada Link SDK untuk C V4.1.10 dan versi berikutnya, Transport Layer Security (TLS) diimplementasikan dalam SDK. Saat mem-porting operasi API terkait jaringan, Anda hanya perlu mengimplementasikan transmisi TCP.

  • Jika Anda meningkatkan SDK dari versi sebelumnya ke versi terbaru, nonaktifkan TLS dengan mengonfigurasi parameter CORE_SYSDEP_MBEDTLS_ENABLED dalam file aiot_port/*_port.c.

Deskripsi operasi API terkait sistem

  • Operasi API terkait sistem memisahkan Link SDK untuk C dari sistem operasi. Anda dapat memanggil operasi tersebut untuk berinteraksi dengan berbagai sistem operasi.

  • Definisi prototipe operasi API terkait sistem adalah aiot_sysdep_portfile_t. Anda harus mendefinisikan variabel global bernama g_aiot_sysdep_portfile. Variabel global ini diimplementasikan oleh operasi API dari sistem operasi tujuan untuk mem-porting SDK.

  • Operasi umum dan operasi terkait mutex mudah digunakan. Topik ini tidak menjelaskan cara memanggil operasi tersebut. Saat mem-porting SDK, Anda harus mendefinisikan semua operasi API terkait sistem. Menentukan NULL saat mendefinisikan operasi akan menyebabkan kesalahan.

Daftar operasi API terkait sistem

Tipe

Operasi

Deskripsi

Operasi umum

core_sysdep_malloc

Mengajukan alokasi memori.

core_sysdep_free

Melepaskan memori.

core_sysdep_time

Mendapatkan timestamp saat ini. Link SDK digunakan untuk menghitung deviasi.

core_sysdep_sleep

Menentukan waktu tidur, dalam milidetik.

core_sysdep_rand

Menghasilkan angka acak.

Operasi terkait jaringan

core_sysdep_network_init

Membuat sesi.

core_sysdep_network_setopt

Mengonfigurasi parameter untuk sesi.

core_sysdep_network_establish

Membangun sesi di mana koneksi Message Queuing Telemetry Transport (MQTT) atau HTTP dapat dibuat.

core_sysdep_network_recv

Membaca data dari sesi tertentu.

core_sysdep_network_send

Mengirim data menggunakan sesi tertentu.

core_sysdep_network_deinit

Menghapus sesi.

Operasi terkait mutex

core_sysdep_mutex_init

Membuat mutex.

core_sysdep_mutex_lock

Mengajukan mutex.

core_sysdep_mutex_unlock

Melepaskan mutex.

core_sysdep_mutex_deinit

Menghapus mutex.

Konfigurasikan parameter untuk operasi jaringan

Saat mem-porting Link SDK untuk C, Anda harus mengonfigurasi parameter untuk operasi core_sysdep_network_setopt.

  • Tabel berikut menjelaskan parameter yang menentukan tipe jaringan berbasis socket. Anda dapat mengonfigurasi parameter untuk membuat koneksi TCP dan UDP.

    Parameter

    Deskripsi

    CORE_SYSDEP_SOCKET_TCP_CLIENT

    Klien TCP yang mendukung protokol MQTT, HTTP, HTTP2, dan WebSocket. Jika Anda ingin menggunakan fitur-fitur di atas, Anda harus mengonfigurasi parameter ini.

    CORE_SYSDEP_SOCKET_UDP_CLIENT

    Klien UDP. Jika Anda ingin membuat koneksi CoAP, Anda harus mengonfigurasi parameter ini.

  • Tabel berikut menjelaskan parameter yang diperlukan untuk membuat koneksi.

    Parameter

    Deskripsi

    CORE_SYSDEP_NETWORK_SOCKET_TYPE

    Tipe socket yang ingin Anda buat.

    Tipe data: (core_sysdep_socket_type_t *).

    CORE_SYSDEP_NETWORK_HOST

    Nama domain atau alamat IP yang digunakan untuk membuat koneksi. Memori ini dibagikan oleh modul lapisan atas.

    Tipe data: (char *)

    CORE_SYSDEP_NETWORK_BACKUP_IP

    Alamat IP cadangan yang digunakan jika resolusi DNS gagal. Anda tidak perlu menentukan parameter ini.

    CORE_SYSDEP_NETWORK_PORT

    Nomor port yang digunakan untuk membuat koneksi.

    Tipe data: (uint16_t *)

    CORE_SYSDEP_NETWORK_CONNECT_TIMEOUT_MS

    Periode timeout untuk membuat koneksi.

    Tipe data: (uint32_t *)

    CORE_SYSDEP_NETWORK_MAX

    Parameter ini tidak digunakan oleh Link SDK untuk C. Anda tidak perlu mengonfigurasi parameter ini.

Kode contoh

Kode contoh didasarkan pada standar POSIX. Saat mengunduh Link SDK untuk C, atur Device OS ke POSIX Compliant di halaman penyesuaian SDK. Link SDK untuk C menyediakan kode contoh dalam file portfile/aiot_port/posix_port.c. Kode contoh menunjukkan cara mem-porting SDK berdasarkan standar POSIX.

Verifikasi hasil

Setelah mem-porting Link SDK untuk C, lakukan langkah-langkah berikut untuk memeriksa apakah operasi API Link SDK untuk C bekerja seperti yang diharapkan:

  1. Buka file ./LinkSDK/demos/sysdep_api_test_demo.c dan lakukan operasi berikut:

    1. Definisikan fungsi untuk membuat tugas.

      Validasi kemampuan konkurensi. Anda harus membuat tugas di sistem tujuan tempat SDK dipindahkan.

    2. Tentukan ukuran maksimum heap.

      Item ini digunakan untuk memeriksa apakah heap dapat digunakan oleh SDK seperti yang diharapkan.

    Kode Contoh

    /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TODO MULAI >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
    /*
     * TODO: Panggil fungsi untuk membuat dan menjalankan tugas. Fungsi ini otomatis berakhir setelah tugas selesai.
     * @param[in] entry  Awal dari fungsi.
     * @param[in] argv   Parameter dari fungsi.
     */
    #include<pthread.h>
    void task_start(TASK_FUNC entry,void* argv)
    {
        pthread_t id;
        pthread_create(&id, NULL, (void*(*)(void *))entry, argv);
    }
    /*TODO: Ukuran maksimum heap. Satuan: byte. */
    #define HEAP_MAX    ( 20 * 1024 )
    /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< TODO AKHIR <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  2. Kompilasi dan jalankan file demo bernama sysdep_api_test_demo.c.

  3. Lihat hasilnya.

    • Berhasil

      Jika log berikut muncul, operasi API Link SDK untuk C yang dipindahkan bekerja seperti yang diharapkan.

      Line[804]: TOTAL TEST START
      Line[806]: TEST [1/5] [RANDOM_TEST ] .....................................[START]
      Line[812]: TEST [1/5] [RANDOM_TEST ] .....................................[SUCCESS]
      Line[806]: TEST [2/5] [HEAP_TEST   ] .....................................[START]
      Line[812]: TEST [2/5] [HEAP_TEST   ] .....................................[SUCCESS]
      Line[806]: TEST [3/5] [TIME_TEST   ] .....................................[START]
      Line[519]: sleep 30000 ms test
      Line[499]: sleep_test_task_1 enter wanna sleep: 10000ms
      Line[499]: sleep_test_task_2 enter wanna sleep: 10000ms
      Line[595]: sleep 10000ms start:[1642324352748] stop:[1642324362748] expected 
      Line[812]: TEST [3/5] [TIME_TEST   ] .....................................[SUCCESS]
      Line[806]: TEST [4/5] [NETWORK_TEST] .....................................[START]
      Line[372]: [NETWORK_TEST.RECV] test success
      Line[812]: TEST [4/5] [NETWORK_TEST] .....................................[SUCCESS]
      Line[806]: TEST [5/5] [MUTEX_TEST  ] .....................................[START]
      Line[692]: mutex lock task1, unlock task2 3000 ms
      Line[703]: task1 value [30 --> 30], task2 value [30 --> 60] 
      Line[715]: unlock task1, lock task2 3000 ms
      Line[725]: task1 value [30 --> 60], task2 value [60 --> 60] 
      Line[736]: unlock task1, lock task2 3000 ms
      Line[742]: task1 value [60 --> 90], task2 value [60 --> 90]
      Line[812]: TEST [5/5] [MUTEX_TEST  ] .....................................[SUCCESS]
      Line[816]: TOTAL TEST SUCCESS
    • Gagal

      Jika file tidak dapat dijalankan hingga baris terakhir atau pesan kesalahan muncul setelah baris terakhir dijalankan, perbaiki masalah berdasarkan tabel berikut.

      Kode kesalahan

      Deskripsi

      API operasi terkait

      TEST_ERR_RANDOM

      Penyimpangan terjadi saat sistem menguji fungsi yang dipanggil untuk menghasilkan angka acak.

      core_sysdep_rand

      TEST_ERR_MALLOC

      Penyimpangan terjadi saat sistem menguji fitur aplikasi memori.

      core_sysdep_malloc

      TEST_ERR_HEAP

      Penyimpangan terjadi saat sistem menguji fitur aplikasi dan pelepasan memori.

      core_sysdep_malloc

      core_sysdep_free

      TEST_ERR_SLEEP

      Penyimpangan terjadi saat sistem menguji fitur hibernasi atau waktu sistem.

      core_sysdep_time

      core_sysdep_sleep

      TEST_ERR_MUTEX

      Penyimpangan terjadi saat sistem menguji fitur mutex.

      core_sysdep_mutex_init

      core_sysdep_mutex_lock

      core_sysdep_mutex_unlock

      core_sysdep_mutex_deinit

      TEST_ERR_NETWORK

      Penyimpangan terjadi saat sistem menguji fitur jaringan.

      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

      Kesalahan tidak diketahui terjadi.

      Tidak ada