在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)。

猜你喜欢

转载自my.oschina.net/u/3489145/blog/2986402