- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.4 协议栈工作原理介绍
前言:
前文已经有多次地方提及到协议栈,但是迟迟没有做一个介绍。呵呵,不是不讲,时候未到!我们需要在最适合的时候做最适合的事。今天,我们来讲述一下协议栈的工作原理,这个东西将是我们以后接触得最多的东西,从学习到项目开发,你不得不和他打交道。由于我们的学习平台是基于 TI 公司的,所以讲述的当然也是 TI 的 Z-STACK。
148
内容讲解:
相信大家已经知道 CC2530 集成了增强型的 8051 内核,在这个内核中进行组网通讯时候,如果再像以前基础实验的方法来写程序,相信大家都会望而止步,ZigBee 也不会在今天火起来了。所以 ZigBee 的生产商很聪明,比如 TI 公司,他们为你搭建一个小型的操作系统(本质也是大型的程序),名叫 Z-stack。他们帮你考虑底层和网络层的内容,将复杂部分屏蔽掉。让用户通过 API 函数就可以轻易用 ZigBee。这样大家使用他们的产品也理所当然了,确实高明。也就是说,协议栈是一个小操作系统。大家不要听到是操作系统就感觉到很复杂。回想我们当初学习 51 单片机时候是不是会用到定时器的功能?嗯,我们会利用定时器计时,令 LED 一秒改变一次状态。好,现在进一步,我们利用同一定时器计时,令 LED1 一秒闪烁一次,LED2 二秒闪烁一次。这样就有 2 个任务了。再进一步…有 n 个 LED,就有 n 个任务执行了。协议栈的最终工作原理也一样。从它工作开始,定时器周而复始地计时,有发送、接收…等任务要执行时就执行。这个方式称为任务轮询:
149
图 3.16 任务轮询
协议栈很久没打开了吧?没什么神秘的,我直接拿他们的东西来解剖!我们打开协议栈文件夹 Texas Instruments\Projects\zstack 。里面包含了 TI 公司的例程和工具。其中的功能我们会在用的的实验里讲解。再打开 Samples 文件夹:
图 3.17
150
Samples 文件夹里面有三个例子: GenericApp、SampleApp、SimpleApp在这里们选择 SampleApp 对协议栈的工作流程进行讲解。打开\SampleApp\CC2530DB 下工程文件 SampleApp.eww。留意左边的工程目录,我们暂时只需要关注 Zmain文件夹和 App文件夹。
图 3.18 工作空间目录
任何程序都在 main 函数开始运行,Z-STACK 也不例外。打开 Zmain.C,找到
int main( void ) 函数。我们大概浏览一下 main 函数代码:
/****************************************************************
* @fn
main
* @brief
First function called after startup.
* @return don’t care
*/
int main( void )
{
// Turn off interrupts
osal_int_disable( INTS_ALL );
//关闭所有中断
// Initialization for board related stuff such as LEDs
HAL_BOARD_INIT(); //初始化系统时钟
// Make sure supply voltage is high enough to run
zmain_vdd_check(); //检查芯片电压是否正常
151
图 3.19 协议栈主函数
// Initialize board I/O
InitBoard( OB_COLD );
//初始化 I/O ,LED 、Timer 等
//初始化芯片各硬件模块
// Initialze HAL drivers
HalDriverInit();
// Initialize NV System
osal_nv_init( NULL );
// 初始化 Flash 存储器
// Initialize the MAC
ZmacInit();
//初始化 MAC 层
// Determine the extended address
zmain_ext_addr();
//确定 IEEE 64 位地址
// Initialize basic NV items
zgInit();
// 初始化非易失变量
#ifndef NONWK
// Since the AF isn’t a task, call it’s initialization routine
afInit();
#endif
// Initialize the operating system
osal_init_system();
// 初始化
您可能关注的文档
- 网页设计 习题 习题19.docx
- 网页设计基础 HTML表单 第6章 HTML表单_教学设计.doc
- 网页设计基础 从零开始构建HTML 页面 第2章 从零开始构建HTML页面_补充案例.doc
- 网页制作 实验报告 实验报告6——在网页中插入Flash动画.doc
- 网页制作 实验报告 实验报告22——创建模板网页.doc
- 维修电工培训资源包 常用电工仪器仪表的使用与维护 T-01-O-O-电工仪表与测量基础知识-教材.docx
- 维修电工培训资源包 交流电路基本知识 T-04-O-O-交流电路-教材.docx
- 卫星定位测量 常用高程系统 常用高程系统.doc
- 涡流检测技术 任务5 检测信号的分析与处理技术 (1) 任务5 检测信号的分析与处理技术(1).doc
- 无线网络技术 WLAN产品工程安装指导 教案13.doc
文档评论(0)