无线传感网络技术 4.2 协议栈工作原理介绍 4.2.1 协议栈工作原理.docx

无线传感网络技术 4.2 协议栈工作原理介绍 4.2.1 协议栈工作原理.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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(); // 初始化

文档评论(0)

WanDocx + 关注
实名认证
内容提供者

大部分文档都有全套资料,如需打包优惠下载,请留言联系。 所有资料均来源于互联网公开下载资源,如有侵权,请联系管理员及时删除。

1亿VIP精品文档

相关文档