Tous les produits
Search
Centre de documentation

IoT Platform:Portage du Link SDK for C

Dernière mise à jour :Aug 10, 2026

Implémentez les appels d'API système requis pour porter le Link SDK for C sur votre système d'exploitation ou votre plateforme matérielle.

Prérequis

Téléchargez le SDK. Obtenir le Link SDK for C.

Architecture

Architecture

Le Link SDK for C isole les interactions avec le système d'exploitation et le matériel via des appels d'API système. Pour utiliser le SDK, appelez ses fonctions pour la logique métier et implémentez les opérations système spécifiques à votre plateforme cible.

Remarque
  • À partir de la version 1.10 du Link SDK for C, TLS est intégré au SDK. Implémentez uniquement la transmission TCP lors du portage des opérations réseau.

  • En cas de mise à niveau depuis une version antérieure, désactivez TLS en configurant le paramètre CORE_SYSDEP_MBEDTLS_ENABLED dans le fichier aiot_port/*_port.c.

À propos des appels d'API système

  • Les appels d'API système découplent le Link SDK for C des systèmes d'exploitation, assurant ainsi sa portabilité multiplateforme.

  • Le prototype est défini dans aiot_sysdep_portfile_t. Définissez une variable globale nommée g_aiot_sysdep_portfile qui implémente les opérations du système d'exploitation cible.

  • Définissez tous les appels d'API système lors du portage. Ne laissez aucun pointeur de fonction à NULL, sous peine de provoquer des erreurs d'exécution.

Appels d'API système

Type

Operation

Description

Opérations courantes

core_sysdep_malloc

Alloue de la mémoire.

core_sysdep_free

Libère de la mémoire.

core_sysdep_time

Renvoie l'horodatage actuel. Le SDK l'utilise pour calculer le décalage temporel.

core_sysdep_sleep

Suspend l'exécution pendant une durée spécifiée en millisecondes.

core_sysdep_rand

Génère un nombre aléatoire.

Opérations liées au réseau

core_sysdep_network_init

Crée une session réseau.

core_sysdep_network_setopt

Configure les paramètres de session.

core_sysdep_network_establish

Établit une session réseau pour les connexions MQTT ou HTTP.

core_sysdep_network_recv

Lit les données d'une session.

core_sysdep_network_send

Envoie des données via une session.

core_sysdep_network_deinit

Détruit une session.

Opérations liées aux mutex

core_sysdep_mutex_init

Crée un mutex.

core_sysdep_mutex_lock

Verrouille un mutex.

core_sysdep_mutex_unlock

Déverrouille un mutex.

core_sysdep_mutex_deinit

Supprime un mutex.

Paramètres des opérations réseau

Configurez les paramètres suivants pour l'appel core_sysdep_network_setopt lors du portage du Link SDK for C.

  • Paramètres de type de socket pour les connexions TCP et UDP :

    Parameter

    Description

    CORE_SYSDEP_SOCKET_TCP_CLIENT

    Client TCP prenant en charge MQTT, HTTP, HTTP2 et WebSocket. Requis pour ces protocoles.

    CORE_SYSDEP_SOCKET_UDP_CLIENT

    Client UDP. Requis pour les connexions CoAP.

  • Paramètres de connexion :

    Parameter

    Description

    CORE_SYSDEP_NETWORK_SOCKET_TYPE

    Type de socket à créer.

    Type de données : (core_sysdep_socket_type_t *).

    CORE_SYSDEP_NETWORK_HOST

    Nom de domaine ou adresse IP pour la connexion. La mémoire est partagée par les modules de couche supérieure.

    Type de données : (char *)

    CORE_SYSDEP_NETWORK_BACKUP_IP

    Adresse IP de secours utilisée en cas d'échec de la résolution DNS. Facultatif.

    CORE_SYSDEP_NETWORK_PORT

    Numéro de port pour la connexion.

    Type de données : (uint16_t *)

    CORE_SYSDEP_NETWORK_CONNECT_TIMEOUT_MS

    Délai d'expiration de la connexion.

    Type de données : (uint32_t *)

    CORE_SYSDEP_NETWORK_MAX

    Non utilisé par le Link SDK for C. Aucune configuration n'est nécessaire.

Exemple de code

L'exemple de code utilise la norme POSIX. Lors du téléchargement du Link SDK for C, sélectionnez POSIX Compliant comme système d'exploitation (Device OS) sur la page de personnalisation du SDK. Le SDK fournit un exemple de code dans portfile/aiot_port/posix_port.c.

Vérifier le résultat du portage

Après avoir porté le Link SDK for C, vérifiez que les appels d'API système fonctionnent correctement :

  1. Ouvrez ./LinkSDK/demos/sysdep_api_test_demo.c et effectuez les configurations suivantes :

    1. Définissez une fonction de création de tâches.

      Cela permet de valider la gestion de la concurrence. Créez une fonction de tâche adaptée au système d'exploitation cible.

    2. Spécifiez la taille maximale du tas (heap).

      Cela permet de vérifier que l'allocation mémoire fonctionne correctement pour le SDK.

    Exemple de code

    /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TODO START >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
    /*
     * TODO: Call the function to create and execute a task. The function automatically exists after the task ends.
     * @param[in] entry  The beginning of the function.
     * @param[in] argv   The parameters of the function.
     */
    #include<pthread.h>
    void task_start(TASK_FUNC entry,void* argv)
    {
        pthread_t id;
        pthread_create(&id, NULL, (void*(*)(void *))entry, argv);
    }
    /*TODO: The maximum size of a heap. Unit: bytes. */
    #define HEAP_MAX    ( 20 * 1024 )
    /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< TODO END <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  2. Compilez et exécutez sysdep_api_test_demo.c.

  3. Consultez le résultat.

    • Réussite

      Si les journaux suivants apparaissent, toutes les opérations d'API portées fonctionnent correctement.

      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
    • Échec

      Si la démonstration échoue ou signale une erreur, identifiez le problème à l'aide du tableau suivant.

      Code d'erreur

      Description

      Appels d'API associés

      TEST_ERR_RANDOM

      Échec de la génération de nombres aléatoires.

      core_sysdep_rand

      TEST_ERR_MALLOC

      Échec de l'allocation de mémoire.

      core_sysdep_malloc

      TEST_ERR_HEAP

      Échec de l'allocation ou de la libération de mémoire.

      core_sysdep_malloc

      core_sysdep_free

      TEST_ERR_SLEEP

      Échec de la mise en veille ou de l'opération temporelle.

      core_sysdep_time

      core_sysdep_sleep

      TEST_ERR_MUTEX

      Échec de l'opération de mutex.

      core_sysdep_mutex_init

      core_sysdep_mutex_lock

      core_sysdep_mutex_unlock

      core_sysdep_mutex_deinit

      TEST_ERR_NETWORK

      Échec de l'opération réseau.

      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

      Erreur inconnue.

      Aucune