回答

收藏

kyLinMini学习笔记:5. NET代码学习之task

物联网 物联网 3318 人阅读 | 0 人回复 | 2017-09-02

本帖最后由 jasonwangse 于 2017-9-2 22:25 编辑

在main函数中可以看到,mini板启动后,总共创建了11个应用任务,分别是


监测任务除了前几篇帖子中提到的那几个与NET IO和NET device相关的结构体,还有下面这个CHECK_INFO的结构体

CHECK_INFO checkInfo = {DEV_ERR, DEV_ERR, DEV_ERR};

几个比较复杂任务的分析:
USART_Task
这个任务是轮询检测USART2是否有数据接收,也就是ESP8266是否给CPU回送数据了,如果有数据回送,那么调用OneNet_RevPro处理。这里有一点需要注意,就是netDeviceInfo.dataType虽然注释上写的是“设定数据返回类型--16种”,但其实它只是作为了是否可以调用NET_IO_WaitRecive的一个互斥的flag,因为调用完NET_IO_WaitRecivenetIOInfo.rev_idle就被置为了REV_WAIT;如果不做互斥处理,两次调用NET_IO_WaitRecive就会出现丢包的现象。
NET_DEVICE_GetIPD里面会调用NET_IO_WaitRecive,任务USART_Task一直在轮询地调NET_DEVICE_GetIPD,而命令发送接口NET_DEVICE_SendCmd里也会调用NET_IO_WaitRecive,所以优先保证发送命令接口,当netDeviceInfo.dataType为1时,可以调用,为0时USART_Task任务死等,这其实还是裸机编程的思路,没有用上操作系统的任务间通信功能。

NET_Task
任务每隔25ms检查oneNetInfo.netWorkcheckInfo.NET_DEVICE_OK,在判断ESP8266正常,但是没有接入OneNET时,重新调用NET_DEVICE_Init初始化ESP8266,再调用OneNet_DevLink连接OneNET。当ESP8266检测异常时,调用NET_DEVICE_Reset复位ESP8266,再调用NET_DEVICE_Exist判断设备正常时标记checkInfo.NET_DEVICE_OK为DEV_OK

DATA_Task
从平台接收命令的反馈和传感器数据的上传,都是靠这个任务来完成,任务每隔50ms检查一下状态,如果是SEND_TYPE_DATA,则调用OneNet_SendData上传数据;如果是SEND_TYPE_HEART,则调用OneNet_SendData_Heart上传请求心跳的报文。然后再调用OneNet_Check_Heart检测心跳

这样kyLinMini上运行的所有任务就都过了一下,链路正常的情况下,在EDP协议下同OneNET平台交互的框架大概就如下图所示,其他的任务实现的大多就是初始化以及监测功能,主要是异常情况的处理


接下来准备研究如何通过云平台向设备发送数据,先实现一个小目标:OneNET发送数据到kyLinMini后,设备可以将数据存入EEPROM。

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条