快速了解ZigBee的协议栈

news2024/11/17 22:33:37

带大家来一起快速的看懂ZigBee的协议栈的运行流程。

1.读任何程序都需要从main函数入手,那我们先来看Zmain.c中的main函数。

问题:在main中我们会看到很多的函数,我们究竟要看哪个函数呢?

回答:这么多的函数中其实我们只需要关注osal_init_system()和osal_start_system()两个函数就可以了。我们在编程的时候其实也只会关系到这两个函数。

2.我们跟踪(把光标放在这个函数上点右键,再点击go to define)osal_init_system()这个函数,发现它在OSAL.c文件中。

问题:在这个函数中有遇到了很多函数,那我们又要关注那些函数呢?

回答:这个函数中我们只需要关注osalInitTasks()函数就可以了,这其实就是把每个事件作为每个任务。

3.我们跟踪osalInitTasks()这个函数,发现在OSAL_SampleApp.c中。其他的函数先不管。

在这个函数我们可以看到我们的任务编号是从0开始的,然后每添加一个任务任务编号(taskID++)就加一,并且为任务分配内存。如下:

uint8 taskID = 0;

tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);

osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));

在这个函数中需要我们特别关注的是SampleApp_Init(taskID)这个函数,因为我们在编程的时候这个函数是需要我们程序员去编写的,这个事协议栈提供的编程接口。

4.同样我们跟踪这个函数SampleApp_Init(taskID),发现它在SampleApp.c中(这个函数很重要)。在这个函数中我们看到需要我们去配置一些信息,如串口波特率、流控等等。

uartConfig.callBackFunc = Serial_CallBack;

这需要我们来定义串口回调函数来无线发送数据。

5.现在系统的初始化已经做好了,遇到SampleApp_Init()函数的return后一步一步的返回。

6.返回到main函数后,我们再来看osal_start_system()函数,注意这个函数一但进去之后,此函数就不会再返回。我们跟踪这个函数,发现它在OSAL.c中。

do {

if (tasksEvents[idx]) // Task is highest priority that is ready.

{

break;

}

} while (++idx < tasksCnt);

注意这段逻辑,这是把任务中优先级高的选出来。

events = tasksEvents[idx];//把优先级高的选出来赋值给事件来处理。

这里我们需要来看一个数组:

const pTaskEventHandlerFn tasksArr[] = {

macEventLoop,

nwk_event_loop,

Hal_ProcessEvent,

#if defined( MT_TASK )

MT_ProcessEvent,

#endif

APS_event_loop,

#if defined ( ZIGBEE_FRAGMENTATION )

APSF_ProcessEvent,

#endif

ZDApp_event_loop,

#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )

ZDNwkMgr_event_loop,

#endif

SampleApp_ProcessEvent

};

我们知道这些都是事件处理函数。问题又来了,这么多我们应该看和用哪一个呢?

协议栈给用户提供的函数编程接口是SampleApp_ProcessEvent这个函数。

然而怎么调用到这个函数呢?看下面的代码。

events = (tasksArr[idx])( idx, events );//这是是一个函数指针的应用。自己补C语言,这里不赘述。

7.既然是这样我们就要跟踪SampleApp_ProcessEvent()这个函数,发现它在SampleApp.c中。

case AF_INCOMING_MSG_CMD:

SampleApp_MessageMSGCB( MSGpkt );

break;

这是我们需要关注的case,这个就是接受到数据的时候读出无线发过来的数据。SampleApp_MessageMSGCB( MSGpkt );这个函数就需要程序员进行编写。所以这个函数也非常的重要。

这就是协议栈的大体运行过程,当然这些还很浅显,还没有讨论一些深层次的内容,并且有些地方写得不合适的地方,希望大家指正,这里我表示万分的感激。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,

差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Horn:2层BLS签名聚合协议

1. 引言 Horn为2层BLS签名聚合协议&#xff0c;使得在以太坊共识层&#xff0c;为每个slot&#xff0c;聚合来自整个validator set的所有签名&#xff0c;即使这个validator set成员多达100万个。相比于现有的只能聚合1/32的validator set来说&#xff0c;有了大幅改进。 现有…

企业营销的内容之痛,腾讯云SaaS工具的破局之道

引言 过去数十年间&#xff0c;国内企业经历了快速发展的红利期&#xff0c;规模的增长、价值的创造&#xff0c;涌现了大批国内领先、世界知名的企业与组织。而如今&#xff0c;传统的粗放式经营模式已经不再适用&#xff0c;数字化转型时代下&#xff0c;如何利用 SaaS 技术…

C#语言实例源码系列-实现Linq操作Xml

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

Python基于PyTorch实现BP神经网络ANN回归模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 在人工神经网络的发展历史上&#xff0c;感知机(Multilayer Perceptron&#xff0c;MLP)网络曾对人工神…

外包三年半太差劲,才幡然醒悟要跳槽

前几天有个读者过来说&#xff0c;“程序猿&#xff0c;外包干了三年半&#xff0c;感觉和外界差距有点大&#xff0c;现在被动醒悟&#xff0c;希望你能帮我制定一下学习路线。” 如果不是女朋友和我提分手&#xff0c;我估计现在还没醒悟。大专生&#xff0c;18年通过校招进…

算法训练 —— 数组(1)

目录 一、二分查找的基本原理 二、二分查找的基本写法 三、二分查找的相关例题 1. LeetCode704.二分查找 2. LeetCode35.搜索插入位置 3. LeetCode34.在排序数组中查找的第一个和最后一个位置 4. LeetCode69.x的平方根 5. LeetCode367.有效的完全平方数 一、二分查找…

华为手表开发:WATCH 3 Pro(2)生成密钥和证书请求文件,生成签名和配置签名

华为手表开发&#xff1a;WATCH 3 Pro&#xff08;2&#xff09;生成密钥和证书请求文件&#xff0c;生成签名和配置签名初环境与设备生成密钥生成签名初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统&#xff1a;window 设备&#xff1a;HUAWEI WATCH 3 Pr…

12.28日报

今天主要进行了资产盘点工作&#xff1b; 写了一个数据库的增删改查的接口框架&#xff1b; 遇到的问题与解决&#xff1a; Insert没使用过&#xff0c;查阅资料&#xff0c;对其初步了解 postMan使用不熟练&#xff0c;搜索配置方法&#xff0c;多练习 网关服务 基本原理…

大话设计模型 Task06:桥接、职责链、中介

目录一、桥接模式问题描述问题分析模式定义代码实现二、职责链模式问题描述问题分析模式定义代码实现三、中介模式问题描述问题分析模式定义优缺点代码实现四、命令模式&#xff08;后补&#xff09;问题描述问题分析模式定义代码实现五、享元模式&#xff08;后补&#xff09;…

面向制造业的文档管理

面向制造业的文档管理 借助DocuWare领先的文档管理和工作流程自动化解决方案&#xff0c;各行业制造商&#xff08;从金属制造和机器零件到生物技术和制药&#xff09;都可以获得具有成本效益的可持续解决方案&#xff0c;通过自动化工作流程&#xff0c;简化生产和管理流程。…

文件压缩与远程拷贝_Tar_Scp_Rsync

Tar 压缩文件类型分为&#xff1a;gzip,bzip2,xz.利用tar工具来解压&#xff0c;压缩。 tar common:#tar [option ] file_name -c 创建一个压缩包 -t 查看内容 -x 提取 -f 文件名&#xff08;必须用&#xff09; -v 详细过程 -j bzip2 -z gzip -J xz Meth: tar -czvf arch_n…

示波器应用(一)

程序同学有没有一种感觉&#xff0c;有时候看到游戏场景有一种难以言表的不舒服&#xff0c;但是又不知道画面到底为什么不舒服。美术同学看到好的作品想要”借鉴“&#xff0c;但是又无从下手。那么下面这套工具将会非常适合进行画面分析以及画面仿色。让程序看懂画面信息&…

Ansys Speos | 进行智能手机镜头杂散光分析

本例的目的是研究智能手机Camera系统的杂散光。杂散光是指光向相机传感器不需要的散光光或镜面光&#xff0c;是在光学设计中无意产生的&#xff0c;会降低相机系统的光学性能。 在本例中&#xff0c;光学透镜系统使用Ansys Zemax OpticStudio (ZOS)进行设计&#xff0c;并使用…

微信小程序会议OA-后台数据交互(首页)05

1.后台准备 1.1 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

Charles -抓不到包常见原因之证书过期失效处理方法

当出现环境配置正常但却无法抓包的时候&#xff0c;可能是因为证书失效了&#xff0c;这种情况移除旧证书&#xff0c;安装新的证书即可。 一、判断是否证书过期 iOS手机&#xff1a; 进入&#xff1a;设置 > 通用 > VPN与设备管理 > Charles Proxy CA... > 更多…

劲爆美女来袭,这不得用python高清保存防止她被封禁

前言 大家早好、午好、晚好吖 ❤ ~ 环境使用: Python 3.8 解释器 Pycharm 编辑器 模块使用: requests 数据请求 第三方模块 pip install requests <工具> re <正则表达式模块> 安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install 模块…

密码学_AES加密算法

目录 简介 AES的加密过程如下&#xff08;以128位密钥为例&#xff09;&#xff1a; 异或运算 初始变换&#xff08;initial round&#xff09; 字节代换&#xff08;SubBytes&#xff09; 行位移&#xff08;ShiftRows&#xff09; 列混合&#xff08;MixColumns&#x…

Socket套接字(网络编程万字总结-附代码)

文章目录前言一、概念二、分类&#xff08;三类&#xff09;2.1 流套接字&#xff1a;使用传输层TCP协议2.2 数据报套接字&#xff1a;使用传输层UDP协议2.3 原始套接字三、UDP数据报套接字编程3.1 Java数据报套接字通信模型3.2 DatagramSocket API3.2.1 DatagramSocket 构造方…

Shell函数

1、 函数定义 格式一&#xff1a; function name() { Command sequence; } 格式二&#xff1a; name() { Command sequence); } 1、()内是没有参数的&#xff0c;他只是函数定义的固定格式。 2、第八行fun 是函数的调用(第一种方式) 2、 函数传参 1、在Shell中&#xff0c;调用…

Jina 实例秀|基于CLIP模型的跨模态视频搜索

不同于传统的关键词搜索&#xff0c;你不需要给每个视频素材人为地打上标签。使用开源产品 CLIP-as-service&#xff0c;输入画面的描述文本&#xff0c;直接搜索到对应的视频片段。CLIP 是一个强大的模型&#xff0c;能够很好地判别文本和图片是否相关&#xff0c;但将其集成到…