TinyOS系列——服务器远程指令多跳实现过程中问题及解决方案

开发经验:

1、嵌入式程序,调试可能比较麻烦,一定要有耐心,戒骄戒躁

2、开发之前一定要理清自己的逻辑框架,不然只能越写越乱

3、代码开发与测试迭代进行,一步一步,如果代码量过大,很难跟踪找到问题出错的点

开发步骤:

模块开发必须理清自己的思路以及逻辑,学会分步进行:

1、测试节点C[i]是否能够正常接收、发送数据,全部需要测试一遍,确定节点能否正常使用,否则后续工作无法正常进行
2、测试发送模块A向基站B广播消息后,基站B能否正常接收
3、修改发送模块与节点程序,测试发送模块A->节点c[0]->基站B(ACK)是否正常 (关键步骤)
4、修改c[i],测试发送模块A->c[0]->c[1]->c[2]->c[3]->c[4],c[4]广播ACK到基站B是否正常
5、模块任务完成

开发过程中遇见的问题以及解决方案:

1、问题一,越界问题:cc2420发送模块,一条消息的最大长度为26字节(带控制信息),所以在data部分,要控制好包的长度,否则无法消息无法正常传递

 1 typedef nx_struct PCUartCmd {
 2     nx_uint8_t nodeid;
 3     nx_uint16_t data;
 4
 5     nx_uint8_t relay1;
 6     nx_uint8_t relay2;
 7     nx_uint8_t relay3;
 8     nx_uint8_t relay4;
 9     nx_uint8_t relay5;
10
11     nx_uint8_t  yuliu;
12 } PCUartCmd;
13
14 typedef nx_struct PCUartCmd_ack{
15     nx_uint8_t nodeid;
16
17     nx_uint8_t type;
18
19     nx_uint8_t relay1;
20     nx_uint8_t relay2;
21     nx_uint8_t relay3;
22     nx_uint8_t relay4;
23     nx_uint8_t relay5;
24
25     nx_uint8_t  yuliu;
26 }PCUartCmd_ack;

  解决方案:

  1)尽量减少字节的使用:比如有5个relay值来记录中间路由,完全可以将hop去掉,通过优化算法来减少字节数使用

  2)如果ACK只是起确定消息是否正常到达的作用,那么ACK包完全没有必要带data值

2、问题二,如果struct中最后没有设定额外的字节,在串口调试助手中data的最后一个字节无法正常显示

  解决方案:

  1)每个struct设计,最后都要有yuliu值,否则在串口调试助手中无法正常显示data的最后一个字节,会跟控制信息出现冗余

却分

3、问题三,程序冗长

  解决方案:

  1)公共部分提取,构造函数实现

 1 void SendCmdMsg(int nodeId,int cmd,int relay1,int relay2,int relay3,int relay4,int relay5,int yuliu)
 2 {
 3
 4     PCUartCmd* cmdpkt = (PCUartCmd*)(call Packet.getPayload(&pkt, sizeof(PCUartCmd)));
 5
 6     cmdpkt->nodeid = nodeId;
 7     cmdpkt->data = cmd;
 8
 9     cmdpkt->relay1 = relay1;
10     cmdpkt->relay2 = relay2;
11     cmdpkt->relay3 = relay3;
12     cmdpkt->relay4 = relay4;
13     cmdpkt->relay5 = relay5;
14     cmdpkt->yuliu = yuliu;
15     call AMSend.send(nodeId, &pkt, sizeof(PCUartCmd));
16
17 }

TinyOS系列——服务器远程指令多跳实现过程中问题及解决方案,布布扣,bubuko.com

时间: 2024-10-13 12:32:38

TinyOS系列——服务器远程指令多跳实现过程中问题及解决方案的相关文章

JS请求服务器,并返回信息,请求过程中不需要跳转页面

js请求服务器,并返回信息,请求过程中不需要跳转页面 这个可以通过jQuery框架轻松实现,jQuery中包含多种ajax的请求方式,详细可以参考下对应 的API. 你上面定义的按钮类型是submit,如果是在form当中,将会自动提交当前form表单,建议,如果可能的话将其修改为button类型. 下面给出通过jQuery的$.post方式,异步获取服务器的JSON数据. 功能代码: <script type="text/javascript"> $(function()

SQL Server 2005 sa登录失败。已成功与服务器建立连接 但是在登录过程中发生错误。 provider 共享内存提供程序 error 0 管道的另一端上无任何进程。

SQL Server 2005 Express版 用户 'sa' 登录失败.该用户与可信 SQL Server 连接无关联.提示错误:已成功与服务器建立连接 但是在登录过程中发生错误. provider 共享内存提供程序 error 0 管道的另一端上无任何进程. 解决方案: 1.首先选中服务器(右键)->属性->安全性->服务器身份验证修改为"SQL SERVER和WINDOWS身份验证模式"2.其次展开服务器下面的"安全性"文件夹->登陆

Postman系列一:Postman安装及使用过程中遇到的问题

一:Postman的简介.下载安装及界面说明 1.Postman的简单介绍 Postman是一款强大的网页调试和发送网页HTTP请求的工具,Postman让开发和测试人员做API(接口)测试变得更加简单.在我使用Postman之前还有一个版本,就是需要下载谷歌浏览器才能使用,是Postman Chrome app,由于没有使用过不做介绍,目前官网已经对Chrome app已经停止维护,官网也不推荐使用.我使用的属于Postman native app. 2.Postman的下载和安装 直接在浏览

TinyOS系列——网关接收服务器指令模块,实现的难题及解决方案

今天刚刚把棘手已久的问题解决,感觉特别开心,想记录一下解决的思路. ------------------------------------------------分割线---------------------------------------------------- 1)首先,假设节点内已经烧好了写好的程序,那么通过PC端的串口调试助手,完全可以完成这个任务 2)其次,节点通过串口接收数据用的是ATmega128,那ATmega128串口这块如何配置? 推荐一个网址,http://blo

Linux服务器部署系列之六—远程管理篇

做为网络管理员,我们不可能总是在机房操作服务器,对于windows服务器,我们可以通过远程终端或netmeeting进行操作.但是对于Linux服务器呢?我们也可以使用远程工具进行操作,常用的远程管理服务有telnet,SSH,VNC等,这些远程管理服务虽然都能做远程管理用,但是他们在功能及使用方面还是各有千秋.今天我们就来谈谈使用这些不同的远程管理服务工具管理Linux服务器. 本文中的服务器IP地址为192.168.99.9,服务器使用系统为:CentOS 5. 一.Telnet 1. 软件

不想作死系列--win7远程linux桌面之vncserver

1.在linux服务器上安装vncserver yum install vncserver 或者下载相应linux版本的tigervnc-serverrpm rpm -ivh tigervnc-server-***** 2.配置vncserver 启动配置vncserver桌面2 ,这里输入匹配密码就好 vncserver :2 修改/etc/sysconfigue/vncserver 在末尾    VNCSERVERS="2:root"     VNCSERVERARGS[3]=&q

Dell PowerEdge 系列服务器的远程控制命令

Dell PowerEdge 服务器远程控制参考手册 本手册介绍 Dell PowerEdge 系列服务器的远程控制命令. 远程控制功能 本文所涉及的远程控制是指基于主板 Baseboard Management Controller (BMC) 或远程控制卡 Remote Access Controller (RAC)的操作办法,主要是指在主机加电.网络连通的前提下,远程开关机,切换启动媒介,查看主机硬件状态,远程查看控制台并安装操作系统.其中终端和 刷系统的功能需要安装企业版远程控制卡:开关

批量检测GoAhead系列服务器中Digest认证方式的服务器弱口令

最近在学习用python写爬虫工具,某天偶然发现GoAhead系列服务器的登录方式跟大多数网站不一样,不是采用POST等方法,通过查找资料发现GoAhead是一个开源(商业许可).简单.轻巧.功能强大.可以在多个平台运行的嵌入式Web Server.大多数GoAhead服务器采用了HTTP Digest认证方式,并且部分服务器采用了默认账号密码,于是萌生了针对GoAhead编写爬虫的想法,通过近8个小时的编程与调试,勉强写出了个简陋的脚本,现在拿出来分享,给刚接触python的新手参考下,也请求

漏洞预警 | ECShop全系列版本远程代码执行高危漏洞

2018年9月1日,阿里云态势感知发布预警,近日利用ECShop全系列版本的远程代码执行漏洞进行批量化攻击量呈上升趋势.该漏洞利用简单且危害较大,黑客可通过WEB攻击直接获得服务器权限. 漏洞原理 该漏洞产生的根本原因在于ECShop系统的user.php文件中,display函数的模板变量可控,导致注入,配合注入可达到远程代码执行的效果.使得攻击者无需登录等操作,直接可以获得服务器的权限. 首先从user.php文件入手,代码中可以看到,系统读取HTTP_REFERER传递过来的 内容赋值给$