HLAppを3つ動かしてみる

2019/12/30追記
マイクロソフトからコンタクトがありまして、情報追加しました。(一番最後の結果のとこに。)

前記事。

matsujirushi.hatenablog.jp

RTAppは同時に2つまでしか実行(というかデプロイ)できませんでしたが、HLAppはどうだろう?

実行するHLApp

MT3620開発ボードにいくつかLEDが載っているので、別々のLEDを点滅するHLAppを同時に動かしてみようと思います。

サンプルコードは、、、
Visual Studioで生成できるAzure Sphere Blankを使うことにしましょう。

まずは、ササッとプロジェクト新規作成。

f:id:matsujirushix:20191225211530p:plain

GPIO9に出力するコードが生成されています。

int fd = GPIO_OpenAsOutput(9, GPIO_OutputMode_PushPull, GPIO_Value_High);

はて、GPIO9ってどこ?

Seeedのwikiには説明が見当たらず、、、
Azure Sphereのdocsに書かれていました。

f:id:matsujirushix:20191225212137p:plain

GPIO9は、1つ目のLEDの緑色のようです。

この表から、2つ目、3つ目のLEDの緑色は、GPIO16、GPIO19なので、app_manifest.jsonに追加して、

f:id:matsujirushix:20191225212444p:plain

main.cのGPIO_OpenAsOutput()の番号とapp_manifest.jsonのComponentIdを変えながら、ビルド、.imagepackageコピーして、3つの.imagepackageを作りました。

ComponentId LED ファイル名
a00bbe0c-906a-4841-8bdd-2cbd4d0c12bd LED1の緑色 AzureSphereBlink1-1.imagepackage
a00bbe0c-906a-4841-8bdd-2cbd4d0c12be LED2の緑色 AzureSphereBlink1-2.imagepackage
a00bbe0c-906a-4841-8bdd-2cbd4d0c12bf LED3の緑色 AzureSphereBlink1-3.imagepackage

f:id:matsujirushix:20191225213036p:plain

実行!

azsphere device sideload deleteで削除してから、azsphere device sideload deploy --imagepackageでデプロイ、実行すると、、、

f:id:matsujirushix:20191225213341p:plain

あれれ、2つ目でエラー。

app_manifest.jsonのCapabilitiesをまとめて書いてしまったのがいけなかったみたい。

実行するHLApp作り直し

CapabilitiesのGpioを1つずつにして、.imagepackageを作り直します。

f:id:matsujirushix:20191225213543p:plain

実行!(2回目)

さあ、どうだろう?

f:id:matsujirushix:20191225214035p:plain

f:id:matsujirushix:20191225214222p:plain

動いた♪

そういえば、HLAppは1個しか動かないと書かれていたような!?

そういえば、Azure SphereのdocsにHLAppは1つしか動かないと書かれていたような覚えが、、、(下リンクのP21)

www.slideshare.net

「Only one A7 application runs on the device at a time.」ってありますね。

元ネタのdocsを探してみると、、、

このあたり?
このあたり?

うーむ、見つからず。

結果

  • HLAppは複数動く。(Linux Kernelの恩恵)
  • app_manifest.jsonでリソース競合しているとデプロイできない。(まぁ、そうですよね)

2019/12/30追記
マイクロソフトからコンタクトがありました。(激汗
前に見たドキュメント情報のとおり、HLAppは1つだけ(only one)ということでした。 試した結果は複数動いてしまいましたが、、、現時点は、HLAppは1つだけしか動かさない前提で設計、利用したほうが良さそうです。