Todos los productos
Search
Centro de documentos

IoT Platform:Portar Link SDK for C

Última actualización: Sep 03, 2026

Implemente las operaciones de API dependientes del sistema necesarias para portar Link SDK for C a su sistema operativo o plataforma de hardware.

Requisitos previos

Ya obtuvo el SDK. Obtain Link SDK for C.

Arquitectura

Architecture

Link SDK for C abstrae todas las interacciones con el sistema operativo y el hardware en operaciones de API dependientes del sistema. Para usar el SDK, invoque sus operaciones de API para la lógica de negocio e implemente las operaciones dependientes del sistema correspondientes a su plataforma destino.

Nota
  • En Link SDK for C V4.1.10 y versiones posteriores, TLS está integrado en el SDK. Solo necesita implementar la transmisión TCP al portar las operaciones relacionadas con la red.

  • Si actualiza desde una versión anterior, deshabilite TLS mediante la configuración del parámetro CORE_SYSDEP_MBEDTLS_ENABLED en el archivo aiot_port/*_port.c.

Acerca de las operaciones de API dependientes del sistema

  • Las operaciones de API dependientes del sistema desacoplan Link SDK for C de los sistemas operativos, lo que permite la portabilidad entre plataformas.

  • El prototipo se define en aiot_sysdep_portfile_t. Debe definir una variable global llamada g_aiot_sysdep_portfile, implementada con las operaciones del sistema operativo destino.

  • Defina todas las operaciones de API dependientes del sistema durante el proceso de portabilidad. No establezca ninguna operación como NULL; de lo contrario, se producirán errores en tiempo de ejecución.

Operaciones de API dependientes del sistema

Tipo

Operación

Descripción

Operaciones comunes

core_sysdep_malloc

Asigna memoria.

core_sysdep_free

Libera memoria.

core_sysdep_time

Devuelve la marca de tiempo actual. El SDK la usa para calcular la desviación horaria.

core_sysdep_sleep

Suspende la ejecución durante un periodo especificado en milisegundos.

core_sysdep_rand

Genera un número aleatorio.

Operaciones relacionadas con la red

core_sysdep_network_init

Crea una sesión de red.

core_sysdep_network_setopt

Configura los parámetros de la sesión.

core_sysdep_network_establish

Establece una sesión de red para conexiones MQTT o HTTP.

core_sysdep_network_recv

Lee datos de una sesión.

core_sysdep_network_send

Envía datos a través de una sesión.

core_sysdep_network_deinit

Destruye una sesión.

Operaciones relacionadas con mutex

core_sysdep_mutex_init

Crea un mutex.

core_sysdep_mutex_lock

Adquiere un bloqueo de mutex.

core_sysdep_mutex_unlock

Libera un mutex.

core_sysdep_mutex_deinit

Elimina un mutex.

Parámetros de operaciones de red

Configure los siguientes parámetros para la operación core_sysdep_network_setopt al portar Link SDK for C.

  • Parámetros de tipo de red basados en socket para conexiones TCP y UDP:

    Parámetro

    Descripción

    CORE_SYSDEP_SOCKET_TCP_CLIENT

    Cliente TCP compatible con MQTT, HTTP, HTTP2 y WebSocket. Obligatorio para estos protocolos.

    CORE_SYSDEP_SOCKET_UDP_CLIENT

    Cliente UDP. Obligatorio para conexiones CoAP.

  • Parámetros de conexión:

    Parámetro

    Descripción

    CORE_SYSDEP_NETWORK_SOCKET_TYPE

    Tipo de socket por crear.

    Tipo de dato: (core_sysdep_socket_type_t *).

    CORE_SYSDEP_NETWORK_HOST

    Nombre de dominio o dirección IP para la conexión. Los módulos de capa superior comparten la memoria.

    Tipo de dato: (char *)

    CORE_SYSDEP_NETWORK_BACKUP_IP

    Dirección IP de respaldo que se usa si falla la resolución DNS. Opcional.

    CORE_SYSDEP_NETWORK_PORT

    Número de puerto para la conexión.

    Tipo de dato: (uint16_t *)

    CORE_SYSDEP_NETWORK_CONNECT_TIMEOUT_MS

    Periodo de tiempo de espera de conexión.

    Tipo de dato: (uint32_t *)

    CORE_SYSDEP_NETWORK_MAX

    Link SDK for C no lo usa. No requiere configuración.

Código de ejemplo

El código de ejemplo usa el estándar POSIX. Al descargar Link SDK for C, establezca Device OS en POSIX Compliant en la página de personalización del SDK. El SDK proporciona código de ejemplo en portfile/aiot_port/posix_port.c.

Verificar el resultado de la portabilidad

Después de portar Link SDK for C, compruebe que las operaciones de API dependientes del sistema funcionen correctamente:

  1. Abra ./LinkSDK/demos/sysdep_api_test_demo.c y complete las siguientes configuraciones:

    1. Defina una función para crear tareas.

      Esto valida la concurrencia. Cree una función de tarea para el sistema operativo destino.

    2. Especifique el tamaño máximo del montículo (heap).

      Esto verifica que la asignación de memoria dinámica funcione correctamente para el SDK.

    Código de ejemplo

    /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 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. Compile y ejecute sysdep_api_test_demo.c.

  3. Consulte el resultado.

    • Exitoso

      Si aparecen los siguientes registros, todas las operaciones de API portadas funcionan correctamente.

      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
    • Con errores

      Si la demostración no se completa o reporta un error, solucione el problema mediante la siguiente tabla.

      Código de error

      Descripción

      Operaciones de API relacionadas

      TEST_ERR_RANDOM

      Error en la generación de números aleatorios.

      core_sysdep_rand

      TEST_ERR_MALLOC

      Error en la asignación de memoria.

      core_sysdep_malloc

      TEST_ERR_HEAP

      Error en la asignación y liberación de memoria.

      core_sysdep_malloc

      core_sysdep_free

      TEST_ERR_SLEEP

      Error en la operación de hibernación o de hora del sistema.

      core_sysdep_time

      core_sysdep_sleep

      TEST_ERR_MUTEX

      Error en la operación de mutex.

      core_sysdep_mutex_init

      core_sysdep_mutex_lock

      core_sysdep_mutex_unlock

      core_sysdep_mutex_deinit

      TEST_ERR_NETWORK

      Error en la operación de red.

      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

      Error desconocido.

      Ninguna