接收节点无线广播发送的数据,并printf打印出来(含核心代码)_物联网挑战赛第四届第一题

news/2024/4/30 4:44:04/文章来源:https://blog.csdn.net/weixin_53050357/article/details/127146497

目录

题目

赛题

格式说明

计分规则

评分步骤

题目解析

右上角节点代码解析

其余11个节点代码解析

比赛时的思考

具体解析

核心代码

右上角节点代码

其余11个节点代码


题目

赛题

数据广播节点—>
如图所示,平台节点不安装天线,12 个节点 ID 号随机,左上角的节点作为数据广播节
点,每隔 1 秒往外重复广播负载为 1 个字节的数据包(该广播代码由组委会提供),参赛队
需编写其他 11 个节点的代码,在考虑多跳传输的情况下,获取到该广播包的负载,最终 11
个节点通过 printf 语句将该负载打印到平台,从而表明任务的完成。

1) 11 个节点只允许编写一份代码,代码中可通过宏 TOS_NODE_ID 获取自身 ID 号;
2)本题开销指的是除左上角节点外的另外 11 个节点无线通信发送数据包的总和;
3)左上角节点代码由组委会提供,参赛队可自行查阅和修改负载内容(不可修改格式)
以验证代码;
4)左上角节点烧录完成 10 秒后停止评分,参赛队需在 10 秒内完成数据包的发送;
5)广播的数据为同一数据,参赛队无需多次接收并转发,多次转发时需考虑其造成的
网络开销;
6)参赛队编写的和结果无关的 printf 调试语句,必须在最终代码中注释掉,以免造成
最终结果输出错误。

格式说明

1)左上角广播的数据包的负载为一个字节,示例如下:
00 FF FF 00 00 01 00 06 12
前 8 个字节 00 FF FF 00 00 01 00 06 固定,后 1 个字节 12 为随机的某字节,参赛队
需编写代码接收此结构的数据包;
2) Printf 输出的格式为:标志位(Data)+1 个字节负载(十进制,并以空格隔开,结
尾应加上换行符“In”以表明语句的完结)
广播数据包:00 FF FF 00 00 01 00 06 12
正确的输出结果:Data 18
注意:输出的结果应完整正确,数据必须以十进制输出,例如上述示例的 0x12 的
十进制为 18;
3)每个节点的结果可重复输出,计分时只会以每个节点最后一组含有标志位 Data 的
行作为判分依据;

计分规则

本赛题满分为 30 分,其中正确性得分 22 分,开销得分 8分;
1)正确性得分:共 22 分,正确性得分不少于 14 分才可以获得开销分;
正确性得分  =22*(m/11)      (m≥7)
m 为 11 个节点正确输出结果的数量
2)开销得分:共 8 分,开销超过 50 得分 0 分,小于 50 按如下公式如下:
开销得分   =8*(50-n)/50    (0<n<50)
 n 为 11 个节点的开销总和

评分步骤

1)烧录 Null程序,清空节点状态;
2)编译烧录参赛队代码(参赛队的 11 个节点);
3)对 11 个节点进行 printf 监听;
4)烧录左上角数据广播节点代码,烧录完成后,开始计时;
5) 10 秒后停止监听,核实各节点的输出结果和开销量,计算出得分;

题目解析

由题目可知,右上角的节点是由主委会给出的,但因为我们这是平时练习,所以右上角节点的无线发送数据的代码,也由我们自己来写吧。

右上角节点代码解析

由题意可知,右上角这个节点,是个工具节点,其目的就是给其余11个节点每隔一秒发一个固定数据包,所以我们只需要用到无线通信的发包函数就可,再用一个定时器每隔1000毫秒调用以下无线发包函数,就完成啦。

其余11个节点代码解析

比赛时的思考

这11个节点的代码也很简单,但我们比赛更要注意分数,在每个节点都完成任务的同时,要使发包数达到最小,才算胜利。而这道题目,这11个节点根本不用发包,也能完成任务。

具体解析

只需要用到无线接收函数即可。先定义一个与右上角发送数据包同类型的结构体,这个结构体在收包的时候进行判断是否是我们需要的数据包,判断成功后,printf打印出来即可。这里不用限制打印次数,反正发包数还是为0。

核心代码

右上角节点代码

event void MilliTimer.fired() {if (locked) {    //锁机制的实现AMSend.sendDone判断发包正确后,会解除锁机制return;}else {radio_count_msg_t* rcm = (radio_count_msg_t*)call Packet.getPayload(&packet, sizeof(radio_count_msg_t));    //rcm指向packet的负载if (rcm == NULL) {return;}//如果负载不为空,就将counter的值赋值给rcm->counterrcm->counter = 0x16;        //定义发包的内容//AM_BROADCAST_ADDR:无线通信中,代表广播//如果改成  0x01,那就是向1号节点发送单播if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(radio_count_msg_t)) == SUCCESS) {    //无线发包locked = TRUE;                                                                                //打开锁机制 ,锁住后,转到senddone}}
}

其余11个节点代码

event message_t* Receive.receive(message_t* bufPtr, void* payload, uint8_t len) {    //节点接收数据,无线收包if (len != sizeof(radio_count_msg_t)) {return bufPtr;}    //判断是否是我想要的包else {                                                    //如果是我想要的包radio_count_msg_t* rcm = (radio_count_msg_t*)payload;    //rcm指向包的负载//如果rcm->counter == 1,那么 1 & 0x1 == 0x1,所以LED0会亮,以下同理printf("Data %d",rcm->counter);printfflush();return bufPtr;}
}

如果有帮助的话,欢迎点赞收藏哦~🤩,有不同见解或更好的观点也可以在评论区留言,也可以笔者点点关注,互通有无,互相进步。关于物联网挑战赛更多内容,请订阅笔者的物联网挑战赛的专题哦,持续更新中~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_17633.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解库存监控 到货提醒步骤

首先看看具体监控效果&#xff0c;在浏览器的书签栏增加一个库存监控提醒的按钮&#xff0c;点击该按钮即启动库存监控提醒项目。 项目运行时&#xff0c;自动打开指定的网址&#xff0c;并从事先准备好的txt文件中读取型号&#xff0c;输入到页面上的型号搜索框中&#xff0c…

java基于springboot+element的实现医院预约挂号系统 nodejs

网络的广泛应用给生活带来了十分的便利。所以把医院预约挂号管理与现在网络相结合,利用java技术建设医院预约挂号系统,实现医院预约挂号的信息化。则对于进一步提高医院预约挂号管理发展,丰富医院预约挂号管理经验能起到不少的促进作用。 医院预约挂号系统能够通过互联网得到广…

OPENCV的GUI特性:图像入门

我们先来理解一下什么是GUI特性&#xff1b;一起来学习摘自百度词条的信息&#xff1a; 图形用户界面&#xff08;Graphical User Interface&#xff0c;简称 GUI&#xff0c;又称图形用户接口&#xff09;是指采用图形方式显示的计算机操作用户界面。 图形用户界面是一种人与…

模块化:AMD规范

之前在《模块化&#xff1a;CommonJS规范》文中对CMD规范进行了介绍&#xff0c;并给出了服务端和浏览器端基于CommonJS模块化规范构建项目和模块化开发的示例demo。严格来讲&#xff0c;CommonJS这种模块化规范更加适用于服务器端编程&#xff0c;由于是同步的加载方式&#x…

ElasticSearch_02_ElastisSearch的基本语法使用

系列文章目录 文章目录系列文章目录前言一、基本语法使用1.1 _search接口获取所有数据1.2 文档操作插入文档查询文档修改文档查询所有的索引和查询所有的数据删除文档二、各种各样的查询条件2.1 查询所有2.2 值匹配和输出结构按price倒序输出2.3 仅输出需要的数量2.4 仅输出需要…

论文(一):Revisiting multiple instance neural networks

Revisiting multiple instance neural networks 回顾多示例神经网络 1、Abstract ​ 近年来&#xff0c;神经网络和多实例学习(MIL)都是人工智能相关研究领域的热门课题。深度神经网络在监督学习问题上取得了巨大的成功&#xff0c;而MIL作为一种典型的弱监督学习方法&#…

J2EE 知识点总结_上

J2EE 知识点总结_上基础概念数组选择排序 &#xff1a;交换排序 &#xff1a;插入排序面向对象重载&#xff08;**Overload**&#xff09;的概念构造器的作用&#xff1a;JavaBean多态性instanceof 操作符操作符与equals方法&#xff1a;包装类(Wrapper)的使用垃圾回收机制关键…

RLE算法机制、缺点及哈夫曼算法和莫尔斯编码

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 目录 一、RLE算法机制 二、RLE算法的缺点 三、哈夫曼算法和莫尔斯编码 一、RLE算法机制 对 AAAAAABBCDDEEEEEF 这17个半角字符的文件&#xff08;文本文件&#xff09;进行压缩。虽然这些文字没有什么实际意义&#xff0…

Spring源码分析(三)Bean生命周期源码解析1:扫描生成BeanDefinition

Spring最重要的功能就是帮助程序员创建对象&#xff08;也就是IOC&#xff09;&#xff0c;而启动Spring就是为创建Bean对象做准备&#xff0c;如果先分析Spring启动过程的源码&#xff0c;会比较难理解&#xff0c;因为你可能不知道为什么要做这些准备动作&#xff0c;所以我们…

Shiro知识总结二

3. 与 Spring Boot 整合 3.1 框架整合 依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>o…

java基于springboot+vue+nodejs的高校学生健康档案管理系统 element

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,高校学生健康档案管理系统就是信息时代变革中的产物之一。 在经济快速发展的带…

快速玩转Yolov5目标检测—没有好的显卡也能玩(二)

上篇 快速玩转Yolov5目标检测—没有好的显卡也能玩&#xff08;一&#xff09; 已经将YoloV5在我的笔记本电脑上快速跑起来了&#xff0c;因为电脑显卡一般&#xff0c;所以运行的CPU版本&#xff0c;从推理结果来看&#xff0c;耗时还是蛮高的&#xff0c;如下图&#xff0c;…

03 NLP-神经网络基础常识复习2-计算图(乘法节点,分支节点,Repeat节点,Sum节点,MatMul节点)

下面&#xff0c;我们将研究误差反向传播法。不过在此之前&#xff0c;作为准备工作&#xff0c;我们先来介绍一下计算图的相关内容。计算图是计算过程的图形表示。所示为计算图的一个例子 计算图通过节点和箭头来表示。这里&#xff0c;“”表示加法&#xff0c;变量x和y写在各…

【流放之路闪电打击开荒攻略】

重点1&#xff1a;每次攻击杀1群白怪 重点2&#xff1a;地图区域等级-4《角色等级《地图区域等级2 重点3&#xff1a;非boss战斗不死亡 重点4&#xff1a;对下阶段成长有目标&#xff0c;搜集装备 国际服网址 G&#xff08;green&#xff09;R&#xff08;red&#xff09;B&am…

SSTI基础知识

我们用如下环境进行讲解(flask-jinja2):from flask import Flask from flask import render_template from flask import request from flask import render_template_string app = Flask(__name__) @app.route(/) def index():code = request.args.get(id)template = <h3&…

【Pandas总结】第九节 Pandas_累计与分组 pd.groupby()

文章目录一、数据准备二、累计值计算2.1 df.describe()2.2 常用统计值三、分组 pd.groupby()四、更多的使用方法aggregate(),filter(),transform(),apply()4.1 aggregate()4.2 filter()4.3 transform()4.4 apply()在对较大数据进行分析时&#xff0c;有一项最基本的工作就是&am…

2022-09-18-事务机制与锁

事务机制与锁 事务ACID特性(4大特性):原子性;一致性;隔离性;持久性。事务隔离性(四大隔离级别):读未提交;读已提交;可重复读;串行。脏读:读到了别的事务还没有提交,可能随时会被回滚掉的,有可能不存在的数据,这叫做脏读。 可重复读:我第一次查到的数据,我之后…

【选择】选择排序、堆排序(大根堆【升序】,小根堆【降序】)

简单选择排序 思想&#xff1a;默认0号位&#xff0c;定义为min&#xff0c;再从第二位起&#xff0c;遍历所有&#xff0c;找到一个更小的&#xff0c;把下标赋给min&#xff0c;遍历结束&#xff0c;如果当前i下标的值不是min&#xff0c;则说明min更新&#xff0c;有更小的…

【牛客-算法】 NC48 在旋转过的有序数组中寻找目标值

文章目录&#x1f6a9; 前言1.题目描述2.算法设计思路3.算法实现bug记录&#x1f9ed; 遇到问题&#xff08;可跳过&#xff09;&#x1f33b; 写在前面我最初的通过代码&#xff08;C语言&#xff09;4.运行结果5.小结&#x1f525; 该专栏作为算法题笔记&#xff0c;记录算法…

Bert在fine-tune训练时的技巧:①冻结部分层参数、②weight-decay (L2正则化)、③warmup_proportion、④

作为一个NLPer&#xff0c;bert应该是会经常用到的一个模型了。但bert可调参数很多&#xff0c;一些技巧也很多&#xff0c;比如加上weight-decay, layer初始化、冻结参数、只优化部分层参数等等&#xff0c;方法太多了&#xff0c;每次都会纠结该怎么样去finetune&#xff0c;…