Criar um aplicativo com capacidade em tempo real

Você pode usar o Visual Studio, Visual Studio Code ou a CLI (linha de comando) para desenvolver e depurar aplicativos com capacidade em tempo real (RTApps) da mesma forma que aplicativos de alto nível.

Pré-requisitos

Habilitar desenvolvimento e depuração

Antes de criar um aplicativo de exemplo em seu dispositivo do Azure Sphere ou desenvolver novos aplicativos para ele, você deve habilitar o desenvolvimento e a depuração. Por padrão, os dispositivos do Azure Sphere são "bloqueados"; ou seja, eles não permitem que aplicativos em desenvolvimento sejam carregados de um computador e não permitem a depuração de aplicativos. Preparar o dispositivo para depuração remove essa restrição e carrega o software necessário para depuração e desbloqueia recursos do dispositivo .

Para depurar nos núcleos em tempo real, use o comando az sphere device enable-development . Esse comando configura o dispositivo para aceitar aplicativos de um computador para depuração e atribui o dispositivo ao grupo de dispositivos De desenvolvimento, o que não permite atualizações de aplicativos de nuvem. Durante o desenvolvimento e depuração do aplicativo, você deve deixar o dispositivo nesse grupo para que as atualizações de aplicativos de nuvem não substituam o aplicativo em desenvolvimento.

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.

  1. Faça logon no Azure Sphere se você ainda não tiver feito isso:

    az login
    
  2. Abra uma interface de linha de comando usando o PowerShell ou o Prompt de Comando do Windows com privilégios de administrador. O --enable-rt-core-debugging parâmetro requer privilégio de administrador porque instala drivers USB para o depurador.

  3. Insira o seguinte comando:

    az sphere device enable-development --enable-rt-core-debugging  --catalog <CatalogName>  --resource-group <ResourceGroupName>
    
  4. Feche a janela após a conclusão do comando porque o privilégio de administrador não é mais necessário. Como prática recomendada, você deve sempre usar o privilégio mais baixo que pode realizar uma tarefa.

Se o comando az sphere device enable-development falhar, consulte Solucionar problemas do Azure Sphere para obter ajuda.

Habilitar desenvolvimento e depuração

Antes de criar um aplicativo de exemplo em seu dispositivo do Azure Sphere ou desenvolver novos aplicativos para ele, você deve habilitar o desenvolvimento e a depuração. Por padrão, os dispositivos do Azure Sphere são "bloqueados"; ou seja, eles não permitem que aplicativos em desenvolvimento sejam carregados de um computador e não permitem a depuração de aplicativos. A preparação do dispositivo para depuração remove essa restrição e carrega o software necessário para depuração e desbloqueia recursos do dispositivo, conforme descrito em Recursos de dispositivo e comunicação.

Para depurar nos núcleos em tempo real, use o comando az sphere device enable-development . Esse comando configura o dispositivo para aceitar aplicativos de um computador para depuração e atribui o dispositivo ao grupo de dispositivos De desenvolvimento, o que não permite atualizações de aplicativos de nuvem. Durante o desenvolvimento e depuração do aplicativo, você deve deixar o dispositivo nesse grupo para que as atualizações de aplicativos de nuvem não substituam o aplicativo em desenvolvimento.

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.

  1. Faça logon no Azure se você ainda não tiver feito isso:

    az login
    
  2. Abra uma interface de linha de comando usando o PowerShell, o Prompt de Comando do Windows ou o shell de comando linux com privilégios de administrador. O --enable-rt-core-debugging parâmetro requer privilégio de administrador porque instala drivers USB para o depurador.

  3. Insira o seguinte comando:

    az sphere device enable-development --enable-rt-core-debugging
    
  4. Feche a janela após a conclusão do comando porque o privilégio de administrador não é mais necessário. Como prática recomendada, você deve sempre usar o privilégio mais baixo que pode realizar uma tarefa.

Se o comando az sphere device enable-development falhar com a seguinte mensagem de erro, consulte Solucionar problemas do Azure Sphere para obter ajuda.

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

Criar o RTApp usando Visual Studio Code

Para criar um RTApp:

  1. Em Visual Studio Code, abra a pasta HelloWorld_RTApp_MT3620_BareMetal no clone do repositório de exemplos do Azure Sphere. Se você tiver solicitado que selecione um kit, escolha "Não use um kit".

  2. Pressione F5 para iniciar o depurador. Se o projeto não tiver sido criado anteriormente ou se os arquivos tiverem sido alterados e a reconstrução for necessária, Visual Studio Code criará o projeto antes do início da depuração.

  3. O emulador de terminal conectado deve exibir a saída do aplicativo. O programa envia as seguintes palavras em intervalos de um segundo:

    Tick

    Tock

    Nota

    Visual Studio Code fornece o Intellisense, mas ele não será atualizado automaticamente quando você modificar CMakeLists.txt. Você precisa executar o comando CMake: Excluir Cache e Reconfigurar para atualizar o Intellisense. A exibição de destinos do CMake pode ser encontrada na exibição de extensão CMake na barra esquerda.

Criar o RTApp usando o Visual Studio

Para criar um RTApp:

  1. No Visual Studio, selecioneCMake deArquivo> e navegue até a pasta que contém o exemplo.

  2. Se a geração CMake não começar automaticamente, selecione o arquivo CMakeLists.txt.

  3. No Visual Studio, exibir> asaída do Show deSaída> de: a saída do CMake deve mostrar as mensagens CMake generation started. eCMake generation finished.

  4. No menu CMake (se estiver presente), selecione Compilar Tudo. 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. O local de saída do aplicativo Azure Sphere é exibido na janela Saída .

  5. Pressione F5 para implantar o aplicativo.

  6. O emulador de terminal conectado deve exibir a saída do aplicativo. O programa envia as seguintes palavras em intervalos de um segundo:

    Tick

    Tock

    Nota

    • O Visual Studio fornece o Intellisense para RTApps do Azure Sphere coletando dados de seu cache CMake. O Visual Studio atualiza o cache sempre que o arquivo CMakeLists.txt ou CMakeSettings.json no RTApp é alterado.

    • Por padrão, o Visual Studio usa a exibição Pasta. Se preferir uma exibição lógica do projeto CMake, você poderá alterar para a exibição Destinos do CMake. Em Gerenciador de Soluções, selecione o ícone de alternância de pasta:

      Alternar entre exibições de solução e pasta

      No menu suspenso, selecione Exibição de Destinos do CMake.

    • O aplicativo pode começar a ser executado antes que o OpenOCD faça uma conexão. Como resultado, os pontos de interrupção definidos no início do código podem ser perdidos. Uma solução alternativa simples para isso é atrasar o início do aplicativo até que o OpenOCD se conecte.

      1. Insira o código a seguir no início do ponto de entrada do aplicativo RTCoreMain. Isso fará com que o aplicativo insira e permaneça em um while loop até que a variável f seja definida como true.

          volatile bool f = false;
          while (!f) {
            // empty.
          }
        
      2. Pressione F5 para iniciar o aplicativo com a depuração e, em seguida, inicie a execução.

      3. No painel Locals de depuração, altere o valor de f zero para um.

      4. Passe o código normalmente.

Criar RTApp usando a CLI

As instruções a seguir pressupõem que você esteja usando o CMake. Se você preferir criar na linha de comando sem usar o CMake, poderá determinar as opções apropriadas do compilador e do vinculador examinando os arquivos AzureSphereToolchainBase.cmake e AzureSphereRTCoreToolchain.cmake, instalados com o SDK do Azure Sphere.

  1. Abra uma interface de linha de comando usando o PowerShell, o Prompt de Comando do Windows ou o shell de comando do Linux. Navegue até o diretório de build do projeto.

  2. No diretório de build do projeto, no prompt de comando, execute o CMake com os seguintes parâmetros:

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

      O nome predefinido de configuração de build, conforme definido em CMakePresets.json.

    • --build <cmake-path>

      O diretório binário que contém o cache CMake. Por exemplo, se você executar o CMake em um exemplo do Azure Sphere, o comando de build será cmake --build out/ARM-Debug.

    • <source-path>

      O caminho do diretório que contém os arquivos de origem do aplicativo de exemplo. No exemplo, o repositório de exemplos do Azure Sphere foi baixado em um diretório chamado AzSphere.

      Os parâmetros CMake são separados por espaços. O caractere de continuação de linha (^ para linha de comando do Windows, \ para linha de comando linux ou ' para PowerShell) pode ser usado para legibilidade, mas não é necessário.

    Os exemplos a seguir mostram os comandos CMake para o HelloWorld RTApp:

    Prompt de Comando do 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. Execute o Ninja para criar o aplicativo e criar o arquivo de pacote de imagem:

    ninja -C out/ARM-Debug
    

    O Ninja coloca os arquivos de aplicativo e .imagepackage resultantes no diretório especificado.

    Você também pode invocar o Ninja por meio do CMake com o seguinte comando:

    cmake --build out/<binary-dir>
    

    Defina <binary-dir> como o diretório binário que contém o cache CMake. Por exemplo, se você executar o CMake em um exemplo do Azure Sphere, o comando de build será cmake --build out/ARM-Debug.

  4. Exclua todos os aplicativos que já estão implantados no dispositivo:

    az sphere device sideload delete
    
  5. Implante o pacote de imagem que o Ninja criou:

    az sphere device sideload deploy --image-package <package-name>
    
  6. Obtenha a ID do componente para a imagem:

    az sphere image-package show --image-package <path-to-imagepackage>
    

    O comando retorna todos os metadados do pacote de imagem. A ID do componente do aplicativo é exibida na seção Identidade do Tipo de Imagem do Aplicativo. Por exemplo:

    ...
      "Identity": {
        "ComponentId": "<component-id>",
        "ImageId": "<image-id>",
        "ImageType": "Application"
      },
    ...
    
  7. Determine em qual núcleo seu aplicativo está sendo executado.

    Por padrão, o RTApp é implantado no primeiro núcleo em tempo real disponível no dispositivo; No momento, você não pode especificar um núcleo específico. Para descobrir em qual núcleo o aplicativo está em execução, use o comando do aplicativo de dispositivo az sphere para parar e reinicie o aplicativo. Forneça a ID do componente para o aplicativo nos comandos. Por exemplo:

    az sphere device app stop --component-id <component id>
    <component id>: App state: stopped
    
    az sphere device app start --component-id <component id>
    <component id>
    App state: running
    Core     : Real-time 0
    
  8. O emulador de terminal conectado deve exibir a saída do aplicativo. O programa envia as seguintes palavras em intervalos de um segundo:

    Tick

    Tock

Saída de log de um RTApp

Cada núcleo em tempo real no MT3620 tem um UART dedicado destinado à saída de log. Os núcleos em tempo real também podem acessar os UARTs isu. O RDB MT3620 expõe apenas o pino TX, que você pode usar para exibir a saída de log do aplicativo. Outros hardwares podem expor isso de forma diferente ou não. Para ver a saída do log, configure seu hardware para exibir essa saída, conforme descrito no início rápido. O UART dedicado não requer o requisito de manifesto do Uart aplicativo; no entanto, ele não deve ser usado para fins diferentes da saída de log para um RTApp.

Desenvolver com aplicativos parceiros

Quando você carrega um aplicativo no dispositivo do Azure Sphere, as ferramentas de implantação do Azure Sphere, por padrão, excluem todos os aplicativos existentes. Para evitar que isso aconteça quando você desenvolve aplicativos que se comunicam entre si, você precisa marcar os aplicativos como parceiros. Quando você implanta um dos aplicativos, seus parceiros não serão excluídos. Consulte Marcar aplicativos como parceiros para obter detalhes.

Solucionando problemas

Se você encontrar problemas, consulte Solucionar problemas de aplicativos com capacidade em tempo real.

Recursos adicionais

Drivers e exemplos adicionais para RTApps que visam os núcleos M4 em tempo real no chip MT3620 estão disponíveis no GitHub de parceiros do Azure Sphere: