腾讯云物联网设备端学习---数据模板功能及实现

| 2019-05-17

本系列主要目的在于记录腾讯云物联网设备端的学习笔记,并且对设备端SDK进行补充说明。
 
简介
数据模板设计如下:
数据模板设计与实现

设计思路
根据数据模板协议,分为5个文件:
 
data_template_common.c:实现通用接口,如订阅,取消订阅,发布等。
data_template_client.c:实现对外API接口
data_template_property.c:包含属性下行以及上行处理
data_template_event.c:包含事件下行以及上行处理
data_template_action.c:包含行为下行以及上行处理

上行消息
主要通过publish进行发送,这里不做赘述。其中属性会涉及到多种上行消息,这里可以通过联合类型来统一接口:

 
下行消息
其中,每个不同topic(property/event/action)将注册一个context用作管理下行消息的上下文,设计如下:

主要包括相应的回调以及回调需要使用的用户数据,这里使用了联合类型,从而避免了出现过多的形参类型。
 
内存优化
重构前的版本,在使用中,由于每次json解析都是动态申请来传递节点,对于资源受限的设备将带来很大的内存消耗和开发上的困难。
 
相比于重构前的版本,该版本主要对json库进行了改造,将相应的消息传递给上层时,采用指针+长度的方式替代了之前的动态申请的方式,从而降低了内存。原因如下:
 
实际应用中,大部分消息在回调中就被消耗完了,所以完全可以利用mqtt包本身的存储空间
在处理字符串数据的时候,目前CI工具推荐使用安全函数如(strncpy等),所以使用指针+长度更为方便
对于回调结束后保留的数据最好交给用户处理,而不是sdk内部申请来释放,从而减少内存泄漏风险
具体实现可以参见utils_json_value_get

编辑:航网科技 来源:腾讯云 本文版权归原作者所有 转载请注明出处

在线客服

微信扫一扫咨询客服


全国免费服务热线
0755-36300002

返回顶部