单播字符、字符串收发

1、刚开始,我们确实需要借助官方模板,添加简单的代码,做出通信基本收发实验,建立感性的认识。

2、然后,在官方代码基本实验基础上,了解相关的概念,掌握通信过程中原理,结合自己的理解,自己动手做一个个性化实验,验证我们的理解

3、单播、广播、组播、绑定

1)单播指:在zigbee网络里,模块之间要进行通信,发射模块非常明确知道接收模块的网络地址,以这个地址发送数据给接收模块。

zigbee模块地址特点:模块在入网的时候,父节点随机分配网络地址给子节点,但是协调器的地址在网络里的地址永远是0x0000.

在上节代码的基础上修改成发送:

在SDApp.c文件里面改

目的是按钮一按下,就数字发送出去;

把pRsp->nwkAddr改成0x0000,其大概意思是接收模块的网络地址是多少,即0x0000协调器的地址。

然后pRsp->epList[0],这个参数也得改

最终改成

这个函数的大概意思是把hello world这个字符串发送出去。

把修改后的代码按终端的方式编译。

下面是接收模块,接收模块我们只需要添加一行代码就可以了,如下

其大概意思是,本函数的参数是无线数据包的里面的内容afincomingMSGPacket_t,发送方发送数据到协调器模块,协调器模块会进入到上面函数,然后通过该参数携带的内容,其结构体如下

按照协调器模块来编译,那么就收器模块就好了。

实验验证,正确!

下面来看看协调器里面的接收函数在哪儿调用SDApp_MessageMSGCB,

先找到这个函数

在这里消息处理的时候,调用了该函数,

发送方发送数据的时候,接收方的底层,就把数据传递到应用层的SDApp_ProcessEvent处理函数来,再传到外部消息处理函数来,然后在该函数里面处理该数据包。

下面发送字符串

在发送端修改如下:

下面修改接收模块

要把接收到的字符串通过串口调试助手显示,故要移植串口文件

UART.c与UART.h,添加到工程

我们要用串口,就要对串口进行初始化,首先找到ZMain.c文件,

同时将串口的头文件添加进来

如果要取消TI默认对串口的配置,要在main函数里面的HaDriverInit函数,把对应的宏#define HAL_UART FALSE。这样我们的串口初始化就成功了。

在接受到字符显示的地方,修改为让串口发送这串字符串

测试成功

时间: 2024-10-07 18:52:23

单播字符、字符串收发的相关文章

【C语言天天练(十七)】字符/字符串输出函数fputc、fputs、putc、putchar和puts

#include <stdio.h> int fputc(int c, FILE *stream); int fputs(const char *s, FILE *stream); int putc(int c, FILE *stream); int putchar(int c); int puts(const char *s); fputc()写一个字符c,强制转换成一个unsigned char类型字符,到文件stream. fputs()写一个字符串到stream,省略字符串尾部的'\0

java字符 字符串

这个还是比较容易出现错误的 因为char+char计算时是int+int java字符 字符串,布布扣,bubuko.com

【C语言天天练(十八)】字符/字符串输入函数fgetc、fgets、getc、getchar和gets

#include <stdio.h> int fgetc(FILE *stream); char *fgets(char *s, int size, FILE *stream); int getc(FILE *stream); int getchar(void); char *gets(char *s); fgetc()读取文件指针stream所指向文件的下一个字符,返回值是所读取字符强制类型转换成整数的值,如果到达文件尾部或者出错,则返回EOF. getc()与fgetc()函数相同,只是它

ACM--字母个数--HDOJ 1860--统计字符--字符串

HDOJ题目地址:传送门 统计字符 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10211    Accepted Submission(s): 6396 Problem Description 统计一个给定字符串中指定的字符出现的次数 Input 测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第

C++ 之 字符 字符串

摘自百度百科 LPCTSTR,LPWSTR, PTSTR, LPTSTR,wchar_t区别 L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义.即win32中,long,near,far指针与普通指针没有区别,LP与P是等效的. P表示这是一个指针. T表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者

C 字符/字符串经常使用函数

string.h中经常使用函数 char * strchr(char * str ,char ch); 从字符串str中查找首次出现字符ch的位置,若存在返回查找后的地址.若不存在则返回NULL void main(){ char a[100]="abcdefg"; printf("%o\n",strchr(a,'f')); //返回字符f的地址 printf("%d\n",strchr(a,'f')-a); //返回字符f在字符串中的下标 }

字符 字符串 字符数组 字符串指针 指针数组

一.字符串指针.字符数组 1. 字符串指针:字符串指针变量本身是一个变量,用于存放字符串的首地址.而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以'\0'作为串的结束. char *ps="C Language"; 可以写为: char *ps;  #ps字符串指针,是指针,是一个变量, ps="C Language"; #ps为字符串的首地址,利用ps++可遍历字符串,字符串存储在以ps为开始地址的地段连续的内存空间中,并以'\0'作为字符串的结束.

[C#]根据索引替换字符/字符串

关键代码: #region 根据索引替换字符 /// <summary> /// 根据索引替换字符 /// <para>eg:Assert.AreEqual("ZBCDEFGHIJ", StringHelper.ReplaceAt("ABCDEFGHIJ",0,'Z'));</para> /// </summary> /// <param name="data">需要操作的字符串<

剑指offer-第一个只出现一次的字符-字符串和数组

用到的算法都是像冒泡排序,直接选择排序,插入排序 每趟进行处理,这个趟是没有什么实际意义的 变量j一次从头走到尾进行一次循环枚举遍历扫描 一.题目:第一个只出现一次的字符 题目:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'.要求时间复杂度为O(n). 最直观的想法是从头开始扫描这个字符串中的每个字符.当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符.如果字符串有n个字符,每个字符可能与后面的