Compartir a través de


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).

Puede usar Visual Studio, Visual Studio Code o la línea de comandos (CLI) para desarrollar y depurar aplicaciones con respuesta en tiempo real (RTApp) de la misma manera que las aplicaciones de alto nivel.

Requisitos previos

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.

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, el símbolo del sistema de Windows o el shell de comandos de Linux 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 con el siguiente mensaje de error, consulte Solución de problemas de Azure Sphere para obtener ayuda.

error: The device did not accept the device capability configuration. Please check the Azure Sphere OS on your device is up-to-date using 'azsphere device show-deployment-status'.

Compilación de rtApp con Visual Studio Code

Para compilar una aplicación RTApp:

  1. En Visual Studio Code, abra la carpeta HelloWorld_RTApp_MT3620_BareMetal en el clon del repositorio de ejemplos de Azure Sphere. Si se le pide que seleccione un kit, elija "No usar ningún kit".

  2. 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.

  3. El emulador de terminal conectado debe mostrar la salida de la aplicación. El programa envía las siguientes palabras a intervalos de un segundo:

    Tick

    Tock

    Nota:

    Visual Studio Code proporciona IntelliSense, pero este no se actualizará automáticamente cuando modifique el archivo CMakeLists.txt. Debe ejecutar el comando CMake: Eliminar caché y volver a configurar para actualizar IntelliSense. La vista de destinos de CMake se puede encontrar en la vista de la extensión CMake de la barra izquierda.

Compilación de rtApp con Visual Studio

Para compilar una aplicación RTApp:

  1. En Visual Studio, seleccione Archivo>CMake y vaya a la carpeta que contiene el ejemplo.

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

  3. En Visual Studio, Ver>salida>Mostrar salida de: la salida de CMake debe mostrar los mensajes y CMake generation started.CMake generation finished.

  4. En el menú CMake (si está presente), 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 de Azure Sphere aparece en la ventana Salida .

  5. Presione F5 para implementar la aplicación.

  6. El emulador de terminal conectado debe mostrar la salida de la aplicación. El programa envía las siguientes palabras a intervalos de un segundo:

    Tick

    Tock

    Nota:

    • Visual Studio proporciona Intellisense para las aplicaciones RTApp de Azure Sphere mediante la recopilación de los datos de su caché de CMake. Visual Studio actualiza la caché cada vez que cambie el archivo CMakeLists.txt o CMakeSettings.json en la RTApp.

    • De forma predeterminada, Visual Studio utiliza la vista de carpetas. Si prefiere una vista lógica del proyecto de CMake, puede cambiar a la vista de destinos de CMake. En el Explorador de soluciones, seleccione el icono de botón de alternancia de carpetas:

      Cambio entre las vistas de solución y carpeta

      En el menú desplegable, seleccione Vista de destinos de CMake.

    • 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 y, a continuación, 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 de la forma habitual.

Compilación de una aplicación RTApp con la CLI

En las instrucciones siguientes se supone que usa CMake. Si prefiere compilar en la línea de comandos sin usar CMake, puede determinar las opciones adecuadas del compilador y del enlazador observando los archivos AzureSphereToolchainBase.cmake y AzureSphereRTCoreToolchain.cmake, que se instalan con el SDK de Azure Sphere.

  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 HelloWorld RTApp:

    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.

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

    azsphere device sideload delete
    
  5. Implemente el paquete de imagen que Ninja creó:

    azsphere device sideload deploy --image-package <package-name>
    
  6. 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>
    
  7. Determine en qué núcleo se ejecuta la aplicación.

    De forma predeterminada, la RTApp se implementa en el primer núcleo en tiempo real disponible en el dispositivo. No se puede especificar un núcleo determinado. Para averiguar en qué núcleo se ejecuta la aplicación, use el comando azsphere device app para detener y luego reiniciar la aplicación. Proporcione el identificador de componente de la aplicación en los comandos. Por ejemplo:

    azsphere device app stop --component-id <component id>
    <component id>: App state: stopped
    
    azsphere device app start --component-id <component id>
    <component id>
    App state: running
    Core     : Real-time 0
    
  8. El emulador de terminal conectado debe mostrar la salida de la aplicación. El programa envía las siguientes palabras a intervalos de un segundo:

    Tick

    Tock

Salida del registro de una RTApp

Cada núcleo en tiempo real en la placa MT3620 tiene un UART dedicado que está destinado a la salida de registro. Los núcleos en tiempo real también pueden acceder a los UUART de ISU. El RDB MT3620 expone solo el pin TX, que puede usar para mostrar la salida del registro de la aplicación. Otro tipo de hardware puede exponer esto de manera diferente, o no exponerlo en ningún caso. Para ver la salida del registro, configure el hardware para que muestre el resultado como se describe en el inicio rápido. El UART dedicado no requiere el manifiesto de aplicación Uart; sin embargo, no debe usarse con fines distintos a la salida de registro para una RTApp.

Desarrollo con 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.

Solución de problemas

Si experimenta algún problema, consulte Solución de problemas de las aplicaciones con respuesta en tiempo real.

Recursos adicionales

Hay controladores y ejemplos adicionales para RTApps que tienen como destino los núcleos en tiempo real de M4 en el chip MT3620 en GitHub desde asociados de Azure Sphere: