在Windows IoT Core上如何實現多個UWP應用程式共同控制同一個GPIO PIN
微軟官方在GitHub上提供了IoT的很多示例(https://github.com/Microsoft/Windows-iotcore-samples),其中有兩個示例是控制LED等的,一個是Headed的UWP應用程式(HelloBlinky),一個是Headless的後臺任務(HelloBlinkyBackground)。這兩個示例都是單一的應用程式控制一個PIN。
本文我們討論的是在Windows IoT Core上如何實現多個UWP應用程式共同控制同一個PIN。我們可能會遇到這樣一個場景,通過一個LED燈的狀態來直觀的顯示自己開發的多個應用程式的執行狀態,如果所以的應用程式都沒有出現異常,則LED燈不亮,如果有任何一個或多個應用程式中出現了異常,則LED燈亮,直到所以的異常全部消除。對於這種場景,我們不可能在每個應用程式中使用GpioController來控制同一個GpioPin,因為一旦一個應用程式獲得了該PIN的訪問權,則其他程式域的控制器無權獲取,這是排他性的表現。
那麼我們來如何實現這一功能呢?要實現這個功能,那麼我們會想到使用一個服務來提供給多個應用程式,所以的邏輯和GPIO的控制在這個服務中實現。App Service是我們可以考慮的一個解決方案。App Service的使命正是為應用程式提供資料共享、互操作和跨程式域通訊。然而有點遺憾的是,微軟官方文件中沒有描述如何將App Service寄予Headless的Background下,當然App Service本身也是一個Background Task。
我們可以使用Windows IoT Core的Visual Studio Project模板建立一個Background Application,例如 AppErrorCrossDomainMonitorService。
程式碼示例可以從這兒下載(https://gitee.com/whiteman/AppErrorCrossDomainMonitor)。