前言

说实话,我喜欢自己的原创,虽然我写得可能简单了,但我觉得自己在写博客的路途上,一点一点地积累知识,我也借鉴别人的东西,特别是在写这篇文章时所使用的是markdownpad2写的,原来我根本就不知道还有这个玩意,所以相信在园里的朋友们都会支持的,如果您知道了,或者懂了,就默默地无视小弟我写的博客,如果没有接触过呢,嘿嘿,我们一起研究进步!

协议栈

TI公司很牛,这是给我的感觉,它能把那些复杂的东西全部写好,就提供一些API来给我们使用,让用户更加方便,这个是我对它崇拜的地方,好了,不说废话了,进入正题。

下面就是协议栈的框图了

那么所谓的协议栈指的就是TI公司的Z-STACK,不得不说人们的智慧是无穷的,这样一个基于8051的芯片在上面写了一个操作系统其名为Z-stack

采用的方法是任务轮回的方法,而且任务ID值越小,优先级越高!

我们使用IAR打开TI公司提供的example 路径如下:

C:\Texas Instruments\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Samples\SampleApp\CC2530DB

可以看到非常清楚的工作目录。

协议栈函数解析

首先我们找到Zmain目录下的zmain.c,找到int main();没错,这就是传说中的主函数

int main( void ){
osal_int_disable( INTS_ALL );//关闭所有的中断
HAL_BOARD_INIT();//初始化时钟信号
zmain_vdd_check();//检查芯片电压
InitBoard( OB_COLD );//初始化IO LED TIMER
HalDriverInit();//初始化芯片各硬件模块
osal_nv_init( NULL );//初始化flash
ZMacInit();//初始化MAC层
zmain_ext_addr();//确定16位地址
zgInit();//初始化非易失变量
#ifndef NONWK
afInit();
#endif
osal_init_system();//初始化操作系统
osal_int_enable( INTS_ALL );//使能全部中断
InitBoard( OB_READY );//初始化按键
zmain_dev_info();//显示设备信息
#ifdef LCD_SUPPORTED
zmain_lcd_init();//在LCD上显示设备信息
#endif
#ifdef WDT_IN_PM1
WatchDogEnable( WDTIMX );
#endif
osal_start_system(); // No Return from here 进入操作系统后不再返回
return 0;
}
main()

哈哈,我已经做了翻译工作,但是不一定是对的,因为毕竟是站在我的理解上写的!

上述的代码基本上都是一些初始化的代码,一个硬件的启动必须要有各种各样的设定才行!

下面分两个来讲,主要是讲两个函数:osal_init_system()和osal_start_system(),因为这两个函数可是重中之中啊!

osal_init_system()函数分析

在IAR中go to defintion就可以了,当然你也可以在OSAL.c这个文件中找到:

	uint8 osal_init_system( void )
{
// Initialize the Memory Allocation System
osal_mem_init();//初始化内存分配系统 // Initialize the message queue
osal_qHead = NULL;//初始化消息队列 // Initialize the timers
osalTimerInit();//初始化定时器 // Initialize the Power Management System
osal_pwrmgr_init();//初始化店里管理系统 // Initialize the system tasks.
osalInitTasks();//初始化系统任务 // Setup efficient search for the first free block of heap.
osal_mem_kick(); return ( SUCCESS );
}

osal_start_system()函数分析

同样的道理,你也可以找到这个函数的定义

	void osal_start_system( void )
{
#if !defined ( ZBIT ) && !defined ( UBIT )
for(;;) // Forever Loop永远循环
#endif
{
uint8 idx = 0; osalTimeUpdate();//扫描哪个事件被触发了,然后置相应的标志位
Hal_ProcessPoll(); // This replaces MT_SerialPoll() and osal_check_timer(). do {
if (tasksEvents[idx]) // Task is highest priority that is ready.
{
break; //得到待处理的优先级最高的是任务ID idx
}
} while (++idx < tasksCnt); if (idx < tasksCnt)
{
uint16 events;
halIntState_t intState; HAL_ENTER_CRITICAL_SECTION(intState);//进入临界区进行保护
events = tasksEvents[idx];//提取需要处理的事件
tasksEvents[idx] = 0; // Clear the Events for this task.清楚事件
HAL_EXIT_CRITICAL_SECTION(intState);//退出临界区保护 events = (tasksArr[idx])( idx, events );//通过指针调用处理函数 HAL_ENTER_CRITICAL_SECTION(intState);//进入临界区
tasksEvents[idx] |= events; // Add back unprocessed events to the current task.保存未处理的函数
HAL_EXIT_CRITICAL_SECTION(intState);//退出临界区
}
#if defined( POWER_SAVING )
else // Complete pass through all task events with no activity?//所有任务是否全部完成
{
osal_pwrmgr_powerconserve(); // Put the processor/system into sleep//挂起系统使之进入睡眠状态
}
#endif
}
}

相信看了上面的注释,对于zigbee的z-stack有了一定的了解了吧!

总结

我们可以得出以下的大致流程:

CC2530zigbee技术-简介协议栈的更多相关文章

  1. 常见爬虫/BOT 对抗技术简介(二)

    上一篇文章分别从网络协议,Robots文件,JS渲染,行为分析等多方面讲了些“反爬虫”,“反-反爬虫”技术. 点击查看:<常见爬虫/BOT 对抗技术简介(一)> 本文将主要介绍各种IP地址 ...

  2. Java Servlet 技术简介

    Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...

  3. 【转】Android 防破解技术简介

    http://www.cnblogs.com/likeandroid/p/4888808.html Android 防破解技术简介 这几年随着互联网的不断发展,Android App 也越来越多!但是 ...

  4. InfiniBand技术简介

    InfiniBand技术简介   转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese 介绍         随着CPU和通讯处理速度的 ...

  5. Windows NT 技术简介

    Windows NT 技术简介 NT:New Technoly(新技术,因比DOS.WIN9X采用了很多新技术而得名) Windows NT基本介绍 WindowsNT是Microsoft推出的面向工 ...

  6. CSS border三角、圆角图形生成技术简介

    http://www.zhangxinxu.com/wordpress/?p=794 一.前言 利用CSS的border属性可以生成一些图形,例如三角或是圆角.纯粹的CSS2的内容,没有兼容性的问题, ...

  7. FC总线技术简介

    FC是由美国标准化委员会(ANSI)的X3T11小组于1988年提出的高速串行传输总线,解决了并行总线SCSI遇到的技术瓶颈,并在同一大的协议平台框架下可以映射更多FC-4上层协议.FC具备通道和网络 ...

  8. P2P技术简介

    P2P技术简介 NAT( Network Address Translation)穿越(俗称打洞)技术 前言: p2p已经存在于我们生活的方方面面:我们通过下载在工具(比如迅雷,bitorent,各种 ...

  9. 【CUDA并行程序设计系列(1)】GPU技术简介

    http://www.cnblogs.com/5long/p/cuda-parallel-programming-1.html 本系列目录: [CUDA并行程序设计系列(1)]GPU技术简介 [CUD ...

随机推荐

  1. 【原创】在Windows系统中使用VC9、VC11编译32位、64位PHP及其扩展

    项目中需要使用runkit模块实现AOP,但是团队成员的开发环境都是Windows,而runkit模块官方没有提供Windows环境下的dll扩展,只能自己编译. 下面是编译过程的分类总结.(操作系统 ...

  2. Ubuntu 16.04.2 LTS 安装 jdk1.6 和 tomcat6 (一)

    java和tomcat环境配置已经有很多教程和文章,最近项目需要配置Ubuntu 16.04.2下的古老的java6和tomcat 6,遇到小坑,特记录和分享. 网上的教程不是太新,就是太老,还有一些 ...

  3. Windows和linux通过命令互传文件

    下载pscp https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 放在Windows的c:windows/system32下 ...

  4. layou split 属性

    layou split:true -  显示侧分栏

  5. Android ImageView,ImageButton 与 Button

    1. ImageButton 继承自 ImageView.两者具备甚小,因为 ImageView 同样可以点击相应,同样有点击的阴影效果.实际上他们的区别在于默认 style.比如同样放一个背景和一个 ...

  6. ceph 存储池PG查看和PG存放OSD位置

    1. 查看PG (ceph-mon)[root@controller /]# ceph pg stat 512 pgs: 512 active+clean; 0 bytes data, 1936 MB ...

  7. java—过虑器基础(47)

    在web项目中就只有三大组件: Filter过虑器 监听器. Servlet 在web中过虑器就是一个类javax.servlet.Filter. 过虑器是用于在执行时,过虑用户的请求(request ...

  8. java学习笔记DOM4J解析(7)

    DOM4J即Document Object Model for Java使用java技术以文档方式解析XML数据的模型. DOM4J是开源组织提供的一个免费的.强大的XML解析工具,如果开发者需要在项 ...

  9. A - 还是畅通工程(最小生成树)

    点击打开链接 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并 ...

  10. 【SSH学习笔记】用Struts2实现简单的用户登录

    准备阶段 在使用学习Struts2的时候首先要下载相应的架包 Struts2资源下载 这里建议下载第一个,在struts-2.5.14.1-all.zip里有很多实用的东西,不仅有架包还有官方为开发者 ...