CC2530 ZigBee协议栈 学习心得

最近一直在学习研究cc2530这款单片机,感觉自己的C语言水平还是不够有得提升的空间,但还是有不少收获。
   CC2530是一款支持ZigBee无线组网协议的低功耗单片机,cc2530主要的应用场景是在物联网方面。因为有着无线组网和低功耗的优势所以被广泛使用物联网无线数据采集和控制。
   ZigBee协议栈,一听就应该明白,这是个像TCP/IP一样的复杂协议,其实不然单片机的RAM和ROM都是有限的,而且cc2530还有无线收发能力所以系统的资源很紧缺,经过我的钻研ZigBee协议的代码发现并不复杂,感觉自己的C语言又进步了,理解了一些C语言的精髓。

 

    我学习Texas Instruments公司ZStack-CC2530-2.5.0协议栈,这是个半开源的协议栈,有些核心代码是以库的形式提供的,所以协议栈是以软件形式安装在电脑上,安装后在C盘会有工程源码,开发的基本思路是借助IT提供的工程模板自己修改SampleApp的工程就行了。其实Zigbee协议栈规范和Z-Stack的关系也差不多,Z-Stack就是符合Zigbee协议栈规范的一个硬件和软件平台,是Zigbee协议栈的一个具体实现。Z-Stack的整个开发环境IDE使用的是IAR(IAR的版本需要参考Z-Stack Home Sample Application User's Guide。此文档在TI提供的资料包里\Documents内)。想详细了解IAR或者使用过程中遇到什么问题请使用IAR的help选项。

    Z-Stack是分层设计的,主要分为物理层(PHY和MAC)、介质访问层(MAC)、网络层(NWK)、应用层(APS和ZDO、APL),还有一个OSAL操作系统抽象层。

    Z-Stack采用事件轮询式的操作系统,OSAL就是以实现多任务为核心的系统资源管理机制,说起来很叼,多任务管理。但是看到代码就会恍然大悟,实现原理很简单,从IAR工程里ZMian文件夹下面的ZMian.c文件中找到main()函数,然后跟随协议栈的初始化定义,最后会走到osal_start_system();里面有实现轮序代码,根据tasksEvents[]数组从低位到高位的优先级执行tasksArr[]数组的事件处理函数,并且还有消息队列用来接收无线的数据收发


Z-Stack采用基于一个轮转查询式操作系统,该操作系统命名为OSAL(Operating System Abstraction Layer),中文为“操作系统抽象层”。Z-Stack协议栈将底层、网络层等复杂部分屏蔽掉,让程序员通过API函数就可以轻松地开发一套ZigBee系统。

操作系统(Operating System,简称OS)看似很复杂,其实只要做几个实训项目,就会很快撑握整个OSAL的工作原理,首先了解一下几个关键的操作系统术语。

1. 资源(Resource)

任务所占用的实体都可以称为资源,如一个变量、数组、结构体等。

2. 共享资源(Shared Resource)

至少可以被两个任务使用的资源称为共享资源,为了防止共享资源被破坏,每个任务在操作共享资源时,必须保证是独占该资源。

3. 任务(Task)

任务又称线程,是一个简单程序的执行过程。在任务设计时,需要将问题尽可能地分为多个任务,每个任务独立完成某种功能,同时被赋予一定的优先级,拥有自己的CPU寄存器和堆栈空间。一般将任务设计为一个无限循环。

4. 多任务运行(Muti-task Running)

CPU采用任务调度的方法运行多个任务,例如:有10个任务需要运行,每隔10ms运行一个任务,由于每个任务运行的时间很短,任务切换很频繁,这就造成了多任务同时运行的“假象”。实际上,一个时间点只有一个任务在运行。

5. 内核(Kernel)

在多任务系统中,内核负责为每个任务分配CPU时间、切换任务、任务间的通信等。内核可以大大简化应用系统的程序设计,可以将应用程序分为若干个任务,通过任务切换来实现程序运行。

6. 互斥(Mutual Exclusion)

多任务间通信的最简单方法是使用共享数据结构,对于单片机系统来说,所有任务共用同一地址的数据,具体表现为全局变量、指针、缓冲区等数据结构。虽然共享数据结构的方法简单,但是必须保证对共享数据结构的写操作具有唯一性。

保护共享资源最常用的方法是:关中断、使用测试并置位指令(T&S指令)、禁止任务切换和使用信号量。其中,在ZigBee协议栈操作系统中,经常使用的方法是关中断。

7. 消息队列(Message Queue)

消息是收到的事件和数据的封装,比如发生了一个事件(收到别的节点发来的消息),这时就会把这个事件所对应的事件号及收到的数据封装成消息,放入消息队列中。

8. 事件(Events)

ZigBee协议栈是由各个层组成的,每一层都要处理各种事件,所以就为每一层定义了一个事件处理函数,可以把这个处理函数理解为任务,任务从消息队列中提取消息,从消息中提取所发生的具体事件,调用相应的具体事件处理函数,比如按键处理函数等等。

 Zigbee设备的分为Coordinator、Router、Enddevice三种角色,通过切换IAR上的标签可以实现tool目录下不同的编译配置

未完。。。。

  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值