Tutorial: Criar e depurar aplicações de parceiros
Este tutorial mostra como criar e depurar um projeto de exemplo que inclui uma aplicação de alto nível e uma aplicação com capacidade em tempo real, onde as duas aplicações comunicam entre o núcleo A7 de alto nível e o núcleo M4 em tempo real. Veja Descrição geral das aplicações do Azure Sphere para obter informações básicas sobre aplicações de alto nível e aplicações com capacidade em tempo real.
Neste tutorial, irá aprender a:
- Instalar a cadeia de ferramentas arm do GNU
- Configurar o hardware para apresentar a saída
- Ativar o desenvolvimento e a depuração
- Clonar o repositório de exemplo do Azure Sphere
- Iniciar um emulador de terminal para ver a saída
- Criar, executar e depurar um par de aplicações parceiras
Importante
Estas instruções partem do princípio de que está a utilizar hardware que segue o hardware de design do quadro de referência (RDB) MT3620, como o Mt3620 Dev Kit da Seeed Studios. Se estiver a utilizar hardware diferente do Azure Sphere, consulte a documentação do fabricante para saber se o UART está exposto e como aceder ao mesmo. Poderá ter de configurar o hardware para apresentar a saída de forma diferente e atualizar o código de exemplo e o campo Uarts do ficheiro app_manifest.json para utilizar um UART diferente.
Pré-requisitos
- Instale o CMake e o Ninja para Windows ou para Linux.
- Instale o Visual Studio Code para Windows ou para Linux.
- Instale o CMake e o Ninja para Windows ou para Linux.
- Instale o SDK do Azure Sphere para Windows ou para Linux.
- Escolha um catálogo e reclame o seu dispositivo.
- Configure a rede e atualize o SO do dispositivo.
Instalar a Cadeia de Ferramentas GNU Arm Embedded
- Visual Studio 2022: se estiver a utilizar o Visual Studio 2022, instale o GNU Arm Embedded Toolchain (arm-none-eabi) a partir do site do programador arm.
- Visual Studio 2019: a cadeia de ferramentas é instalada automaticamente com a extensão do Azure Sphere para Visual Studio no Visual Studio 2019. Se estiver a utilizar o Visual Studio 2019, avance para Configurar hardware para apresentar a saída. No entanto, se instalou manualmente o GNU Arm Embedded Toolchain, o Visual Studio utilizará a versão que instalou.
Para instalar a cadeia de ferramentas no site do programador arm, localize a GNU Arm Embedded Toolchain (arm-none-eabi) que inclui o compilador para o processador Arm Cortex-M4. Siga as instruções para transferir e instalar o compilador para a sua plataforma de SO.
Por predefinição, o Visual Studio Code procura a cadeia de ferramentas e deverá encontrar a versão que instalou. Se encontrar problemas de compilação relacionados com a cadeia de ferramentas>, verifique AsExtensões de DefiniçõesdePreferências>>do AzureSphere para garantir que "Azure Sphere: Caminho do Arm Gnu" identifica o diretório de instalação da Cadeia de Ferramentas GNU Arm Embedded.
Configurar o hardware para apresentar a saída
Atualmente, cada núcleo em tempo real suporta um UART apenas TX. O RTApps pode utilizar este UART para enviar a saída de registo do dispositivo. Durante o desenvolvimento e depuração de aplicações, normalmente precisa de uma forma de ler e apresentar o resultado. O exemplo de HelloWorld_RTApp_MT3620_BareMetal mostra como uma aplicação pode escrever no UART.
Utilize um adaptador USB para série, como o FTDI Friend, para ligar o UART no núcleo em tempo real a uma porta USB no seu computador. Também precisará de um emulador terminal para estabelecer uma ligação de série com as definições de terminal 115200-8-N-1 (115200 bps, 8 bits, sem bits de paridade, um bit de paragem) para apresentar a saída.
Para configurar o hardware para apresentar a saída de uma RTApp, siga estes passos. Terá de consultar a documentação do fabricante do hardware para determinar as localizações dos pinos. Se estiver a utilizar hardware que segue o hardware de design do quadro de referência (RDB) MT3620, como o Mt3620 Dev Kit da Seeed Studios, observar os cabeçalhos da interface RDB pode ajudá-lo a determinar as localizações dos pinos.
Ligue o GND no adaptador USB para série ao GND no seu kit de programador. No hardware RDB MT3620, GND é Cabeçalho 3, pin 2.
Ligue o RX no adaptador USB para série ao IOM4-0 TX no seu kit de programador. No hardware RDB MT3620, IOM4-0 TX é Cabeçalho 3, pin 6.
Ligue o adaptador USB para série a uma porta USB gratuita no seu computador de desenvolvimento e determine a que porta o dispositivo de série está ligado.
No Windows, inicie Gestor de Dispositivos, selecione Ver>Dispositivos por contentor e procure "UART USB". Por exemplo, FT232R USB UART indica o adaptador FTDI Friend.
No Linux, escreva o seguinte comando:
dmesg | grep ttyUSB
A porta deve ter o nome ttyUSBn, em que n indica o número da porta. Se o
dmesg
comando listar várias portas USB, a que está ligada à normalmente a última comunicada como anexada. Por exemplo, no seguinte, utilizaria 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
Inicie um programa de emulador terminal e abra um terminal 115200-8-N-1 para a porta COM utilizada pelo adaptador. Veja a documentação do emulador terminal para saber como especificar a porta e a velocidade.
Ativar o desenvolvimento e a depuração
Antes de poder criar uma aplicação de exemplo no seu dispositivo do Azure Sphere ou desenvolver novas aplicações para o mesmo, tem de ativar o desenvolvimento e a depuração. Por predefinição, os dispositivos do Azure Sphere estão "bloqueados"; ou seja, não permitem que as aplicações em desenvolvimento sejam carregadas a partir de um PC e não permitem a depuração de aplicações. Preparar o dispositivo para depuração remove esta restrição e carrega o software necessário para depurar e desbloqueia as capacidades do dispositivo.
Para depurar os núcleos em tempo real, utilize o comando az sphere device enable-development . Este comando configura o dispositivo para aceitar aplicações de um PC para depuração e atribui o dispositivo ao grupo de dispositivos de Desenvolvimento, que não permite atualizações de aplicações na cloud. Durante o desenvolvimento e depuração de aplicações, deve deixar o dispositivo neste grupo para que as atualizações da aplicação na cloud não substituam a aplicação em desenvolvimento.
No Windows, tem de adicionar o --enable-rt-core-debugging
parâmetro , que carrega os servidores de depuração e os controladores necessários para cada tipo de núcleo no dispositivo.
Inicie sessão no Azure Sphere se ainda não o tiver feito:
az login
Abra uma interface de linha de comandos com o PowerShell ou a Linha de Comandos do Windows com privilégios de administrador. O
--enable-rt-core-debugging
parâmetro requer privilégios de administrador porque instala controladores USB para o depurador.Introduza o seguinte comando:
az sphere device enable-development --enable-rt-core-debugging --catalog <CatalogName> --resource-group <ResourceGroupName>
Feche a janela após a conclusão do comando porque o privilégio de administrador já não é necessário. Como melhor prática, deve sempre utilizar o privilégio mais baixo que pode realizar uma tarefa.
Se o comando az sphere device enable-development falhar, veja Resolver problemas do Azure Sphere para obter ajuda.
Transferir a aplicação de exemplo
Pode transferir as aplicações InterCore Communications da seguinte forma:
- Aponte o browser para o Browser de Exemplos da Microsoft.
- Escreva "Azure Sphere" na caixa Pesquisa.
- Selecione Azure Sphere - Inter-core Communications nos resultados da pesquisa.
- Selecione Transferir ZIP.
- Abra o ficheiro transferido e extraia para um diretório local.
Criar e executar as aplicações parceiras
Inicie o Visual Studio. Selecione Abrir uma pasta local e navegue para a pasta onde extraiu as aplicações IntercoreComms.
Importante
Se estiver a utilizar a versão 17.1 ou posterior do Visual Studio 2022 e tiver extraído o exemplo IntercoreComms antes da versão 22.02 do Azure Sphere, tem de adicionar um ficheiro CMakeWorkspaceSettings.json à pasta de projeto de nível superior.
Se não estiver a utilizar um RDB MT3620, atualize os ficheiros de app_manifest.json para as aplicações e o ficheiro de definição de hardware e CMakeLists.txt ficheiro para a aplicação de alto nível para corresponder ao hardware.
Se a geração CMake não iniciar automaticamente, selecione o ficheiro CMakeLists.txt.
No Visual Studio, veja a saída Mostrar>Saída>de: A saída CMake deve mostrar as mensagens
CMake generation started
eCMake generation finished
.Selecione Criar>Tudo. Se o menu não estiver presente, abra Explorador de Soluções, clique com o botão direito do rato no ficheiro CMakeLists.txt e selecione Compilar. A localização de saída das aplicações IntercoreComms RT do IntercoreComms_HL & é apresentada na janela Saída .
Selecione Selecionar Item> de ArranqueIntercoreComando (Todos os núcleos).
Selecione Depurar>Depurar ou prima F5 para implementar e depurar as aplicações.
Na janela Saída , selecione Saída no menu, selecione Saída do Dispositivo. A janela Saída deve mostrar a saída da aplicação de alto nível:
Remote debugging from host 192.168.35.1, port 58817 High-level intercore comms application Sends data to, and receives data from a real-time capable application. Received 19 bytes: rt-app-to-hl-app-07 Sending: hl-app-to-rt-app-00 Sending: hl-app-to-rt-app-01
O emulador de terminal ligado deve apresentar a saída do programa com capacidade em tempo real:
Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627 Message size: 19 bytes: Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30 Text: hl-app-to-rt-app-00 Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627 Message size: 19 bytes: Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:31 Text: hl-app-to-rt-app-01
Utilize o depurador para definir pontos de interrupção, inspecionar variáveis e experimentar outras tarefas de depuração.
No Visual Studio Code, abra a pasta onde extraiu as aplicações IntercoreComms. O Visual Studio Code deteta o ficheiro intercore.code-workspace e pergunta se pretende abrir a área de trabalho. Selecione Abrir Área de Trabalho para abrir a aplicação em tempo real e a aplicação de alto nível ao mesmo tempo.
Se não estiver a utilizar um RDB MT3620, atualize os ficheiros de app_manifest.json para as aplicações e o ficheiro de definição de hardware e CMakeLists.txt ficheiro para a aplicação de alto nível para corresponder ao hardware.
Prima F5 para iniciar o depurador. Se o projeto não tiver sido criado anteriormente ou se os ficheiros tiverem sido alterados e a reconstrução for necessária, o Visual Studio Code compilará o projeto antes do início da depuração.
A janela de saída do Azure Sphere deve mostrar "A implementar imagem..." seguido dos caminhos para o SDK e compilador.
A janela de saída deve mostrar a saída da aplicação de alto nível:
Remote debugging from host 192.168.35.1, port 58817 High-level intercore comms application Sends data to, and receives data from a real-time capable application. Received 19 bytes: rt-app-to-hl-app-07 Sending: hl-app-to-rt-app-00 Sending: hl-app-to-rt-app-01
O emulador de terminal ligado deve apresentar a saída do programa com capacidade em tempo real:
Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627 Message size: 19 bytes: Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30 Text: hl-app-to-rt-app-00 Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627 Message size: 19 bytes: Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:31 Text: hl-app-to-rt-app-01
Utilize as funcionalidades de depuração do Visual Studio Code para definir pontos de interrupção, inspecionar variáveis e experimentar outras tarefas de depuração.
Resolução de problemas
A aplicação pode começar a ser executada antes de o OpenOCD efetuar uma ligação. Como resultado, os pontos de interrupção definidos no início do código podem não ser apresentados. Uma solução simples para isto é atrasar o início da aplicação até que o OpenOCD se ligue.
Insira o seguinte código no início do ponto de entrada da aplicação RTCoreMain. Isto fará com que a aplicação introduza e permaneça num
while
ciclo até que a variávelf
esteja definida como true.static _Noreturn void RTCoreMain(void) { . . . volatile bool f = false; while (!f) { // empty. } . . . }
Prima F5 para iniciar a aplicação com a depuração e, em seguida, invada a execução.
No painel Depuração Locais , altere o valor de
f
zero para um.Siga o código como habitualmente.
Ao criar com a CLI, primeiro cria e implementa a aplicação com capacidade em tempo real e, em seguida, compila e implementa a aplicação de alto nível.
Criar e implementar a aplicação com capacidade em tempo real
Navegue para a pasta onde extraiu as aplicações IntercoreComms e, em seguida, selecione a pasta IntercoreComms/IntercoreComms_RTApp_MT3620_BareMetal.
Abra o ficheiro app_manifest.json e verifique se o ID de componente da aplicação de alto nível é apresentado na capacidade AllowedApplicationConnections.
Abra uma interface de linha de comandos com o PowerShell, a Linha de Comandos do Windows ou a shell de comandos do Linux. Navegue para o diretório de compilação do projeto.
No diretório de compilação do projeto, na linha de comandos, execute CMake com os seguintes parâmetros:
cmake --preset <preset-name> <source-path>
--preset <preset-name>
O nome predefinido da configuração da compilação, conforme definido no CMakePresets.json.
--build <cmake-path>
O diretório binário que contém a cache CMake. Por exemplo, se executar o CMake num exemplo do Azure Sphere, o comando build será
cmake --build out/ARM-Debug
.<source-path>
O caminho do diretório que contém os ficheiros de origem da aplicação de exemplo. No exemplo, o repositório de exemplos do Azure Sphere foi transferido para um diretório chamado AzSphere.
Os parâmetros CMake são separados por espaços. O caráter de continuação da linha (^ para a linha de comandos do Windows, \ para a linha de comandos do Linux ou ' para o PowerShell) pode ser utilizado para legibilidade, mas não é necessário.
Os exemplos seguintes mostram os comandos CMake para o IntercoreComms RTApp:
Linha de Comandos do Windows
cmake ^ --preset "ARM-Debug" ^ "C:\AzSphere\azure-sphere-samples\Samples\IntercoreComms\IntercoreComms_RTApp_MT3620_BareMetal"
Windows PowerShell
cmake ` --preset "ARM-Debug" ` "C:\AzSphere\azure-sphere-samples\Samples\IntercoreComms\IntercoreComms_RTApp_MT3620_BareMetal"
No diretório de compilação do projeto, na linha de comandos, execute Ninja para criar a aplicação e criar o ficheiro de pacote de imagem.
ninja -C out/ARM-Debug
Ninja coloca a aplicação resultante e os ficheiros .imagepackage no diretório especificado.
Também pode invocar Ninja através de CMake com o seguinte comando:
cmake --build out/<binary-dir>
Defina
<binary-dir>
como o diretório binário que contém a cache CMake. Por exemplo, se executar o CMake num exemplo do Azure Sphere, o comando build serácmake --build out/ARM-Debug
.Ao resolver problemas, especialmente depois de efetuar alterações aos comandos CMake, elimine toda a sua criação e tente novamente.
Elimine todas as aplicações que já estejam implementadas no dispositivo:
az sphere device sideload delete
No diretório de compilação do projeto, na linha de comandos, carregue o pacote de imagem que ninja criou:
az sphere device sideload deploy --image-package <path-to-imagepackage>
A aplicação começará a ser executada logo após ser carregada.
Obtenha o ID do componente da imagem:
az sphere image-package show --image-package <path-to-imagepackage>
O comando devolve todos os metadados do pacote de imagem. O ID do componente da aplicação é apresentado na secção Identidade do Tipo de Imagem da Aplicação. Por exemplo:
... "Identity": { "ComponentId": "<component-id>", "ImageId": "<image-id>", "ImageType": "Application" }, ...
Criar e implementar a aplicação de alto nível
Navegue para a pasta onde extraiu as aplicações IntercoreComms e, em seguida, selecione a pasta IntercoreComms/IntercoreComms_HighLevelApp.
Abra o ficheiro app_manifest.json e verifique se o ID do componente do RTApp é apresentado na capacidade AllowedApplicationConnections.
Abra uma interface de linha de comandos com o PowerShell, a Linha de Comandos do Windows ou a shell de comandos do Linux. Navegue para o diretório de compilação do projeto.
No diretório de compilação do projeto, na linha de comandos, execute CMake com os seguintes parâmetros:
cmake --preset <preset-name> <source-path>
--preset <preset-name>
O nome predefinido da configuração da compilação, conforme definido no CMakePresets.json.
--build <cmake-path>
O diretório binário que contém a cache CMake. Por exemplo, se executar o CMake num exemplo do Azure Sphere, o comando build será
cmake --build out/ARM-Debug
.<source-path>
O caminho do diretório que contém os ficheiros de origem da aplicação de exemplo. No exemplo, o repositório de exemplos do Azure Sphere foi transferido para um diretório chamado AzSphere.
Os parâmetros CMake são separados por espaços. O caráter de continuação da linha (^ para a linha de comandos do Windows, \ para a linha de comandos do Linux ou ' para o PowerShell) pode ser utilizado para legibilidade, mas não é necessário.
Os exemplos seguintes mostram os comandos CMake para a aplicação de alto nível IntercoreComms.
No diretório de compilação do projeto, na linha de comandos, execute Ninja para criar a aplicação e criar o ficheiro de pacote de imagem.
ninja -C out/ARM-Debug
Ninja coloca a aplicação resultante e os ficheiros .imagepackage no diretório especificado.
Também pode invocar Ninja através de CMake com o seguinte comando:
cmake --build out/<binary-dir>
Defina
<binary-dir>
como o diretório binário que contém a cache CMake. Por exemplo, se executar o CMake num exemplo do Azure Sphere, o comando build serácmake --build out/ARM-Debug
.Ao resolver problemas, especialmente depois de efetuar alterações aos comandos CMake, elimine toda a sua criação e tente novamente.
No diretório de compilação do projeto, na linha de comandos, carregue o pacote de imagem que ninja criou:
az sphere device sideload deploy --image-package <package-name>
A aplicação começará a ser executada logo após ser carregada.
Obtenha o ID do componente da imagem:
az sphere image-package show --image-package <path-to-imagepackage>
O comando devolve todos os metadados do pacote de imagem. O ID do componente da aplicação é apresentado na secção Identidade do Tipo de Imagem da Aplicação. Por exemplo:
... "Identity": { "ComponentId": "<component-id>", "ImageId": "<image-id>", "ImageType": "Application" }, ...
Executar as aplicações parceiras com a depuração ativada
Pare a aplicação em tempo real se estiver em execução.
az sphere device app stop --component-id <component id>
Reinicie a aplicação para depuração.
az sphere device app start -- --debug-mode true --component-id <component id>
Este comando devolve o núcleo no qual a aplicação está em execução.
<component id> App state: running Core : Real-time 0
Navegue para a pasta Openocd para obter o sysroot com o qual a aplicação foi criada. Os sysroots são instalados na pasta de instalação do SDK do Azure Sphere. Por exemplo, no Windows, a pasta é instalada por predefinição em
C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd
e no Linux, em/opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux
.Execute
openocd
como mostra o seguinte exemplo. O exemplo pressupõe que a aplicação está em execução no núcleo 0. Se a aplicação estiver em execução no núcleo 1, substitua "targets io0" por "targets io1".Abra uma nova Linha de Comandos do Azure Sphere (CLI clássica do Windows Azure Sphere), uma linha de comandos padrão ou o PowerShell (CLI do Windows Azure) ou uma janela de terminal (Linux).
Navegue para a pasta que contém o ficheiro .out da aplicação em tempo real e inicie
arm-none-eabi-gdb
o , que faz parte da Cadeia de Ferramentas GNU Arm Embedded:Linha de Comandos do Windows
"C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
Windows PowerShell
& "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
O servidor OpenOCD fornece uma interface de servidor GDB em :4444. Defina o destino para depuração.
target remote :4444
Agora pode executar comandos gdb para a aplicação com capacidade em tempo real. Adicione um ponto de interrupção na função HandleSendTimerDeferred:
break HandleSendTimerDeferred
O emulador de terminal ligado deve apresentar o resultado da aplicação com capacidade em tempo real.
Abra uma nova Linha de Comandos do Azure Sphere (CLI clássica do Windows Azure Sphere), uma linha de comandos padrão ou o PowerShell (CLI do Windows Azure) ou uma janela de terminal (Linux).
Navegue para a pasta que contém o ficheiro .imagepackage de aplicação de alto nível.
Pare a aplicação de alto nível se estiver em execução.
az sphere device app stop --component-id <component id>
Reinicie a aplicação de alto nível com a depuração.
az sphere device app start --debug-mode true --component-id <component id> --debug-mode
Abra um emulador de terminal e estabeleça uma ligação Telnet ou TCP para 192.168.35.2 na porta 2342 para ver a saída da aplicação de alto nível.
Inicie a gdb com o seguinte comando:
Linha de Comandos do Windows
"C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
Windows PowerShell
& "C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
Nota
O SDK do Azure Sphere é fornecido com vários sysroots para que as aplicações possam visar diferentes conjuntos de API, conforme descrito em Versão do runtime da aplicação, sysroots e APIs Beta. Os sysroots são instalados na pasta de instalação do SDK do Azure Sphere em Sysroots.
Defina o destino de depuração remota para o endereço IP 192.168.35.2 na porta 2345:
target remote 192.168.35.2:2345
Adicione um ponto de interrupção na função SendMessageToRTApp:
break SendMessageToRTApp
Escreva
c
para continuar, observe a saída no terminal Telnet/TCP e, em seguida, mude para a linha de comandos ou janela de terminal que contém a sua sessão de depuração da aplicação em tempo real.Escreva
c
para continuar e observar a saída na sua sessão de série ligada.
Pode trabalhar entre sessões de depuração e alternar entre a aplicação com capacidade em tempo real e a aplicação de alto nível. Deverá ver um resultado semelhante ao seguinte nas duas janelas de saída:
Starting debugger....
Process /mnt/apps/25025d2c-66da-4448-bae1-ac26fcdd3627/bin/app created; pid = 40
Listening on port 2345
Remote debugging from host 192.168.35.1, port 56522
High-level intercore comms application
Sends data to, and receives data from a real-time capable application.
Sending: hl-app-to-rt-app-00
Sending: hl-app-to-rt-app-01
IntercoreComms_RTApp_MT3620_BareMetal
App built on: Nov 17 2020, 09:25:19
Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
Message size: 19 bytes:
Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30
Text: hl-app-to-rt-app-00
Para terminar cada sessão de depuração, escreva q
na linha de comandos gdb.
Passos seguintes
- Explorar exemplos adicionais para aplicações compatíveis com alto nível e em tempo real
- Saiba mais sobre as aplicações do Azure Sphere
- Saiba mais sobre o ambiente de desenvolvimento do Azure Sphere