Criar um aplicativo com capacidade em tempo realBuild a real-time capable application

Você pode usar o Visual Studio, o Visual Studio Code ou a CLI (interface de linha de comando) para desenvolver e depurar aplicativos com capacidade para tempo real (RTApps) da mesma maneira como os aplicativos de alto nível.You can use Visual Studio, Visual Studio Code, or the command line (CLI) to develop and debug real-time capable applications (RTApps) in much the same way as high-level applications.

Pré-requisitosPrerequisites

Habilitar desenvolvimento e depuraçãoEnable development and debugging

Antes de criar um aplicativos de exemplo em seu dispositivo do Azure Sphere ou desenvolver novos aplicativos para ele, você deve habilitar o desenvolvimento e a depuração.Before you can build a sample application on your Azure Sphere device or develop new applications for it, you must enable development and debugging. Por padrão, dispositivos do Azure Sphere são "bloqueados", ou seja, não permitem que aplicativos em desenvolvimento sejam carregados de um PC e não permitem a depuração de aplicativos.By default, Azure Sphere devices are "locked"; that is, they do not allow applications under development to be loaded from a PC, and they do not allow debugging of applications. Preparar o dispositivo para a depuração remove essa restrição, carrega o software necessário para a depuração e desbloqueia os recursos do dispositivo, conforme descrito em Recursos e comunicação do dispositivo.Preparing the device for debugging removes this restriction and loads software required for debugging and unlocks device capabilities as described in Device capabilities and communication.

Para depurar os núcleos em tempo real, use o comando azsphere do dispositivo Enable-Development .To debug on the real-time cores, use the azsphere device enable-development command. Esse comando configura o dispositivo para aceitar aplicativos de um PC para depuração e atribui o dispositivo ao grupo de dispositivos de desenvolvimento, que não permite atualizações de aplicativos de nuvem.This command configures the device to accept applications from a PC for debugging and assigns the device to the Development device group, which does not allow cloud application updates. Durante o desenvolvimento e a depuração de aplicativos, você deve deixar o dispositivo neste grupo para que as atualizações de aplicativos de nuvem não substituam o aplicativo em desenvolvimento.During application development and debugging, you should leave the device in this group so that cloud application updates do not overwrite the application under development.

No Windows, você deve adicionar o --enable-rt-core-debugging parâmetro, que carrega os servidores de depuração e os drivers necessários para cada tipo de núcleo no dispositivo.On Windows, you must add the --enable-rt-core-debugging parameter, which loads the debugging servers and required drivers for each type of core onto the device.

  1. Faça logon no Azure Sphere se ainda não tiver feito isso:Log in to Azure Sphere if you haven't already done so:

    azsphere login

  2. Abra uma interface de linha de comando usando o PowerShell ou o prompt de comando do Windows com privilégios de administrador.Open a command-line interface using PowerShell or Windows command prompt with administrator privileges. O --enable-rt-core-debugging parâmetro requer privilégio de administrador porque instala drivers USB para o depurador.The --enable-rt-core-debugging parameter requires administrator privilege because it installs USB drivers for the debugger.

  3. Insira o seguinte comando:Enter the following command:

    azsphere device enable-development --enable-rt-core-debugging
    
  4. Feche a janela depois de concluir o comando porque o privilégio de administrador não é mais necessário.Close the window after the command completes because administrator privilege is no longer required. Como prática recomendada, você deve usar sempre o privilégio mais baixo que pode realizar uma tarefa.As a best practice, you should always use the lowest privilege that can accomplish a task.

Se o comando azsphere do dispositivo habilitar-desenvolvimento falhar, consulte solucionar problemas Azure Sphere para obter ajuda.If the azsphere device enable-development command fails, see Troubleshoot Azure Sphere issues for help.

Habilitar desenvolvimento e depuraçãoEnable development and debugging

Antes de criar um aplicativos de exemplo em seu dispositivo do Azure Sphere ou desenvolver novos aplicativos para ele, você deve habilitar o desenvolvimento e a depuração.Before you can build a sample application on your Azure Sphere device or develop new applications for it, you must enable development and debugging. Por padrão, dispositivos do Azure Sphere são "bloqueados", ou seja, não permitem que aplicativos em desenvolvimento sejam carregados de um PC e não permitem a depuração de aplicativos.By default, Azure Sphere devices are "locked"; that is, they do not allow applications under development to be loaded from a PC, and they do not allow debugging of applications. Preparar o dispositivo para a depuração remove essa restrição, carrega o software necessário para a depuração e desbloqueia os recursos do dispositivo, conforme descrito em Recursos e comunicação do dispositivo.Preparing the device for debugging removes this restriction and loads software required for debugging and unlocks device capabilities as described in Device capabilities and communication.

Para depurar os núcleos em tempo real, use o comando azsphere do dispositivo Enable-Development .To debug on the real-time cores, use the azsphere device enable-development command. Esse comando configura o dispositivo para aceitar aplicativos de um PC para depuração e atribui o dispositivo ao grupo de dispositivos de desenvolvimento, que não permite atualizações de aplicativos de nuvem.This command configures the device to accept applications from a PC for debugging and assigns the device to the Development device group, which does not allow cloud application updates. Durante o desenvolvimento e a depuração de aplicativos, você deve deixar o dispositivo neste grupo para que as atualizações de aplicativos de nuvem não substituam o aplicativo em desenvolvimento.During application development and debugging, you should leave the device in this group so that cloud application updates do not overwrite the application under development.

No Windows, você deve adicionar o --enable-rt-core-debugging parâmetro, que carrega os servidores de depuração e os drivers necessários para cada tipo de núcleo no dispositivo.On Windows, you must add the --enable-rt-core-debugging parameter, which loads the debugging servers and required drivers for each type of core onto the device.

  1. Faça logon no Azure Sphere se ainda não tiver feito isso:Log in to Azure Sphere if you haven't already done so:

    azsphere login

  2. Abra uma interface de linha de comando usando o PowerShell, o prompt de comando do Windows ou o Shell de comando do Linux com privilégios de administrador.Open a command-line interface using PowerShell, Windows command prompt, or Linux command shell with administrator privileges. O --enable-rt-core-debugging parâmetro requer privilégio de administrador porque instala drivers USB para o depurador.The --enable-rt-core-debugging parameter requires administrator privilege because it installs USB drivers for the debugger.

  3. Insira o seguinte comando:Enter the following command:

    azsphere device enable-development --enable-rt-core-debugging
    
  4. Feche a janela depois de concluir o comando porque o privilégio de administrador não é mais necessário.Close the window after the command completes because administrator privilege is no longer required. Como prática recomendada, você deve usar sempre o privilégio mais baixo que pode realizar uma tarefa.As a best practice, you should always use the lowest privilege that can accomplish a task.

Se o comando azsphere do dispositivo habilitar-desenvolvimento falhar com a seguinte mensagem de erro, consulte solucionar problemas Azure Sphere para obter ajuda.If the azsphere device enable-development command fails with the following error message, see Troubleshoot Azure Sphere issues for help.

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

Criar o RTApp usando Visual Studio CodeBuild the RTApp using Visual Studio Code

Para compilar um RTApp:To build an RTApp:

  1. No Visual Studio Code, abra a pasta HelloWorld_RTApp_MT3620_BareMetal em seu clone do repositório de exemplos do Azure Sphere.In Visual Studio Code, open the HelloWorld_RTApp_MT3620_BareMetal folder in your clone of the Azure Sphere samples repo. Se você for solicitado a selecionar um kit, escolha "Não usar um kit".If you're prompted to select a kit, choose "Do not use a kit."

  2. Pressione F5 para iniciar o depurador.Press F5 to start the debugger. Se o projeto não tiver sido compilado anteriormente ou se algum arquivo tiver sido alterado e for necessária a recompilação, o Visual Studio Code compilará o projeto antes de iniciar a depuração.If the project has not previously been built, or if files have changed and rebuild is required, Visual Studio Code will build the project before debugging starts.

  3. O emulador de terminal conectado deve exibir a saída do aplicativo.The connected terminal emulator should display output from the application. O programa envia as seguintes palavras em intervalos de um segundo:The program sends the following words at one-second intervals:

    Tick

    Tock

    Observação

    O Visual Studio Code fornece o IntelliSense, mas ele não será atualizado automaticamente quando você modificar CMakeLists.txt.Visual Studio Code provides Intellisense, but it won't automatically update when you modify CMakeLists.txt. Você precisa executar o comando CMake: delete cache e reconfigure para atualizar o IntelliSense.You need to run the CMake: Delete Cache and Reconfigure command to refresh Intellisense. A exibição de destinos do CMake pode ser encontrada na exibição de extensão do CMake na barra esquerda.The CMake targets view can be found in the CMake extension view on the left bar.

Criar o RTApp usando o Visual StudioBuild the RTApp using Visual Studio

Para compilar um RTApp:To build an RTApp:

  1. No Visual Studio, selecione arquivo > CMake e navegue até a pasta que contém o exemplo.In Visual Studio, select File > CMake and navigate to the folder that contains the sample.

  2. Se a geração de CMake não for iniciada automaticamente, selecione o arquivo CMakeLists.txt.If CMake generation does not start automatically, select the CMakeLists.txt file.

  3. No Visual Studio, Exibir > saída > Mostrar saída de: a saída de CMake deve mostrar as mensagens CMake generation started. eCMake generation finished.In Visual Studio, View > Output > Show output from: CMake output should show the messages CMake generation started. and CMake generation finished.

  4. No menu CMake (se presente), selecione compilar tudo.On the CMake menu (if present), select Build All. Se o menu não estiver presente, abra Gerenciador de Soluções, clique com o botão direito do mouse no arquivo CMakeLists.txt e selecione Compilar.If the menu is not present, open Solution Explorer, right-click the CMakeLists.txt file, and select Build. O local de saída do aplicativo Azure Sphere é exibido na janela de Saída.The output location of the Azure Sphere application appears in the Output window.

  5. Pressione F5 para implantar o aplicativo.Press F5 to deploy the application.

  6. O emulador de terminal conectado deve exibir a saída do aplicativo.The connected terminal emulator should display output from the application. O programa envia as seguintes palavras em intervalos de um segundo:The program sends the following words at one-second intervals:

    Tick

    Tock

    Observação

    • O Visual Studio fornece o Intellisense para RTApps do Azure Sphere ao coletar dados de seu cache de CMake.Visual Studio provides Intellisense for Azure Sphere RTApps by gathering data from its CMake cache. O Visual Studio atualiza o cache sempre que o arquivo CMakeLists.txt ou CMakeSettings no RTApp é alterado.Visual Studio updates the cache whenever the CMakeLists.txt or CMakeSettings.json file in the RTApp changes.

    • Por padrão, o Visual Studio usa o modo de exibição de pasta.By default, Visual Studio uses the Folder view. Se você preferir uma exibição lógica do projeto CMake, você pode alterar para o modo de exibição de destinos do CMake.If you prefer a logical view of the CMake project, you can change to the CMake Targets view. No Gerenciador de soluções, selecione o ícone de alternância de pasta:In Solution Explorer, select the folder toggle icon:

      Alternar entre modos de exibição de solução e pasta

      No menu suspenso, selecione CMake targets View.From the drop-down menu, select CMake Targets View.

    • O aplicativo pode começar a ser executado antes que o OpenOCD estabeleça uma conexão.The application might begin executing before OpenOCD makes a connection. Como resultado, os pontos de interrupção definidos no início do código podem ser ignorados.As a result, breakpoints set early in the code might be missed. Uma solução alternativa simples para isso é atrasar o início do aplicativo até que o OpenOCD se conecte.A simple workaround for this is to delay the start of the app until OpenOCD connects.

      1. Insira o código a seguir no início do ponto de entrada do aplicativo RTCoreMain.Insert the following code at the beginning of the application entry point RTCoreMain. Isso fará com que o aplicativo entre e permaneça em um loop while até que a variável f seja definida como true.This will cause the application to enter and remain in a while loop until variable f is set to true.

          volatile bool f = false;
          while (!f) {
            // empty.
          }
        
      2. Pressione F5 para iniciar o aplicativo com depuração e, em seguida, interromper a execução.Press F5 to start the app with debugging and then break into execution.

      3. No painel de depuração Locais, altere o valor de f de zero para um.In the Locals debug panel, change the value of f from zero to one.

      4. Execute o código em etapas como de costume.Step through the code as normal.

Criar RTApp usando a CLIBuild RTApp using the CLI

As instruções a seguir pressupõem que você está usando o CMake.The instructions that follow assume you're using CMake. Se preferir criar o aplicativo na linha de comando sem usar o CMake, você poderá determinar as opções do compilador e do vinculador apropriadas examinando os arquivos AzureSphereToolchainBase.cmake e AzureSphereRTCoreToolchain.cmake, que estão instalados com o SDK do Azure Sphere.If you prefer to build on the command line without using CMake, you can determine the appropriate compiler and linker options by looking at the AzureSphereToolchainBase.cmake and AzureSphereRTCoreToolchain.cmake files, which are installed with the Azure Sphere SDK.

  1. Abra uma interface de linha de comando usando o PowerShell, o prompt de comando do Windows ou o Shell de comando do Linux.Open a command-line interface using PowerShell, Windows command prompt, or Linux command shell. Navegue até o diretório de Build do projeto.Navigate to your project build directory.

  2. Crie ou navegue até o diretório que conterá os arquivos de build e .imagepackage que serão gerados durante o processo de build.Create or navigate to the directory that will contain the build and .imagepackage files that will be generated during the build process. Por exemplo, para criar e abrir um novo diretório chamado "buildfiles", você digitaria os seguintes comandos na linha de comando:For example, to create and open a new directory called "buildfiles" you would enter the following commands at the command line:

    mkdir buildfiles

    cd buildfiles

  3. No diretório de Build do projeto, no prompt de comando, execute CMake com os seguintes parâmetros:From your project build directory, at the command prompt, run CMake with the following parameters:

  • -G-G

    Defina esse parâmetro como "Ninja" para indicar que o CMake deve usar o gerador ninja para criar os arquivos de compilação, pois ninja será usado para concluir a compilação.Set this parameter to "Ninja" to indicate that CMake should use the Ninja generator to create the build files, as Ninja will be used to complete the build.

  • -DCMAKE_TOOLCHAIN_FILE-DCMAKE_TOOLCHAIN_FILE

    Defina esse parâmetro como o caminho para o arquivo de cadeia de ferramentas do compilador em seu computador.Set this parameter to the path to the compiler tool chain file on your machine. Para o Windows, o CMAKE_TOOLCHAIN_FILE deve apontar para C:\Arquivos de programas (x86) \ <path to SDK> \CMakeFiles\AzureSphereRTCoreToolchain.CMake.For Windows, the CMAKE_TOOLCHAIN_FILE should point to C:\Program Files (x86)\<path to SDK>\CMakeFiles\AzureSphereRTCoreToolchain.cmake. Para o Linux, especifique/opt/azurespheresdk/CMakeFiles/AzureSphereRTCoreToolchain.cmake.For Linux, specify /opt/azurespheresdk/CMakeFiles/AzureSphereRTCoreToolchain.cmake.

  • -DARM_GNU_PATH-DARM_GNU_PATH

    Defina esse parâmetro como o caminho para o diretório em seu computador que contém ARM-None-EABI-gcc, e não o caminho para o compilador em si.Set this parameter to the path to the directory on your machine that contains arm-none-eabi-gcc, and not the path to the compiler itself. Se você estiver usando as ferramentas GNU do Visual Studio, o caminho ARM_GNU_PATH estaria na subpasta 2019 \ edition\linux\ gcc_arm \bin da sua instalação do Visual Studio, em vez do caminho no exemplo.If you are using the GNU Tools from Visual Studio, the ARM_GNU_PATH path would be in the 2019\edition\Linux\gcc_arm\bin subfolder of your Visual Studio installation, rather than the path in the example.

  • -DAZURE_SPHERE_TARGET_API_SET-DAZURE_SPHERE_TARGET_API_SET

    Defina esse parâmetro para a API de Azure Sphere desejada definida para usar.Set this parameter to the desired Azure Sphere API set to use. No exemplo, ele é definido como "mais recente-LTS", que seleciona o conjunto mais recente de APIs designado para o suporte a longo prazo.In the example it is set to "latest-lts", which selects the latest set of APIs designated for long-term support.

  • -DCMAKE_BUILD_TYPE-DCMAKE_BUILD_TYPE

    Defina esse parâmetro para o tipo de compilação.Set this parameter to the build type. Os valores possíveis são de Depuração e Versão.Possible values are Debug and Release.

  • O parâmetro final é o caminho para o diretório em seu computador que contém os arquivos de origem para o aplicativo de exemplo.The final parameter is the path to the directory on your machine that contains the source files for the sample application. No exemplo, o repositório de exemplos de Azure Sphere foi baixado em um diretório chamado AzSphere.In the example the Azure Sphere samples repository was downloaded to a directory called AzSphere.

    Os parâmetros do CMake são separados por espaços.CMake parameters are separated by spaces. O caractere de continuação de linha (^ para linha de comando do Windows, \ para linha de comando do Linux ou ' para PowerShell) pode ser usado para facilitar a leitura, mas não é necessário.The line continuation character (^ for Windows command line, \ for Linux command line, or ` for PowerShell) can be used for readability but is not required.

Os exemplos a seguir mostram os comandos CMake para o HelloWorld RTApp:The following examples show the CMake commands for the HelloWorld RTApp:

Prompt de comando do WindowsWindows Command Prompt

  cmake ^
  -G "Ninja" ^
  -DCMAKE_TOOLCHAIN_FILE="C:\Program Files (x86)\Microsoft Azure Sphere SDK\CMakeFiles\AzureSphereRTCoreToolchain.cmake" ^
  -DARM_GNU_PATH:STRING="C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin" ^
  -DAZURE_SPHERE_TARGET_API_SET="latest-lts" ^
  -DCMAKE_BUILD_TYPE="Debug" ^
  "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"

Windows PowerShellWindows PowerShell

  cmake `
  -G "Ninja" `
  -DCMAKE_TOOLCHAIN_FILE="C:\Program Files (x86)\Microsoft Azure Sphere SDK\CMakeFiles\AzureSphereRTCoreToolchain.cmake" `
  -DARM_GNU_PATH:STRING="C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin" `
  -DAZURE_SPHERE_TARGET_API_SET="latest-lts" `
  -DCMAKE_BUILD_TYPE="Debug" `
  "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"

Saída de log de um RTAppLog output from an RTApp

Cada núcleo em tempo real sobre o MT3620 tem um UART dedicado que é destinado à saída de log.Each real-time core on the MT3620 has a dedicated UART that is intended for logging output. Os núcleos em tempo real também podem acessar os UART do ISU.The real-time cores can also access the ISU UARTs. O RDB MT3620 expõe apenas o pino TX, que você pode usar para exibir a saída de log do aplicativo.The MT3620 RDB exposes only the TX pin, which you can use to display log output from the application. Outros dispositivos de hardware podem expor isso de forma diferente ou de nenhuma forma.Other hardware may expose this differently, or not at all. Para ver a saída do log, configure o hardware para exibir a saída de log do UART dedicado, conforme descrito no quickstart.To see the log output, set up your hardware to display this output as described in the quickstart. O UART dedicado não exige o requisito de manifesto de aplicativo Uart, no entanto, ele não deve ser usado para outros fins além da saída de log de um RTApp.The dedicated UART doesn't require the Uart application manifest requirement; however, it shouldn't be used for purposes other than logging output for an RTApp.

Desenvolver com aplicativos de parceirosDevelop with partner apps

Quando você carrega um aplicativo no dispositivo do Azure Sphere, as ferramentas de implantação do Azure Sphere excluem todos os aplicativos existentes por padrão.When you load an application onto the Azure Sphere device, the Azure Sphere deployment tools by default delete all existing applications. Para evitar que isso aconteça quando você desenvolve aplicativos que se comunicam entre si, você precisa marcar os aplicativos como parceiros.To prevent this from happening when you develop applications that communicate with each other, you need to mark the applications as partners. Quando você implanta um dos aplicativos, seus parceiros não serão excluídos.When you deploy one of the applications, its partners will not be deleted. Consulte Marcar aplicativos como parceiros para obter detalhes.See Mark applications as partners for details.

Solução de problemasTroubleshooting

Se você encontrar problemas, confira Solução de problemas de aplicativos com funcionalidade de tempo real.If you encounter problems, see Troubleshooting real-time capable applications.