Compartir vía


Tutorial: Compilación de una aplicación con respuesta en tiempo real

Importante

Esta es la documentación de Azure Sphere (heredado). Azure Sphere (heredado) se retira el 27 de septiembre de 2027 y los usuarios deben migrar a Azure Sphere (integrado) en este momento. Use el selector de versiones situado encima de la TOC para ver la documentación de Azure Sphere (integrado).

En este tutorial se muestra cómo crear una aplicación de ejemplo para los núcleos en tiempo real en un dispositivo de Azure Sphere. Consulte Introducción a las aplicaciones de Azure Sphere para obtener información básica sobre las aplicaciones compatibles en tiempo real.

En este tutorial, aprenderá a:

  • Descarga de una aplicación de ejemplo
  • Instalación de la cadena de herramientas de GNU Arm
  • Configuración del hardware para mostrar la salida
  • Habilitación del desarrollo y la depuración
  • Iniciar un emulador de terminal para ver la salida
  • Compilación, ejecución y depuración de una aplicación con respuesta en tiempo real

Importante

En estas instrucciones se supone que está usando hardware que sigue el hardware de diseño de la placa de referencia (RDB) MT3620, como el kit de desarrollo MT3620 de Seeed Studios. Si usa otro hardware de Azure Sphere, consulte la documentación del fabricante para averiguar si el UART está expuesto y cómo acceder a él. Es posible que deba configurar el hardware para mostrar el resultado de forma diferente y actualizar el código de ejemplo y el campo "Uarts" del archivo app_manifest.json para usar un UART diferente.

Requisitos previos

Descarga de la aplicación de ejemplo

Puede descargar la aplicación HelloWorld de la siguiente manera:

  1. Apunte el explorador al Explorador de ejemplos de Microsoft.
  2. Escriba "Azure Sphere" en el cuadro De búsqueda.
  3. Seleccione Azure Sphere - Hola mundo en los resultados de la búsqueda.
  4. Seleccione Descargar ZIP.
  5. Abra el archivo descargado y extraiga en un directorio local.

Instale la cadena de herramientas insertada de GNU Arm para Windows.

Puede descargar e instalar gnu Arm Embedded Toolchain desde el sitio web para desarrolladores de Arm. O bien, puede usar artefactos vcpkg para instalar y configurar automáticamente el entorno de desarrollo.

  • Visual Studio 2022: si usa Visual Studio 2022, instale la cadena de herramientas de GNU Arm Embedded (arm-none-eabi) desde el sitio web para desarrolladores de Arm.
  • Visual Studio 2019: la cadena de herramientas se instala automáticamente con la extensión de Azure Sphere para Visual Studio en Visual Studio 2019. Si usa Visual Studio 2019, vaya a Configuración del hardware para mostrar la salida. Sin embargo, si instaló manualmente la cadena de herramientas insertada de GNU Arm, Visual Studio usará la versión que instaló.

Para instalar la cadena de herramientas, en el sitio web para desarrolladores de Arm, busque la cadena de herramientas insertada de ARM Arm (arm-none-eabi) que incluye el compilador para el procesador ARM Cortex-M4. Siga las instrucciones para descargar e instalar el compilador para la plataforma del sistema operativo.

De forma predeterminada, Visual Studio Code busca la cadena de herramientas y debe encontrar la versión instalada. Si encuentra problemas de compilación relacionados con la cadena de herramientas, escriba la ruta de acceso de la siguiente manera:

  1. Seleccione Extensiones>de configuración de preferencias>de>archivo>de Azure Sphere.
  2. Escriba la ruta de instalación de la cadena de herramientas insertada de ARM de GNU en la configuración de Ruta de acceso de Gnu de Azure Sphere: Arm.

Para instalar la cadena de herramientas, en el sitio web para desarrolladores de Arm, busque la cadena de herramientas insertada de ARM Arm (arm-none-eabi) que incluye el compilador para el procesador ARM Cortex-M4. Siga las instrucciones para descargar e instalar el compilador para la plataforma del sistema operativo.

Configuración del hardware para mostrar la salida

Actualmente, cada núcleo en tiempo real es compatible con un UART solo TX. Las aplicaciones con respuesta en tiempo real pueden usar este UART para enviar la salida del registro desde el dispositivo. Durante el desarrollo y la depuración de las aplicaciones, por lo general necesitará una manera de leer y mostrar la salida. El ejemplo HelloWorld_RTApp_MT3620_BareMetal muestra cómo una aplicación puede escribir en el UART.

Use un adaptador de USB a serie como FTDI Friend para conectar el UART del núcleo en tiempo real a un puerto USB de la máquina. También necesitará un emulador de terminal para establecer una conexión serie con la configuración del terminal 115200-8-N-1 (115200 bps, 8 bits, sin bits de paridad, un bit de detención) para mostrar la salida.

Haga lo siguiente para configurar el hardware de forma que muestre la salida de una aplicación con capacidad en tiempo real. Hay que consultar la documentación del fabricante del hardware para saber dónde están las ubicaciones de las conexiones. Si usa hardware que sigue el diseño de placa de referencia MT3620 (como el kit de desarrollo MT3620 de Seeed Studios), consulte los encabezados de la interfaz del diseño de placa de referencia como ayuda para saber dónde están las ubicaciones de las conexiones.

  1. Conecte la toma GND del adaptador de USB a serie a la toma GND del kit de desarrollo. En el hardware MT3620, GND es el encabezado 3, conexión 2.
  2. Conecte la toma RX del adaptador de USB a serie a la toma IOM4-0 TX del kit de desarrollo. En el hardware de diseño de placa de referencia MT3620, la toma IOM4-0 TX es el encabezado 3, conexión 6.
  3. Conecte el adaptador USB a serie a un puerto USB libre en la máquina de desarrollo y determine a qué puerto está conectado el dispositivo serie. En Windows, inicie Administrador de dispositivos, seleccione Ver>dispositivos por contenedor y busque "UART USB". Por ejemplo, FT232R USB UART indica el adaptador de amigo FTDI.
  4. Inicie un programa del emulador de terminal y abra un terminal 115200-8-N-1 en el puerto COM usado por el adaptador. Consulte la documentación del emulador de terminal para averiguar cómo especificar el puerto y la velocidad.

Configuración del hardware para mostrar la salida

Actualmente, cada núcleo en tiempo real es compatible con un UART solo TX. Las aplicaciones con respuesta en tiempo real pueden usar este UART para enviar la salida del registro desde el dispositivo. Durante el desarrollo y la depuración de las aplicaciones, por lo general necesitará una manera de leer y mostrar la salida. El ejemplo HelloWorld_RTApp_MT3620_BareMetal muestra cómo una aplicación puede escribir en el UART.

Use un adaptador de USB a serie como FTDI Friend para conectar el UART del núcleo en tiempo real a un puerto USB de la máquina. También necesitará un emulador de terminal para establecer una conexión serie con la configuración del terminal 115200-8-N-1 (115200 bps, 8 bits, sin bits de paridad, un bit de detención) para mostrar la salida.

Haga lo siguiente para configurar el hardware de forma que muestre la salida de una aplicación con capacidad en tiempo real. Hay que consultar la documentación del fabricante del hardware para saber dónde están las ubicaciones de las conexiones. Si usa hardware que sigue el diseño de placa de referencia MT3620 (como el kit de desarrollo MT3620 de Seeed Studios), consulte los encabezados de la interfaz del diseño de placa de referencia como ayuda para saber dónde están las ubicaciones de las conexiones.

  1. Conecte la toma GND del adaptador de USB a serie a la toma GND del kit de desarrollo. En el hardware MT3620, GND es el encabezado 3, conexión 2.

  2. Conecte la toma RX del adaptador de USB a serie a la toma IOM4-0 TX del kit de desarrollo. En el hardware de diseño de placa de referencia MT3620, la toma IOM4-0 TX es el encabezado 3, conexión 6.

  3. Conecte el adaptador USB a serie a un puerto USB libre en la máquina de desarrollo y determine a qué puerto está conectado el dispositivo serie.

    • En Windows, inicie Administrador de dispositivos, seleccione Ver>dispositivos por contenedor y busque "UART USB". Por ejemplo, FT232R USB UART indica el adaptador de amigo FTDI.

    • En Linux, escriba el siguiente comando:

      dmesg | grep ttyUSB
      

      El puerto se llamará ttyUSBn, donde n indica el número de puerto. Si el dmesg comando muestra varios puertos USB, el que está conectado al normalmente el último notificado como conectado. Por ejemplo, en lo siguiente, usaría ttyUSB4:

    ~$ dmesg | grep ttyUSB
    [  144.564350] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB0
    [  144.564768] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB1
    [  144.565118] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB2
    [  144.565593] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB3
    [  144.570429] usb 1-1.1.3: FTDI USB Serial Device converter now attached to ttyUSB4
    [  254.171871] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
    
  4. Inicie un programa del emulador de terminal y abra un terminal 115200-8-N-1 en el puerto COM usado por el adaptador. Consulte la documentación del emulador de terminal para averiguar cómo especificar el puerto y la velocidad.

Habilitación del desarrollo y la depuración

Antes de poder compilar una aplicación de ejemplo en el dispositivo de Azure Sphere o desarrollar nuevas aplicaciones para él, debe habilitar el desarrollo y la depuración. De forma predeterminada, los dispositivos de Azure Sphere están "bloqueados"; es decir, no permiten la carga de las aplicaciones en desarrollo desde un equipo, y no permiten la depuración de aplicaciones. La preparación del dispositivo para la depuración elimina esta restricción, carga el software necesario para depurar y desbloquea las funcionalidades del dispositivo, tal y como se describe en Funcionalidades del dispositivo y comunicación.

Para depurar en los núcleos en tiempo real, use el comando azsphere device enable-development. Este comando configura el dispositivo para que acepte aplicaciones de un equipo para depurar y asigne el dispositivo al grupo de dispositivos desarrollo, que no permite actualizaciones de aplicaciones en la nube. Durante el desarrollo y la depuración de aplicaciones, debe dejar el dispositivo en este grupo para que las actualizaciones de las aplicaciones en la nube no sobrescriban la aplicación en desarrollo.

En Windows, debe agregar el --enable-rt-core-debugging parámetro , que carga los servidores de depuración y los controladores necesarios para cada tipo de núcleo en el dispositivo.

  1. Inicie sesión en Azure Sphere si aún no lo ha hecho:

    azsphere login
    
  2. Abra una interfaz de línea de comandos mediante PowerShell o el símbolo del sistema de Windows con privilegios de administrador. El --enable-rt-core-debugging parámetro requiere privilegios de administrador porque instala controladores USB para el depurador.

  3. Escriba el comando siguiente:

    azsphere device enable-development --enable-rt-core-debugging
    
  4. Cierre la ventana cuando el comando termine, porque ya no se necesitan privilegios de administrador. Como procedimiento recomendado, debe utilizar siempre el privilegio más bajo que puede realizar una tarea.

Si se produce un error en el comando azsphere device enable-development , consulte Solución de problemas de Azure Sphere para obtener ayuda.

Compilación y ejecución de la aplicación HelloWorld RTApp con Visual Studio

  1. Inicie Visual Studio. Seleccione Abrir una carpeta local, vaya a la carpeta donde extrajo el archivo Azure_Sphere___Hello_World.zip descargado y, a continuación, seleccione la carpeta HelloWorld_RTApp_MT3620_Baremetal.

  2. Si no usa un RDB mt3620, actualice el archivo de app_manifest.json y el código de ejemplo para especificar el UART correcto, por ejemplo, ISU1.

  3. Si la generación de CMake no se inicia automáticamente, seleccione el archivo CMakeLists.txt.

  4. En la ventana Salida de Visual Studio, la salida de CMake debe mostrar los mensajes CMake generation started. y CMake generation finished.

  5. Seleccione Compilar>todo. Si el menú no está presente, abra Explorador de soluciones, haga clic con el botón derecho en el archivo CMakeLists.txt y seleccione Compilar. La ubicación de salida de la aplicación HelloWorld_RTApp_MT3620_Baremetal aparece en la ventana Salida .

  6. En el menú Seleccionar elemento de inicio, seleccione HelloWorld_RTApp_MT3620_Baremetal (RTCore).

  7. Pulse F5 para implementar la aplicación.

  8. El emulador de terminal conectado debe mostrar la salida del programa HelloWorld_RTApp_MT3620_Baremetal. El programa envía las siguientes palabras a intervalos de un segundo:

    Tick

    Tock

  9. Use el depurador para establecer puntos de interrupción, inspeccionar variables y probar otras tareas de depuración.

Compilación y ejecución de la aplicación HelloWorld RTApp con Visual Studio Code

  1. En Visual Studio Code, abra la carpeta HelloWorld_RTApp_MT3620_BareMetal en la carpeta donde extrajo el archivo Azure_Sphere___Hello_World.zip descargado. Si se le pide que seleccione un kit, elija "No usar ningún kit".

  2. Si no usa ese tipo de hardware, actualice el archivo app_manifest.json y el código de ejemplo para especificar el transmisor-receptor asíncrono universal correcto (por ejemplo, ISU1).

  3. Presione F5 para iniciar el depurador. Si el proyecto no se ha compilado previamente, o si los archivos han cambiado y es necesario recompilar, Visual Studio Code compilará el proyecto antes de que se inicie la depuración.

  4. La ventana de salida de Azure Sphere debe indicar que la imagen se está implementando, así como las rutas de acceso al SDK y al compilador.

  5. El emulador de terminal conectado debe mostrar la salida del programa HelloWorld_RTApp_MT3620_Baremetal. El programa envía las siguientes palabras a intervalos de un segundo:

    Tick

    Tock

  6. Use las características de depuración de Visual Studio Code para establecer puntos de interrupción, inspeccionar variables y probar otras tareas de depuración.

Solución de problemas

Es posible que la aplicación comience a ejecutarse antes de que OpenOCD realice una conexión. Como resultado, es posible que se pierdan los puntos de interrupción establecidos antes en el código. Una sencilla solución para esta situación es retrasar el inicio de la aplicación hasta que se conecte OpenOCD.

  1. Inserte el siguiente código al principio del punto de entrada de la aplicación RTCoreMain. Esto hará que la aplicación entre en un bucle while y permanezca en él hasta que la variable f se establezca en true.

     volatile bool f = false;
     while (!f) {
        // empty.
     }
    
  2. Presione F5 para iniciar la aplicación con depuración (F5) e interrumpir la ejecución.

  3. En el panel Variables locales de depuración, cambie el valor de de f cero a uno.

  4. Recorra el código como de costumbre.

Compilación del ejemplo

  1. Abra una interfaz de línea de comandos mediante PowerShell, el símbolo del sistema de Windows o el shell de comandos de Linux. Vaya al directorio de compilación del proyecto.

  2. Desde el directorio de compilación del proyecto, en el símbolo del sistema, ejecute CMake con los parámetros siguientes:

    cmake --preset <preset-name> <source-path>
    
    • --preset <preset-name>

      Nombre preestablecido de configuración de compilación tal como se define en CMakePresets.json.

    • --build <cmake-path>

      Directorio binario que contiene la memoria caché de CMake. Por ejemplo, si ejecuta CMake en un ejemplo de Azure Sphere, el comando de compilación sería cmake --build out/ARM-Debug.

    • <source-path>

      Ruta de acceso del directorio que contiene los archivos de origen de la aplicación de ejemplo. En el ejemplo, el repositorio de ejemplos de Azure Sphere se descargó en un directorio denominado AzSphere.

      Los parámetros de CMake se separan mediante espacios. El carácter de continuación de línea (^ para la línea de comandos de Windows, \ para la línea de comandos de Linux o " para PowerShell) se puede usar para mejorar la legibilidad, pero no es necesario.

    En los ejemplos siguientes se muestran los comandos de CMake para una RTApp. Donde se indica, reemplace <la ruta> de acceso del archivo por la ruta de instalación de la cadena de herramientas insertada de GNU Arm en el sistema.

    Símbolo del sistema de Windows

    cmake ^
    --preset "ARM-Debug" ^
    "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"
    

    Windows PowerShell

    cmake `
    --preset "ARM-Debug" `
    "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"
    
  3. Ejecute Ninja para compilar la aplicación y crear el archivo de paquete de imagen:

    ninja -C out/ARM-Debug
    

    Ninja coloca la aplicación resultante y los archivos .imagepackage en el directorio especificado.

    También puede invocar Ninja a través de CMake con el siguiente comando:

    cmake --build out/<binary-dir>
    

    Establezca <binary-dir> en el directorio binario que contiene la memoria caché de CMake. Por ejemplo, si ejecuta CMake en un ejemplo de Azure Sphere, el comando de compilación sería cmake --build out/ARM-Debug.

Para solucionar problemas, especialmente después de realizar cambios en los comandos de CMake, elimine la compilación completa e inténtelo de nuevo.

Ejecución del ejemplo

  1. Elimine las aplicaciones que ya están implementadas en el dispositivo:

    azsphere device sideload delete
    
  2. Desde el directorio del proyecto, en el símbolo del sistema, cargue el paquete de imágenes que ninja creó:

    azsphere device sideload deploy --image-package <path-to-imagepackage>
    
  3. Obtención del identificador del componente para la imagen:

    azsphere image-package show --image-package <path-to-imagepackage>
    

    El comando devuelve todos los metadatos del paquete de imágenes. El identificador de componente de la aplicación aparece en la sección Identidad del tipo de imagen de aplicación. Por ejemplo:

    Image package metadata:
    Section: Identity
    Image Type:           Application
    Component ID:         <component id>
    Image ID:             <image id>
    

    Puede usar los siguientes comandos para detener, iniciar y obtener el estado de la aplicación:

    azsphere device app stop --component-id <component id>
    
    azsphere device app start --component-id <component id>
    
    azsphere device app show-status --component-id <component id>
    

Depuración del ejemplo

  1. Detenga la aplicación si se está ejecutando.

    azsphere device app stop --component-id <component id>
    
  2. Vuelva a iniciar la aplicación para la depuración.

    azsphere device app start --component-id <component id>
    

    Este comando devuelve el núcleo en el que se ejecuta la aplicación.

    <component id>
    App state   : running
    Core        : Real-time 0
    
  3. Vaya a la carpeta Openocd para el sysroot con que se compiló la aplicación. Los sysroot se instalan en la carpeta de instalación del SDK de Azure Sphere. Por ejemplo, en Windows, la carpeta se instala de manera predeterminada en C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd y en Linux, en /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux.

  4. Ejecute openocd como se muestra en el ejemplo siguiente. En el ejemplo se da por supuesto que la aplicación se ejecuta en el núcleo 0. Si la aplicación se ejecuta en el núcleo 1, reemplace "targets io0" por "targets io1".

    openocd -f mt3620-rdb-ftdi.cfg -f mt3620-io0.cfg -c "gdb_memory_map disable" -c "gdb_breakpoint_override hard" -c init -c "targets io0" -c halt -c "targets"
    
  5. Vaya a la carpeta que contiene el archivo .out de la aplicación e inicie arm-none-eabi-gdb, que forma parte de la cadena de herramientas insertada de GNU Arm:

    Símbolo del sistema de Windows

    "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" HelloWorld_RTApp_MT3620_BareMetal.out
    

    Windows PowerShell

    & "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" HelloWorld_RTApp_MT3620_BareMetal.out
    
  6. El servidor OpenOCD proporciona una interfaz de servidor GDB en :4444. Establezca el destino para la depuración.

    target remote :4444

  7. Ahora puede ejecutar comandos gdb.

  8. El emulador de terminal conectado debe mostrar la salida de la aplicación.

Uso de aplicaciones de asociados

Cuando se carga una aplicación en el dispositivo de Azure Sphere, las herramientas de implementación de Azure Sphere eliminan de forma predeterminada todas las aplicaciones existentes. Para evitar que esto suceda al desarrollar aplicaciones que se comunican entre sí, debe marcar las aplicaciones como asociados. Al implementar una de las aplicaciones, sus asociados no se eliminarán. Consulte Marcado de aplicaciones como asociadas para más información.

Pasos siguientes