OneNET平台通信开发(九)

此博文介绍如何将代码移植到STM32单片机上,也是最后一篇关于OneNET的博文。以硬件STM32F103RCT6和ESP8266,系统为FreeRTOS为例。设AT命令使用USART1,ESP8266使用USART2,并且你已经配置好FreeRTOS。如果不会可百度搜索如何移植。下面简单叙述一下移植需要修改或注意的内容:

  1. AT命令需改造为接收USART1命令的Task;
  2. Socket需修改为接收并处理ESP8266的数据,并且Socket相关函数通过模拟发送AT命令与ESP8266模块交互发送网络数据;
  3. 以上两个Task需要消息队列,可模仿OneNET部分的消息队列实现;
  4. OneNET部分需修改C++的std::queue为FreeRTOS的消息队列。需注意的是FreeRTOS对于队列和系统Tick计数有两个不同版本的函数,一个在中断中调用(FromISR),一个在Task中调用,需注意修改;
  5. 这几个新增的Task创建时优先级应设为相同,我发现如果不一样会使系统异常,似乎低优先级的任务得不到调度;
  6. OneNET需要的栈空间比较大,我移植时设为4KB的栈,而其他的设为1KB。消息队列容量设置的都是24个;
  7. Timer修改为FreeRTOS提供的定时器,并在OneNET任务中启动它,这样可确保只有在OneNET任务跑起来后才用定时器发送消息;
  8. 函数malloc和free替换为FreeRTOS提供的内存分配函数。我移植时设的堆大小为25KB(此单片机有40KB的RAM);
  9. 输出字符串中的\n需修改为\r\n,否则串口调试工具显示的时候不换行。输出方式也要更改为串口输出;
  10. 最后需要将Keil设置为C99模式才能正常编译。

以下是移植的效果示例(其中+IPD开头的是ESP8266模块接收数据的输出,可以忽略。图中可以发现有的+IPD输出和AT+CIPSEND命令的回显会连在一块,不知道为什么,和淘宝店家交涉她也不知道原因。我仅仅在程序中屏蔽了这种错误情况认为这样的数据无效。但有时会造成上报数据后服务器的回复和AT回显连一块,导致模块以为服务器没有回复而出现超时错误。不过不会引起模块异常)。按照图的顺序分别是登录流程;FOTA数据下发;北向执行和写操作;北向写操作的Fiddler截图:

经过简单的测试Notify上报数据,在连续上报近一个小时,每1秒上报一次的过程中未出现异常。这说明在这方面程序没有内存泄漏。实际上在VS中已测试过起码在AT输入正常的情况下代码不会有内存泄漏。以下是OneNET平台方面的上报数据记录截图:

最后说明代码中已有的问题和不完善之处。仅供记录,这些代码不会再被更新了。

  1. BSREG和REG失败后没有恢复OneNET的状态和关闭Socket线程;
  2. BS结束后可能会切换到另一个BS服务器,而不仅仅是LwM2M服务器。未实现;
  3. 带条件的Observe命令,也即Write-Attribute命令的处理。未实现;
  4. 在注册成功或更新成功后,启动定时器,在生命周期快结束时自动更新以保持设备不掉线。未实现;
  5. FOTA下载收到数据后启动超时定时器,在定时器超时前未下发下一包数据,则认为FOTA流程中断。这是协议内容,但中国移动的SDK也没有这个功能;
  6. AT部分代码不支持可变类型的数据,即某个位置的参数可以是数字也可以是字符串或其他类型;
  7. 其他的如DTLS加密,SOTA等。

原文地址:https://www.cnblogs.com/mengxiangdu/p/11279751.html

时间: 2024-08-30 18:16:29

OneNET平台通信开发(九)的相关文章

OneNET平台通信开发(八)

前面已介绍完所有的代码文件.只需在VS2015中创建空的控制台应用程序,然后把所有文件添加到项目中即可编译使用.程序所使用的AT指令和中国移动OneNET SDK相同.本文展示程序效果: CoAP包无响应重发,Notify单包上传效果 北向执行操作和Notify组合上报数据效果,包含Fiddler收发截图 FOTA升级效果,由于是电脑模拟上报的数据都是固定的,所以在平台上创建FOTA任务时应把信号质量,电量设的小一些 测试所需AT指令如下列出: AT+MIPLCREATEAT+MIPLADDOB

SNF开发平台WinForm之九-代码生成器使用说明-SNF快速开发平台3.3-Spring.Net.Framework

下面就具体的使用说明: 1.获取代码生成器的授权码(根据本机)-----还原数据库-------改config-----代码生成器 改代码生成器Config 2.登录代码生成器 3.查看是否连接成功 4.配置参数 下图,可在字段右键选择控件编码字段,控件名称字段 5.生成代码 6.启动程序 这个系列教程文档,欢迎转载: SNF开发平台WinForm之十-Excel导入http://www.cnblogs.com/spring_wang/p/6128604.html SNF开发平台WinForm之

微信公众平台深度开发JAVA版第二季视频教程

微信公众平台深度开发JAVA版第二季(九宝饭店微信点餐系统)视频教程下载密码:qa4a     联系QQ:1026270010 微信作为当前流行的通信社交软件有了上亿的用户量,几乎每一个只能手机都要安装微信.但是,市场上对于JAVA开发微信公众平台的资料却少之又少,多数的资料一般是其他语言的.因此,主讲老师经过潜心研究.认真准备,录制了这套针对JAVA开发语言的微信公众平台开发教程. 1.课程研发环境 开发语言:JAVA WEBServer:TOMAT DATABASE:MySQL 开发工具:m

财富自由平台运营开发

财富自由平台运营开发 王泽:151.1222.4001(微/电)财富自由平台开发,财富自由商城模式开发,财富自由app系统开发,财富自由软件模式开发,财富自由理财.分红.分销.全返.公排.互助系统开发,财富自由定制开发.非平台客服,玩家勿扰!!! 现在,很多互联网巨头都在开始进行全球谋篇布局,互联网金融同样具有这样的趋势.中国是制造业大国,未来的目标是朝着金融强国发展.要实现这一目标,不光需要我们的银行业走出去,证券业走出来,还需要我们业已超前的互联网金融也加速国际化进程,在合适的时候及早走向全

【课程分享】ASP.NET MVC5&微信公众平台整合开发实战(响应式布局、JQuery Mobile,Windows Azure、微信核心开发)

对这个课程有兴趣的,能够联系我QQ2748165793 基础知识储备 ASP.NET MVC 5基础(6讲) 第一讲-初识ASP.NET MVC并搭建整合开发环境 第二讲-深入MVC开发模式 第三讲-C#核心语言特性 第四讲-C#核心语言特性(二) 第五讲-视图引擎Razor 第六讲-MVC核心工具 实战演练(11讲) 第七讲-体育商店(一):项目架构 第八讲-体育商店(二):数据库创建和訪问 第九讲-体育商店(三):分页和样式 第十讲-体育商店(四):布局和导航 第十一讲-体育商店(五):购物

微信公众平台深度开发JAVA版

课程讲师:翟东平 课程分类:Java 适合人群:高级 课时数量:18(30小节)课时 用到技术:微信公众平台,微信,java涉及项目:九宝饭店微信点餐系统 咨询QQ:1609173918 下载链接:http://pan.baidu.com/s/1dDB4ax7 密码:ebaw 1.课程研发环境 开发语言:JAVA WEBServer:TOMAT DATABASE:MySQL 开发工具:myeclipse.MySQL-Front等 其他:在手机应用中的CSS3+div布局.DWR.mybatis.

ASP.NET MVC5微信公众平台整合开发实战教程

<ASP.NET MVC5&微信公众平台整合开发实战(响应式布局.JQuery Mobile,Windows Azure.微信核心开发)> 课程讲师:57Code 课程分类:ASP.NET MVC 适合人群:中级 课时数量:29课时 用到技术:深入MVC开发模式.C#核心语言特性.C#核心语言特性(二).视图引擎Razor 涉及项目:体育商店.微信公众平台开发 咨询QQ:1337192913(小公子) 1.1.1.背景分析 庞大的微信用户数是微信公众平台重要性的根本 微信用户的真实性使

【课程分享】ASP.NET MVC5&amp;微信公众平台整合开发实战(响应式布局、JQuery Mobile,Windows Azure、微信核心开发)

对这个课程有兴趣的,可以联系我QQ2748165793 基础知识储备 ASP.NET MVC 5基础(6讲) 第一讲-初识ASP.NET MVC并搭建整合开发环境 第二讲-深入MVC开发模式 第三讲-C#核心语言特性 第四讲-C#核心语言特性(二) 第五讲-视图引擎Razor 第六讲-MVC核心工具 实战演练(11讲) 第七讲-体育商店(一):项目架构 第八讲-体育商店(二):数据库创建和访问 第九讲-体育商店(三):分页和样式 第十讲-体育商店(四):布局和导航 第十一讲-体育商店(五):购物

蚂蚁区块链BaaS平台应用开发指南(四):JavaSDK的接入

在尝试本节的样例代码前,需要保证目标智能合约已经按照蚂蚁区块链BaaS平台应用开发指南(三):从一个简单合约开始中的做法编译部署成功. 基于JavaSDK的接入 在上一节里,我们通过Cloud IDE部署了一个最简单的智能合约,并且通过Cloud IDE成功的调用了合约的方法.拿传统应用的开发来类比,这就像在数据库上增加了一个存储过程,然后通过外部应用来触发这个存储过程的执行.那么,对于区块链来说,外部应用又如何来调用部署好的智能合约?在这一节中,我们将会通过蚂蚁区块链提供到JavaSDK来接入