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 »

相关文章
|
9月前
|
缓存 监控 前端开发
探索前端性能优化:关键策略与代码实例
本文深入探讨前端性能优化的关键策略,结合实际代码示例,帮助开发者提升网页加载速度和用户体验,涵盖资源压缩、懒加载、缓存机制等技术。
|
8月前
|
机器学习/深度学习 存储 人工智能
《揭秘人工智能数据安全风险评估方法:守护数字未来的关键》
在人工智能快速发展的背景下,数据安全至关重要。常见的风险评估方法包括定性(因素分析、逻辑分析、历史比较)、定量(机器学习算法、基于图的分析、风险因子分析)及综合评估(层次分析、模糊综合评价)。此外,漏洞扫描、代码审查、数据加密评估和安全审计等也是重要手段。多种方法结合使用,确保全面准确评估风险,保障人工智能健康发展。
330 19
|
12月前
|
存储 搜索推荐 数据挖掘
数据库的应用
数据库在众多领域发挥着重要作用。在企业管理中,它助力客户关系、人力资源和财务管理,提升决策科学性和效率;金融领域中,银行系统、证券交易和保险行业依托数据库保障交易安全、投资决策及风险管理;医疗行业则通过电子病历管理和数据分析提高诊疗准确性并优化资源配置;电子商务运用数据库实现商品、订单管理和用户行为分析,增强购物体验;教育领域中,数据库支持学生信息、教学资源管理和教育数据分析,促进家校沟通与教学质量提升;科学研究方面,数据库促进数据共享、科研项目管理和深入数据分析,加速科学进步。
556 3
|
存储 消息中间件 分布式计算
对于一般大数据物流项目的面试题(问题+答案)
对于一般大数据物流项目的面试题(问题+答案)
187 0
|
机器学习/深度学习 存储 算法
大规模 MLOps 工程(四)(3)
大规模 MLOps 工程(四)
92 1
执行 mysqld --install 报错:Install Remove of the Service Denied
执行 mysqld --install 报错:Install Remove of the Service Denied
198 0
执行 mysqld --install 报错:Install Remove of the Service Denied
|
资源调度 前端开发 API
基于 React、TS的聊天室monorepo实战
基于 React、TS的聊天室monorepo实战
384 1
|
关系型数据库 MySQL 网络安全
mariadb主从复制
使用阿里云产品简单实现mariadb主从复制
|
JavaScript 前端开发
Vue —— 基础(三)(样式绑定、条件渲染)
Vue —— 基础(三)(样式绑定、条件渲染)
149 1