Zigbee自定义任务初始化|学习笔记

简介: 快速学习Zigbee自定义任务初始化

开发者学堂课程【嵌入式之RFID开发与应用2020版Zigbee自定义任务初始化】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/665/detail/11138


Zigbee自定义任务初始化

 

代码学习分析

这节课介绍代码,该代码比较完整。

首先,创建了一个任务即“my_Init”,该任务在 window-6OSAL_SampleApp.c(Project\...\Source)中,将原身的注释掉了,加入了自己的“my_Init”,其他的在讲 osl 时已经讲过了。在注册任务时,首先是串口初始化,因为在提供的资料里面有介绍如何去修改串口,不过官方提供的代码有一点问题是不能支持 printf,若想支持 printf,需要做一些简单的修改。官方提供的接口为“HaLARWrite”,其只能打印字符串,不能格式化输出,所以需要修改后即可使用 printf。这里 printf 还做了一些包装,将其包装成 debug,从而在调试信息时,可以知道是在哪一行输出的,比较人性化,非常有利于调试。

//任务初始

void my_Init( uint8 task id)

{

my_TaskID= task_id;

MT_UartInit();//串口初始化

MT_UartRegisterTaskID(task_id);//登记任务号

/*GPIO初始化 */

P1DIR =(1<<0); //P1_0定义为输出

P1DIR =(1<<1); //P1_1定义为输出

P2INP &=~(1<<6);//打开上拉

LOCAL LED1 = SWITCH LED CLOSE;

LOCAL LED2 = SWITCH LED CLOSE;

P1INP &=~(1<<3);

P1SEL &=~((1<<0)|(1<<1)|(1<<3));

P1DIR=(1<<0)(1<<1)(1<<3);

SWITCH LED = SWITCH LED CLOSE;

另外,双串口有兴趣的可以自行查看,在初始化时加了一些东西,其是纯双串口基于裸机开发。因为这部分模块串口设计的有些问题,此处看一下底板就知道了,

image.png

比如上图调试差的 USB,该处用的为 P0 2/UARTO RX 串口0用到 CP2102的 USB 上面去 USB 转串,例如串口一个功能用于调试即 debug,但是对于协调器,应该还有一个串口用于网关通信,uart->gatway,要将数据通过串口、网关传送到 pc 或云端,但如果只有一个串口,该串口做了调试口就无法做网关的通讯接口。所以准备用另一个串口,该串口正好外面有4个帧没有焊,接口已引出,遗憾的是 p02、p03竟然和 CP2102中一模一样,即把同一个串口引到了不同的地方,所以 CC25xx_TOP_INTERFACE 中接口无法使用,若用还是刚刚的串口。还有一个串口在 DIP_2*5_2.54mm 中,该位置是接传感器的地方,意味着协调器必须将传感器去掉,才能够连接串口和三维机通信。

image.png

该模块黑色的线为 USB,手指位置是串口,两处用的是同一个串口,所以无法使用该串口。仅可使用传感器下的串口,需要将传感器拔掉。拔掉后只有核心板,该传感器已经被拔掉,从中单独接几根线接到电脑上去完成通信,所以会稍微麻烦一点,而且本身不支持第二个串口,也是需要稍微修改一下,让其支持第二个串口。以上是需要注意的几个地方,在原身的基础上做的一些修改。

image.png

接下来继续分析代码,以上是串口部分,登记任务号是为了保证将来能够将数据发到串口中。接下来是初始化了 LOCAL ,该处用到的 LOCAL 主要是三个。第一个是接电器 SWITCH_LED P1_3,其实就是一个 LOCAL,其通过底板可以看出它只是用到了 P1_3,而 P1_3是作为接电器的 L,要控制强电需要它来控制。除此之外,还有两个分别是 LOCAL_LED1 和 LOCAL_LED2,

P1_0 、P1_1是板上的两个 LED 灯。

#define SWITCH_LED  P1_3

#define LOCAL_LED1  P1_0

#define LOCAL_LED2  P1_1

 image.png

接下来看一下实物,手指位置为接电器,由 P1_3 控制的接电器。下方有两个灯即为 P1_0和 P1_1,两个灯直接可以看到,接电器可以外接,可以有常开常闭,也可以自己接外设,如灯、风扇灯均可。这是三个灯的介绍,要清楚是介绍什么的。

 image.png

接下来对三个 LOCAL 都配置了输出,SWITCH_LED 是开关,不是 LED 的,其上面也有 LED,但主要是为了实现强电的控制。

P1INP &=~(1<<3);

P1SEL &=~((1<<0)|(1<<1)|(1<<3));

P1DIR=(1<<0)(1<<1)(1<<3);

SWITCH LED = SWITCH LED CLOSE;

下面是端点的初始化,需要 endPointDesc_t my_epDesc 印一个端点,然后对其端点号进行初始化,此处延用了官方提供的代码20,任务号为当前,描述信息如下(端点号、PROF、DEVICEID、版本),这些随便输入即可,没有什么要求,只要能够区分开,不超过里面最大长度即可。TRUE、命令等也是自己约定的,约定的是一组命令,比如实例的是两种情况,一个是 SAMPLEAPP_SENSOR_CLUSTERID,另一个是接电器的控制 SAMPLEAPP_CTRL_CLUSTERID。实际做产品应该写的更具体一些,比如表示温度、湿度等,会使命令列表更加的有针对性。节点创建好了后,还有性标的类型 noLatencyReqs 直接默认即可。接下来是注册,注册完了后,如果注册成功就会返回一个正确的结果,因为注册过程中就是将端点添加到链表当中,叫做 epList,后面讲解还会再提到。在向链表中添加时,有可能会去判断端点是否被注册过,如果被注册过,当然就会失败;如果端点没有问题,注册就会成功。结束后,还需设置地址,该地址实际上是自己的地址,自己设置即可,因为要给别人发数据,所以要将地址告诉他人,包括地址是多少、地址模式是什么(,Addr16Bit)。协调器是将地址默认为0,这就是初始化代码。初始化完了之后,紧接着要进入任务处理函数,即 my_ProcessEvent,该函数不会主动执行,它是因为四建而触发执行。

/*端点初始化 */

my_epDesc.endPoint=MY_ENDPOINT;

my_epDesc.task_id =&my_TaskID;

my_epDesc.simpleDes

c

=(SimpleDescriptionFormatt*&my_SimpleDesc; my_epDesc.latencyReq=noLatencyReqs;

if (afRegister(&myepDesc)== afstatus_INVALID_PARAMETER)

debug("端点注册失败\n");

else

debug("端点注册成功\n");

/*地址结构初始化 */

my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;//点播

my_DstAddr.endPoint=MY_ENDPOINT;

my_DstAddr.addr.shortAddr = 0x0000;//默认为协调器地址

}« end my_Init »

相关文章
|
4月前
|
传感器 Linux API
如何实现 MCU软件中多个模块初始化函数的优雅调用
如何实现 MCU软件中多个模块初始化函数的优雅调用
|
26天前
|
测试技术
【ZYNQ】ZYNQ7000 私有定时器及其驱动应用示例
【ZYNQ】ZYNQ7000 私有定时器及其驱动应用示例
|
10月前
|
存储 传感器 索引
ov2640子设备视频操作详细分析
ov2640子设备视频操作详细分析
232 0
ov2640子设备视频操作详细分析
|
10月前
|
存储 算法 芯片
ov2640子设备核心操作详细分析
ov2640子设备核心操作详细分析
181 0
|
数据采集 网络协议 人机交互
【STM32】ESP8266 wifi模块创建阿里云产品
什么是ESP8266呢?这个是WiFi模块,是一个由安可信科技公司开发出来的模块,这个模块的核心处理器ESP8266在比较小的尺寸封装中集成了业界领先的微型的MCU,它带有了16位精简的模式,主要的频率支持80MHz和160MHz,支持RTOS,集成WiFi,板载天线。
【STM32】ESP8266 wifi模块创建阿里云产品
|
物联网 开发者
蓝牙模块控制功能数据AT指令|学习笔记
快速学习蓝牙模块控制功能数据AT指令
511 0
蓝牙模块控制功能数据AT指令|学习笔记
|
数据安全/隐私保护
VOS怎样实现平台之间的动态注册和一些小问题?
VOS怎样实现平台之间的动态注册和一些小问题?
硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件
有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的。为了更好的表述封装设计过程,本文描述了CH340G和MAX232芯片封装创建(SOP-16),并将原理图的元器件关联引脚封装。
硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件
硬件开发笔记(五): 硬件开发基本流程,制作一个USB转RS232的模块(四):创建CON连接器件封装并关联原理图元器件
有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的。为了更好的表述封装设计过程,本文描述了一个创建CON标准连接件封装,创建DIP焊盘,将原理图的元器件关联引脚封装。
硬件开发笔记(五): 硬件开发基本流程,制作一个USB转RS232的模块(四):创建CON连接器件封装并关联原理图元器件
|
Android开发 图形学 网络虚拟化
单设备初始化多个poco与多设备初始化poco
单设备初始化多个poco与多设备初始化poco
392 0