Azure Sphere Cortex-M4のサンプルプログラムを動かしてみた

ベータサポートではありますが、19.05からCortex-M4でプログラムが動かせるようになりました。

matsujirushi.hatenablog.jp

というわけで、マイクロソフトから提供されているサンプルプログラムを動かしてみたいと思います。

サンプルプログラム

Cortex-M4のサンプルプログラムは、azure-sphere-samplesでいくつか提供されています。
Cortex-A7で動かすプログラムはHighLevelApp、Cortex-M4で動かすのはRTAppという名称になっているようです。RTAppは、RealTime Appってことみたい。

ここでは、一番シンプルなGPIO_RTApp_MT3620_BareMetalを動かすことにしましょう。

手順は、readme.mdです。

前提条件(Prerequisites)

MT3620開発ボードなら大丈夫。

サンプルをビルドと実行

SDKMCUが19.05になっていることを確認しておきます。

C:\>azsphere show-version
19.05
Command completed successfully in 00:00:00.2236452.

C:\>azsphere device show-ota-status
Your device is running Azure Sphere OS version 19.05.
The Azure Sphere Security Service is targeting this device with Azure Sphere OS version 19.05.
Your device has the expected version of the Azure Sphere OS: 19.05.
Command completed successfully in 00:00:03.8632201.

C:\>

そして、MT3620のRTCoreを有効にします。

Azure Sphereコマンドプロンプトを管理者権限で起動していない場合、ここでエラーが発生します。

C:\>azsphere dev prep-debug --EnableRTCoreDebugging
Installing USB drivers to enable real-time core debugging.
Drivers installed for all attached devices.
Getting device capability configuration for application development.
Downloading device capability configuration for device ID '961B0F3AF5C4EA9581512975F8E21A81DFED93BEF7A73854D802C8BDEFF7F5A8516639B653E6F082009F5C660C9B96BB1B16F49A56D7DE51A089AC01AE3376EC'.
Successfully downloaded device capability configuration.
Successfully wrote device capability configuration file 'C:\Users\takashi\AppData\Local\Temp\tmpA059.tmp'.
Setting device group ID 'cd037ae5-27ca-4a13-9e3b-2a9d87f9d7bd' for device with ID '961B0F3AF5C4EA9581512975F8E21A81DFED93BEF7A73854D802C8BDEFF7F5A8516639B653E6F082009F5C660C9B96BB1B16F49A56D7DE51A089AC01AE3376EC'.
Successfully disabled over-the-air updates.
Enabling application development capability on attached device.
Applying device capability configuration to device.
Successfully applied device capability configuration to device.
The device is rebooting.
Installing debugging server to device.
Deploying 'C:\Program Files (x86)\Microsoft Azure Sphere SDK\DebugTools\gdbserver.imagepackage' to the attached device.
Image package 'C:\Program Files (x86)\Microsoft Azure Sphere SDK\DebugTools\gdbserver.imagepackage' has been deployed to the attached device.
Application development capability enabled.
Successfully set up device '961B0F3AF5C4EA9581512975F8E21A81DFED93BEF7A73854D802C8BDEFF7F5A8516639B653E6F082009F5C660C9B96BB1B16F49A56D7DE51A089AC01AE3376EC' for application development, and disabled over-the-air updates.
Command completed successfully in 00:00:44.1955946.

C:\>

ここでは、PCにCortex-M4デバッグ用のUSBドライバをインストールして、デバイスのcapabilityを変更、gdbserverをインストールしています。USBドライバはこれかなぁ?
f:id:matsujirushix:20190622205850p:plain

次はビルド。Visual Studioを起動して、メニューのファイル>開く>CMakeで、GPIO_RTApp_MT3620_BareMetalフォルダにあるCMakeLists.txtを開きます。すると、自動的にCMakeが実行されて、outフォルダにいろいろと書き込まれます。

いよいよビルド。ソリューションエクスプローラーでCMakeLists.txtを右クリックして、コンテキストメニューのビルドを実行します。結果、イメージパッケージ(GPIO_RTApp_MT3620_BareMetal.imagepackage)が出来上がります。

最後に、スタートアップアイテムの選択でGDB Debugger(RTCore)を選んでF5で実行すれば、イメージパッケージがMT3620開発ボードに転送されて、プログラムが実行されます。

f:id:matsujirushix:20190622211629p:plain

気になった点

ブレークポイントとか試しましたが止まりませんでした。まだ対応していないのか?それともやり方が悪いのか?
デバッグ機能が使えないのは辛し。

デバッグ機能が使えるっぽい記述があるけど、、、ブレークで止めることができないorz

■2019/6/23追記
RTCoreMain()起動直後のコードだと止まらないみたい。
この2箇所を仕込んで実行すると、line121は止まらず、line132で止まった。
f:id:matsujirushix:20190623195316p:plain