快速了解ZigBee的协议栈

article/2025/10/22 3:33:33

带大家来一起快速的看懂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://chatgpt.dhexx.cn/article/Gscstc5B.shtml

相关文章

Zigbee协议栈————广播组网

目录 1.基础概念 2.Zigbee协议栈工作流程 3。代码讲解 1.基础概念 在Zigbee网络中存在3中逻辑设备&#xff1a;协调器、路由器、终端。 (这个实验当中我们只用到协调器以及终端)。 协调器&#xff1a;协调器负责启动网络&#xff0c;当启动和配置好网络后&#xff0c;协调…

zibgee协议

1.概述 1.1解析ZigBee堆栈架构 ZigBee堆栈是在IEEE 802.15.4标准基础上建立的&#xff0c;定义了协议的MAC和PHY层。ZigBee设备应该包括IEEE802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的PHY和MAC层&#xff0c;以及ZigBee堆栈层&#xff1a;网络层(NWK)、应用层和安…

[ZigBee] 15、Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子(长文,OSAL及Zigbee入门知识)...

1、Zigbee协议栈简介 协议是一系列的通信标准,通信双方需要按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗讲协议栈就是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议,进而实现无线数据收发。 如图1所示:Zigbee协议分为两部分…

ZigBee协议栈简介

文章目录 Zigbee协议栈简介如何理解Zigbee协议栈如何使用Zigbee协议栈 Zigbee协议栈简介 Zigbee协议分为2部分&#xff1a; IEEE 802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范。Zigbee联盟定义了NWK(网络层)、APS(应用程序支持层)、APL(应用层)技术规范。 Zigbee协议栈…

[zigbee][z-Stack]协议栈简介及工作流程

文章目录 什么是zigbee协议栈&#xff1f;如何使用zigbee协议栈&#xff1f;z-Stack工作流程 什么是zigbee协议栈&#xff1f; 协议栈是协议的具体实现形式&#xff0c;通俗点来理解就是协议栈是协议和用户之间的一个缺口&#xff0c;开发人员通过使用协议栈来使用这个协议的&…

相机标定和双目相机标定标定原理推导及效果展示

文章目录 前言一、相机标定1.相机的四个坐标系2.相机的畸变 二、张正友标定法1.求解内参矩阵与外参矩阵的积2.求解内参矩阵3.求解外参矩阵4.标定相机的畸变参数5.双目标定6.极线矫正&#xff08;立体校正&#xff09; 三、视差图与深度图 前言 参考了一些大佬的文章&#xff0c…

视觉基础之相机标定

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 基于视觉的图像处理&#xff0c;通常要在实验前进行相机的标定&#xff0c;以获取相应的参数。为方便查阅&#xff0c;遂将常用到的三种相机标定总结如下。 相机内参标定…

照相机标定

一.相机标定的原理 1.1 相机如何成像&#xff1a; 相机成像系统中&#xff0c;共包含四个坐标系&#xff1a;世界坐标系、相机坐标系、图像坐标系、像素坐标系。 1.1.1 世界坐标系&#xff1a; 世界坐标系&#xff08;world coordinate&#xff09;&#xff0c;也称为测量坐…

Opencv——相机标定

相机标定的目的&#xff1a;获取摄像机的内参和外参矩阵&#xff08;同时也会得到每一幅标定图像的选择和平移矩阵&#xff09;&#xff0c;内参和外参系数可以对之后相机拍摄的图像就进行矫正&#xff0c;得到畸变相对很小的图像。 相机标定的输入&#xff1a;标定图像上所有…

为什么需要对相机标定?

以下内容来自系统教程如何搞定单目/鱼眼/双目/阵列 相机标定&#xff1f; 点击领取相机标定资料和代码 为什么需要对相机标定&#xff1f; 我们所处的世界是三维的&#xff0c;而相机拍摄的照片却是二维的&#xff0c;丢失了其中距离/深度的信息。从数学上可以简单理解为&…

1. 相机标定原理(学习笔记)

相机标定(Camera Calibration)-学习笔记 文章目录 相机标定(Camera Calibration)-学习笔记一、简介二、原理1. 坐标系 *coordinates*2. 相机参数 *camera matrix*2.1 外参数矩阵2.2 内参数矩阵2.3 畸变矩阵2.3.1 径向畸变2.3.2 切向畸变 2.4 小结 三、相机标定方法1. 张正友相机…

相机标定目的及原理

相机标定的目的&#xff1a; 相机标定的目的有两个&#xff0c;一个就是矫正由于镜头畸变造成的图片的变形&#xff0c;例如&#xff0c;现实中的直线&#xff0c;拍摄成图像后会外凸或内凹&#xff0c;进行相机标定后可以对这种情况进行校正&#xff1b;另一个是根据获得得图像…

Python之OpenCV相机标定方法

本文结合OpenCV官方样例&#xff0c;对官方样例中的代码进行修改&#xff0c;使其能够正常运行&#xff0c;并对自己采集的数据进行实验和讲解。 一、准备 OpenCV使用棋盘格板进行标定&#xff0c;如下图所示。为了标定相机&#xff0c;我们需要输入一系列三维点和它们对应的…

相机标定,内参数与外参数

相机标定 简介 所谓的相机标定就是将外界世界的坐标信息转化为计算机&#xff08;自带相机/摄像头&#xff09;可以理解的“距离”&#xff0c;将世界坐标系转换到相机坐标系。我们可以理解为从一个坐标系转换到另一个坐标系所需要的转换关系就是相机标定。 简单滴说&#x…

相机标定——张氏标定法

目录 前言动机为什么要进行相机标定什么是张氏标定法 张氏标定法的原理透镜成像原理世界坐标系到相机坐标系的转换相机坐标系到图像坐标系的转换图像坐标系到像素坐标系单应性矩阵内参求解外参求解Matlab实操 前言 动机 前段时间在整机械臂的手眼标定&#xff0c;也就是标定3D…

相机标定系列(三)利用matlab进行相机标定

相机标定系列&#xff08;三&#xff09;利用matlab进行相机标定 文章目录 相机标定系列&#xff08;三&#xff09;利用matlab进行相机标定前言一、棋盘格图像的采集二、单目相机标定三、双目相机标定 前言 matlab的应用程序中含有对双目相机和单目相机的标定工具箱&#xff…

机器视觉——相机标定

1 机器视觉为什么要做相机标定 机器视觉是采用相机成像来实现对三维场景的测量、定位、重建等过程。是一个利用二维图像进行三维反推的过程&#xff0c;我们所处的世界是三维的&#xff0c;而图像或者照片是二维的&#xff0c;可以把相机认为是一个函数&#xff0c;输入量是一…

相机标定篇——相机标定

认为相机标定是三维重建的核心&#xff0c;研究生期间主要方向为结构光三维重建 必要的数学知识 线性方程求解 Gauss消元法&#xff1b;LU分解&#xff1b;Cholesky分解 最小二乘问题-线性方法 特征值分解&#xff1b;奇异值分解&#xff1b;超定线性方程&#xff1b;最小二乘…

【相机标定】相机内参

相机标定 相机在计算机视觉方面的一些应用一般需要相机标定。我们总是听到标定这个词&#xff0c;那么具体标定的是什么呢&#xff1f;相机的拍摄是一个三维到二维&#xff08;透视投影&#xff09;的过程&#xff0c;这个过程可以用数学模型去表述&#xff0c;标定便是计算这…

什么是相机标定

1. 相机标定的定义及作用 相机标定是指借助标定板来计算单个或多个相机的内参、外参和镜头畸变参数。 作用&#xff1a; 将畸变的图像恢复为正常的图像&#xff0c;为后续进行拼接、SLAM等奠定基础。 多相机标定可以将所有相机输出变换到同一个坐标系。 相机标定是三维视觉…