现在来看这个需求,在上了前面的课程后,相信大家心里已经有了实现它的方法脉络了
我们对于mini开发板和阿里云服务器的MQTT设备建立通信,有两种方案来实现:单任务和多任务
在只使用一个任务的这个情况下,代码逻辑和裸机其实差不多了
而多任务方案,就是将控制的外设都各自分配一个任务来控制
对于单任务控制LED和读取按键我没有多说,因为和裸机控制差不多,比较简单
我想给大家讲的是FreeRTOS下多任务消息、数据互通的机制以及我在调试过程中因为疏漏遇到的bug
发出任务通知的API,其参数的解释我给大家翻译成中文放到表里面了
我们认为控制LED,只需要让LED任务能够获取到一个具体确切的控制通知即可,不需要复杂的置位、递增等
而且,即便led任务漏掉一次通知,也无所谓,所以采用了覆盖写任务通知的那个动作
但是我们可以完善,我们可以在上层发出控制LED指令后,去读取LED的状态,看LED是否真的根据控制指令做出了对应的响应
这就需要给LED加一个能读取状态的底层驱动以及在上层平台层做对应封装了
而且也要考虑我们是否可以用【不过滤写任务通知 】来规避下这种情况
既然一个任务就可以实现,为何不用裸机模式要用FreeRTOS?
①因为业务逻辑过于简单,因而才可以一一个任务就可以完成;
②物联网应用中通常涉及多种传感器、多条数据流,用RTOS能够
③Paho MQTT已经为我们实现了基于FreeRTOS的C库,节约开发时间;
关于具体调试的一些问题,我会在下一篇文章一起总结
以上为学习百问网的【7天物联网智能家居】课程的学习笔记,百问网的老师的视频课还有文字直播课,能把问题讲的很清楚,QQ群内的答疑也很及时,适合新手入门和提高。