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

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.
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:
Buka file
./LinkSDK/demos/sysdep_api_test_demo.cdan lakukan operasi berikut:Definisikan fungsi untuk membuat tugas.
Validasi kemampuan konkurensi. Anda harus membuat tugas di sistem tujuan tempat SDK dipindahkan.
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 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/Kompilasi dan jalankan file demo bernama
sysdep_api_test_demo.c.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 SUCCESSGagal
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