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 »

相关文章
|
存储 Linux 网络安全
如何使用iptables在Linux中进行流量转发?
如何使用iptables在Linux中进行流量转发?
2393 0
如何使用iptables在Linux中进行流量转发?
|
Linux
项目总结:i.mx6ull基于S485控制外设
项目总结:i.mx6ull基于S485控制外设
1246 1
项目总结:i.mx6ull基于S485控制外设
|
8月前
|
人工智能 Cloud Native 数据可视化
PyCharm 2025.1 完整教程:下载安装 + 中文设置 + 激活,一步到位,附安装包
PyCharm 2025.1 发布,重磅升级AI代码补全、类型推断与ruff集成,提升开发效率。支持渐进式补全、智能提交信息生成、冲突可视化解决,优化启动速度与内存占用,全面增强云原生及现代Python开发体验。
4297 5
|
3月前
|
弹性计算 人工智能 关系型数据库
阿里云优惠券种类解析:优惠券、代金券、提货券、储值卡领取与使用指南
阿里云为吸引新用户并回馈老用户,推出了优惠券、代金券、提货券及储值卡等多种福利措施。优惠券分通用和定向型,灵活抵扣购买费用;代金券作为资金类权益,通用性强,简化费用抵扣流程;提货券便捷高效,用于提取指定云产品;储值卡则适合企业预算管理,提供灵活支付。此外,阿里云还提供多种云服务器活动,如经济型e实例99元/年等。用户可通过阿里云活动中心查询详细配置和价格信息,合理选择优惠措施。
415 0
|
5月前
|
运维 自然语言处理 安全
2026年OpenClaw(Clawdbot)新手一键部署+QQ机器人快速接入全指南
OpenClaw(原Clawdbot/Moltbot)作为阿里云生态下的开源AI自动化代理工具,凭借自然语言交互、多场景任务执行、插件化扩展的核心能力,已成为个人办公提效与中小企业协作数字化的关键工具。2026年阿里云推出OpenClaw专属一键部署方案,结合QQ高渗透率的社交属性,实现“QQ聊天窗口下达指令,OpenClaw自动执行任务”的轻量化交互模式。本文将完整拆解阿里云环境下OpenClaw的一键部署流程,重点详解QQ机器人创建、配置、对接与功能验证的全步骤,包含实操代码命令与避坑技巧,零基础用户也能快速完成从部署到落地的全流程。
2662 8
|
Python
pip安装包报错Could not find a version that satisfies the requirement pymysql (from versions: none)
pip安装包报错Could not find a version that satisfies the requirement pymysql (from versions: none)
1632 1
|
Shell
自定义 jupyter 魔法命令
自定义 jupyter 魔法命令
447 1
|
存储 监控 安全
【深度】2023年磁带市场迎来“二级存储”的新时代
磁带是最环保的存储技术,可以显著降低数据中心运营的碳排放和电子废物。结合改进的访问时间、更快的数据速率、50年的介质寿命、最低的TCO、最高的设备可靠性以及巨大的可持续性优势,现代磁带有望在走向ZB时代的巨大需求中发挥最大潜力。磁带已经明确地成为二级存储的首选。
1558 0
【深度】2023年磁带市场迎来“二级存储”的新时代
|
SQL 存储 分布式计算
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
377 0
|
安全 Shell Linux
内网渗透测试基础——Windows PowerShell篇
内网渗透测试基础——Windows PowerShell篇
938 0