Руководство по созданию приложения с поддержкой реального времени

В этом руководстве показано, как создать пример приложения для ядер реального времени на устройстве Azure Sphere. Основные сведения о приложениях, поддерживающих режим реального времени, см. в статье Обзор приложений Azure Sphere .

В этом руководстве вы узнаете, как:

  • Скачивание примера приложения
  • Установка цепочки инструментов GNU Arm
  • Настройка оборудования для отображения выходных данных
  • Включение разработки и отладки
  • Запуск эмулятора терминала для просмотра выходных данных
  • Создание, запуск и отладка приложения с поддержкой реального времени

Важно

В этих инструкциях предполагается, что вы используете оборудование, которое соответствует оборудованию эталонной платы MT3620 ( RDB), например mt3620 Dev Kit от Seeed Studios. Если вы используете другое оборудование Azure Sphere, обратитесь к документации производителя, чтобы узнать, предоставляется ли UART и как получить к нему доступ. Может потребоваться настроить оборудование для отображения выходных данных по-другому и обновить пример кода и поле Uarts файла app_manifest.json, чтобы использовать другой UART.

Необходимые условия

Скачивание примера приложения

Скачать приложение HelloWorld можно следующим образом:

  1. Укажите в браузере пункт Microsoft Samples Browser.
  2. Введите Azure Sphere в поле Поиск.
  3. Выберите Azure Sphere — Hello World в результатах поиска.
  4. Выберите Скачать ZIP-файл.
  5. Откройте скачанный файл и извлеките его в локальный каталог.

Установка цепочки инструментов GNU Arm Embedded

Вы можете скачать и установить цепочку инструментов GNU Arm Embedded с веб-сайта разработчика Arm. Вы также можете использовать артефакты vcpkg для автоматической установки и настройки среды разработки.

  • Visual Studio 2022. Если вы используете Visual Studio 2022, установите цепочку инструментов GNU Arm Embedded Toolchain (arm-none-eabi) с веб-сайта разработчика Arm.
  • Visual Studio 2019: цепочка инструментов автоматически устанавливается вместе с расширением azure-sphere для Visual Studio в Visual Studio 2019. Если вы используете Visual Studio 2019, перейдите к статье Настройка оборудования для отображения выходных данных. Однако если вы установили цепочку инструментов GNU Arm Embedded вручную, Visual Studio будет использовать установленную версию.

Чтобы установить цепочку инструментов, на веб-сайте разработчика Arm найдите цепочку инструментов GNU Arm Embedded Toolchain (arm-none-eabi), которая включает компилятор для процессора ARM Cortex-M4. Следуйте инструкциям, чтобы скачать и установить компилятор для платформы ОС.

По умолчанию Visual Studio Code выполняет поиск цепочки инструментов и должен найти установленную версию. При возникновении проблем со сборкой, связанных с цепочкой инструментов, введите путь следующим образом:

  1. ВыберитеПараметры параметров>>файлов>Расширения>Azure Sphere.
  2. Введите путь установки цепочки инструментов GNU Arm Embedded в параметре Azure Sphere: Arm Gnu Path .

Чтобы установить цепочку инструментов, на веб-сайте разработчика Arm найдите цепочку инструментов GNU Arm Embedded Toolchain (arm-none-eabi), которая включает компилятор для процессора ARM Cortex-M4. Следуйте инструкциям, чтобы скачать и установить компилятор для платформы ОС.

Настройка оборудования для отображения выходных данных

В настоящее время каждое ядро в режиме реального времени поддерживает UART только для TX. ПРИЛОЖЕНИЯ RTApp могут использовать этот UART для отправки выходных данных журнала с устройства. Во время разработки и отладки приложений обычно требуется способ чтения и отображения выходных данных. В примере HelloWorld_RTApp_MT3620_BareMetal показано, как приложение может выполнять запись в UART.

Используйте usb-последовательный адаптер, например FTDI Friend, чтобы подключить UART на ядре реального времени к USB-порту на компьютере. Вам также потребуется эмулятор терминала для установки последовательного подключения с параметрами терминала 115200-8-N-1 (115200 бит/с, 8 бит, без бит четности, один стоп-бит) для отображения выходных данных.

Чтобы настроить оборудование для отображения выходных данных из ПРИЛОЖЕНИЯ RTApp, выполните следующие действия. Чтобы определить расположения закрепления, вам потребуется обратиться к документации от производителя оборудования. Если вы используете оборудование, следующее за оборудованием эталонной платы MT3620 ( RDB), например mt3620 Dev Kit от Seeed Studios, то просмотр заголовков интерфейса RDB может помочь определить расположения контактов.

  1. Подключите GND через usb-последовательный адаптер к GND в комплекте разработки. На оборудовании MT3620 RDB GND — заголовок 3, закрепление 2.
  2. Подключите RX на usb-последовательном адаптере к IOM4-0 TX в комплекте разработки. На оборудовании MT3620 RDB IOM4-0 TX — заголовок 3, пин-код 6.
  3. Подключите usb-последовательный адаптер к бесплатному USB-порту на компьютере разработки и определите, к какому порту подключено последовательное устройство. В Windows запустите диспетчер устройств, выберите Просмотр>устройств по контейнеру и найдите "USB UART". Например, FT232R USB UART указывает на адаптер FTDI Friend.
  4. Запустите программу эмулятора терминала и откройте терминал 115200-8-N-1 для COM-порта, используемого адаптером. Сведения о том, как указать порт и скорость, см. в документации по эмулятору терминала.

Настройка оборудования для отображения выходных данных

В настоящее время каждое ядро в режиме реального времени поддерживает UART только для TX. ПРИЛОЖЕНИЯ RTApp могут использовать этот UART для отправки выходных данных журнала с устройства. Во время разработки и отладки приложений обычно требуется способ чтения и отображения выходных данных. В примере HelloWorld_RTApp_MT3620_BareMetal показано, как приложение может выполнять запись в UART.

Используйте usb-последовательный адаптер, например FTDI Friend, чтобы подключить UART на ядре реального времени к USB-порту на компьютере. Вам также потребуется эмулятор терминала для установки последовательного подключения с параметрами терминала 115200-8-N-1 (115200 бит/с, 8 бит, без бит четности, один стоп-бит) для отображения выходных данных.

Чтобы настроить оборудование для отображения выходных данных из ПРИЛОЖЕНИЯ RTApp, выполните следующие действия. Чтобы определить расположения закрепления, вам потребуется обратиться к документации от производителя оборудования. Если вы используете оборудование, следующее за оборудованием эталонной платы MT3620 ( RDB), например mt3620 Dev Kit от Seeed Studios, то просмотр заголовков интерфейса RDB может помочь определить расположения контактов.

  1. Подключите GND через usb-последовательный адаптер к GND в комплекте разработки. На оборудовании MT3620 RDB GND — заголовок 3, закрепление 2.

  2. Подключите RX на usb-последовательном адаптере к IOM4-0 TX в комплекте разработки. На оборудовании MT3620 RDB IOM4-0 TX — заголовок 3, пин-код 6.

  3. Подключите usb-последовательный адаптер к бесплатному USB-порту на компьютере разработки и определите, к какому порту подключено последовательное устройство.

    • В Windows запустите диспетчер устройств, выберите Просмотр>устройств по контейнеру и найдите "USB UART". Например, FT232R USB UART указывает на адаптер FTDI Friend.

    • В Linux введите следующую команду:

      dmesg | grep ttyUSB
      

      Порт должен иметь имя ttyUSBn, где n указывает номер порта. Если команда dmesg перечисляет несколько USB-портов, то тот, который подключен к, как правило, последний из них сообщается как подключенный. Например, в следующем примере используется 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. Запустите программу эмулятора терминала и откройте терминал 115200-8-N-1 для COM-порта, используемого адаптером. Сведения о том, как указать порт и скорость, см. в документации по эмулятору терминала.

Включение разработки и отладки

Прежде чем создавать пример приложения на устройстве Azure Sphere или разрабатывать для него новые приложения, необходимо включить разработку и отладку. По умолчанию устройства Azure Sphere заблокированы; т. е. они не разрешают загрузку разрабатываемых приложений с компьютера и не разрешают отладку приложений. Подготовка устройства к отладке удаляет это ограничение и загружает программное обеспечение, необходимое для отладки, и разблокирует возможности устройства .

Для отладки на ядрах в режиме реального времени используйте команду az sphere device enable-development . Эта команда настраивает устройство для приема приложений с компьютера для отладки и назначает устройство группе устройств разработка, которая не разрешает обновления облачных приложений. Во время разработки и отладки приложений следует оставить устройство в этой группе, чтобы обновления облачных приложений не перезаписывало разрабатываемое приложение.

В Windows необходимо добавить --enable-rt-core-debugging параметр , который загружает серверы отладки и необходимые драйверы для каждого типа ядра на устройство.

  1. Войдите в Azure Sphere, если вы еще этого не сделали:

    az login
    
  2. Откройте интерфейс командной строки с помощью PowerShell или командной строки Windows с правами администратора. Для --enable-rt-core-debugging параметра требуются права администратора, так как он устанавливает USB-драйверы для отладчика.

  3. Введите следующую команду:

    az sphere device enable-development --enable-rt-core-debugging  --catalog <CatalogName>  --resource-group <ResourceGroupName>
    
  4. Закройте окно после завершения команды, так как права администратора больше не требуются. Рекомендуется всегда использовать наименьшие привилегии, которые могут выполнить задачу.

Если команда az sphere device enable-development завершается сбоем, см. статью Устранение неполадок Azure Sphere .

Создание и запуск приложения HelloWorld RTApp с помощью Visual Studio

  1. Запустите Visual Studio. Выберите Открыть локальную папку, перейдите в папку, в которой вы извлекли скачанный Azure_Sphere___Hello_World.zip файл, а затем выберите папку HelloWorld_RTApp_MT3620_Baremetal.

  2. Если вы не используете RDB MT3620, обновите файл app_manifest.json и пример кода, чтобы указать правильный UART, например ISU1.

  3. Если создание CMake не запускается автоматически, выберите файл CMakeLists.txt.

  4. В окне Выходные данные Visual Studio в выходных данных CMake должны отображаться сообщения CMake generation started. и CMake generation finished..

  5. Выберите Сборка>всех. Если меню отсутствует, откройте Обозреватель решений, щелкните правой кнопкой мыши файл CMakeLists.txt и выберите команду Сборка. Выходное расположение приложения HelloWorld_RTApp_MT3620_Baremetal отображается в окне Вывод .

  6. В меню Выбор элемента запуска выберите HelloWorld_RTApp_MT3620_Baremetal (RTCore).

  7. Нажмите клавишу F5 , чтобы развернуть приложение.

  8. Эмулятор подключенного терминала должен отображать выходные данные программы HelloWorld_RTApp_MT3620_Baremetal. Программа отправляет следующие слова через одну секунду:

    Tick

    Tock

  9. Используйте отладчик для установки точек останова, проверки переменных и выполнения других задач отладки.

Создание и запуск приложения HelloWorld RTApp с Visual Studio Code

  1. В Visual Studio Code откройте папку HelloWorld_RTApp_MT3620_BareMetal в папке, в которой вы извлекли скачанный Azure_Sphere___Hello_World.zip файл. Если вам будет предложено выбрать комплект, выберите Не использовать комплект.

  2. Если вы не используете оборудование RDB MT3620, обновите файл app_manifest.json и пример кода, чтобы указать правильный UART, например ISU1.

  3. Нажмите клавишу F5 , чтобы запустить отладчик. Если проект ранее не был создан или файлы изменились и требуется перестроить, Visual Studio Code выполнит сборку проекта до начала отладки.

  4. В окне выходных данных Azure Sphere должно отображаться сообщение "Развертывание образа..." следуют пути к пакету SDK и компилятору.

  5. Эмулятор подключенного терминала должен отображать выходные данные программы HelloWorld_RTApp_MT3620_Baremetal. Программа отправляет следующие слова через одну секунду:

    Tick

    Tock

  6. Используйте функции отладки Visual Studio Code для установки точек останова, проверки переменных и выполнения других задач отладки.

Устранение неполадок

Приложение может начать выполнение до того, как OpenOCD устанавливает подключение. В результате точки останова, заданные в начале кода, могут быть пропущены. Простое решение для этого заключается в том, чтобы отложить запуск приложения до подключения OpenOCD.

  1. Вставьте следующий код в начало точки входа приложения RTCoreMain. Это приведет к тому, что приложение будет вводить и оставаться в цикле while , пока переменная f не будет задана как true.

     volatile bool f = false;
     while (!f) {
        // empty.
     }
    
  2. Нажмите клавишу F5 , чтобы запустить приложение с отладкой (F5), а затем прервать выполнение.

  3. В области Отладка локальных объектов измените значение f с нуля на единицу.

  4. Пошаговое выполнение кода в обычном режиме.

Создание примера

  1. Откройте интерфейс командной строки с помощью PowerShell, командной строки Windows или командной оболочки Linux. Перейдите в каталог сборки проекта.

  2. В каталоге сборки проекта в командной строке запустите CMake со следующими параметрами:

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

      Имя предустановки конфигурации сборки, определенное в CMakePresets.json.

    • --build <cmake-path>

      Двоичный каталог, содержащий кэш CMake. Например, при запуске CMake в примере Azure Sphere команда сборки будет иметь значение cmake --build out/ARM-Debug.

    • <source-path>

      Путь к каталогу, который содержит исходные файлы для примера приложения. В этом примере репозиторий примеров Azure Sphere был скачан в каталог AzSphere.

      Параметры CMake разделяются пробелами. Символ продолжения строки (^ для командной строки Windows, \ для командной строки Linux или " для PowerShell) можно использовать для удобства чтения, но он не является обязательным.

    В следующих примерах показаны команды CMake для RTApp. Если указано, замените <путь к> файлу путем установки для цепочки инструментов GNU Arm Embedded в вашей системе.

    Командная строка 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. Запустите Ninja, чтобы создать приложение и создать файл пакета образа:

    ninja -C out/ARM-Debug
    

    Ninja помещает результирующие файлы приложения и imagepackage в указанный каталог.

    Вы также можете вызвать Ninja через CMake с помощью следующей команды:

    cmake --build out/<binary-dir>
    

    Задайте <binary-dir> двоичный каталог, содержащий кэш CMake. Например, при запуске CMake в примере Azure Sphere команда сборки будет иметь значение cmake --build out/ARM-Debug.

При устранении неполадок, особенно после внесения изменений в команды CMake, удалите всю сборку и повторите попытку.

Запуск примера

  1. Удалите все приложения, которые уже развернуты на устройстве:

    az sphere device sideload delete
    
  2. Из каталога проекта в командной строке загрузите пакет образа, созданный ninja:

    az sphere device sideload deploy --image-package <path-to-imagepackage>
    

    Приложение начнет работать вскоре после загрузки. В эмуляторе подключенного терминала будет отображаться следующее:

    Tick
    
    Tock
    
    Tick
    .
    .
    .
    
  3. Получите идентификатор компонента для образа:

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

    Команда возвращает все метаданные для пакета образа. Идентификатор компонента для приложения отображается в разделе Удостоверение для типа образа приложения. Например:

    ...
      "Identity": {
        "ComponentId": "<component-id>",
        "ImageId": "<image-id>",
        "ImageType": "Application"
      },
    ...
    

    Для остановки, запуска и получения состояния приложения можно использовать следующие команды:

    az sphere device app stop --component-id <component id>
    
    az sphere device app start --component-id <component id>
    
    az sphere device app show-status --component-id <component id>
    

Отладка примера

  1. Остановите приложение, если оно запущено.

    az sphere device app stop --component-id <component id>
    
  2. Повторно запустите приложение для отладки.

    az sphere device app start --debug-mode true  --component-id <component id>
    

    Эта команда возвращает ядро, на котором выполняется приложение.

    <component id>
    App state   : running
    Core        : Real-time 0
    
  3. Перейдите в папку Openocd для sysroot, с помощью которую было создано приложение. Sysroots устанавливаются в папку установки пакета SDK для Azure Sphere. Например, в Windows папка устанавливается по умолчанию в , C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd а в Linux — в /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux.

  4. Выполните openocd , как показано в следующем примере. В примере предполагается, что приложение работает на ядре 0. Если приложение выполняется в ядре 1, замените "targets io0" на "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. Перейдите в папку, содержащую out-файл приложения, и запустите arm-none-eabi-gdb, которая является частью цепочки инструментов GNU Arm Embedded Toolchain:

    Командная строка 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. Сервер OpenOCD предоставляет интерфейс сервера GDB в :4444. Задайте целевой объект для отладки.

    target remote :4444

  7. Теперь можно выполнять команды gdb.

  8. Эмулятор подключенного терминала должен отображать выходные данные из приложения.

Использование партнерских приложений

При загрузке приложения на устройство Azure Sphere средства развертывания Azure Sphere по умолчанию удаляют все существующие приложения. Чтобы избежать этого при разработке приложений, которые взаимодействуют друг с другом, необходимо пометить их как партнеров. При развертывании одного из приложений его партнеры не будут удалены. Дополнительные сведения см. в разделе Пометка приложений как партнеров .

Дальнейшие действия