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目录下不同的编译配置
未完。。。。
CC2530 ZigBee协议栈 学习心得相关推荐
- CC2530/Zigbee协议栈外部中断配置详解
CC2530/Zigbee协议栈配置外部中断 一.I/O端口 二.配置寄存器 三.中断处理函数 一.I/O端口 1.在CC2530芯片中,其I/O口用作通用 I/O 时,引脚可以组成 3 个 8 位端 ...
- zigbee协议栈学习(二)
协议栈规范的 ID号可以通过查询设备发送的 beacon 帧获得.在设备加入网络之前,首先 需要确认协议栈规范的 ID."特定网络"规范 ID号为0: ZigBee协议栈规范的 I ...
- zigbee协议栈学习(四)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 准备开始 ...
- ZigBee-CC2530学习心得(1) --------ZigBee开发工具
首先,我是只是一个大学应届毕业生,本人也是因为参加了挑战杯这个项目,所学也专业包涵单片机内容,所以才开始我的ZigBee之旅,写了2个月左右,项目的基本要求大致是达到了.写这篇博客主要是总结这2个月所 ...
- 【无线通信篇 | Zstack协议栈】CC2530 Zigbee Zstack协议栈组网项目及详细讲解篇
演示视频:https://www.bilibili.com/video/BV1Ew411o7Fp 物联网无线通信技术,ZigBee无线传感网络 CC2530最大的特点就是一个拥有无线收发器(RF)的单 ...
- CC2530下ZigBee协议栈中添加BH1750数字光照传感器
项目里需要获得光照强度,之前用的是光敏电阻,但是光敏电阻实在不精确,换用BH1750数字光照传感器.网上购买后,送的资料都是单片机的,移植到ZigBee协议栈里面,时序有些问题,在网上找的一些资料,很 ...
- Zigbee协议学习记录
ZigBee是基于IEEE 802.15.4标准的低功耗局域网协议,是一种短距离.低功耗的天线通信技术. 特点是:近距离.低复杂度.低数据传输速率. 本文内容共分为六个模块: 1,ZigBee无线通信 ...
- CC2530 zigbee IAR8.10.1环境搭建
本文主要内容来至于NJGB科技,感谢NJGB科技. 1 开发工具安装 1.1 IAR Embedded Workbench for 8051 8.10.1 安装文件:"2014-8-1-NJ ...
- Zigbee系列 学习笔记五(信道选择)
EEE 802.15.4/ZigBee工作在工业科学医疗(ISM)频段,定义了两个工作频段,即2.4 GHz频段和868/915 MHz频段.在IEEE 802.15.4中,总共分配了27个具有3种速 ...
最新文章
- 简述python中怎样导入模块_Python中导入模块的两种模式,import
- 吴恩达:告别大数据,AI需要高质量小数据!
- sicily 1150. 简单魔板
- php调取 zabbix实时数据_Linux运维必知的Zabbix故障排错实战
- aj6 stamps storm_曝光! “渣男”Travis Scott的AJ6下周发售,分手后货量大减...
- Maven学习总结(37)——利用GitHub或阿里云OSS对象存储、又拍云、七牛云存储等搭建个人Maven仓库
- 在职工象棋赛上弃子拿下一盘
- Python---列表与元组
- [Android Pro] 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能
- linux aria2 多线程,Mac/Linux 多线程下载解决方案(Aria2 YAAW是什么)
- 使用Selenium爬取淘宝商品
- 微信公众号(获取token 按钮生成 推送消息,微信授权)
- ACdream 1069 无耻的出题人 无聊写着玩的题
- DataWhale-动手数据分析-Task01:数据加载及探索性数据分析
- html图片靠右浮动 文字左侧环绕,CSS实现模拟float: center文字左右环绕图片的效果...
- python分三行将你的学号姓名班级_python第三次作业——叶耀宗
- ae绘图未指定错误怎么办_设计高手总结47个快捷键50个CAD使用技巧,助你神速绘图拒绝加班!...
- OSDI 2014 paper reading
- 精读《X3D: Expanding Architectures for Efficient Video Recognition》论文
- Android12 Launcher3 的一些修改记录