前言

说实话,我喜欢自己的原创,虽然我写得可能简单了,但我觉得自己在写博客的路途上,一点一点地积累知识,我也借鉴别人的东西,特别是在写这篇文章时所使用的是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();没错,这就是传说中的主函数

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

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

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

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

osal_init_system()函数分析

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

  1. uint8 osal_init_system( void )
  2. {
  3. // Initialize the Memory Allocation System
  4. osal_mem_init();//初始化内存分配系统
  5. // Initialize the message queue
  6. osal_qHead = NULL;//初始化消息队列
  7. // Initialize the timers
  8. osalTimerInit();//初始化定时器
  9. // Initialize the Power Management System
  10. osal_pwrmgr_init();//初始化店里管理系统
  11. // Initialize the system tasks.
  12. osalInitTasks();//初始化系统任务
  13. // Setup efficient search for the first free block of heap.
  14. osal_mem_kick();
  15. return ( SUCCESS );
  16. }

osal_start_system()函数分析

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

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

相信看了上面的注释,对于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. spark-streming 中调用spark-sql时过程遇到的问题

    在spark-streming 中调用spark-sql时过程遇到的问题 使用版本:spark-2.1.0 JDK1.8 1. spark-sql中对limit 的查询结果使用sum() 聚合操作不生 ...

  2. Selenium窗口切换-----Selenium快速入门(六)

    有时候,我们打开多个窗口,进行多窗口操作,那么窗口间该如何切换呢? 切换的方法有两个,一个是通过窗口标题来验证,另一个是通过窗口特定的内容来验证,这两个方法都要求得到的标题或内容是唯一的. 用到的相关 ...

  3. EF一对多的表,模糊查询2个表的数据!

    如用户表和电话表,要求搜索时可以模糊查询姓名和号码.都可以找到包含该字符的所有用户. /// <summary> /// 模糊查询姓名和电话号码,并按姓名排序返回 /// </sum ...

  4. 「HEOI2014」南园满地堆轻絮

    题目链接 戳我 题目出处 菩萨蛮·南园满地堆轻絮                                             温庭筠 南园满地堆轻絮,愁闻一霎清明雨.雨后却斜阳,杏花零落香 ...

  5. 【12c OCP】最新CUUG OCP-071考试题库(51题)

    ------------------------------------------------------- 51.(12-10)choose the best answer: Evaluate t ...

  6. HDP Spark2 HIVE3.1 的问题

    HDP 上安装了 Hive3.1 和 Spark2, 提交 Spark 作业时,报找不到 Hive 中表的问题 但是查一了下 hive 表,明明是存在这个表的.查看日志,注意到如下的一段日志. 没修改 ...

  7. php全局变量漏洞 $GLOBALS

    在Discuz代码中有这么一段: if (isset($_REQUEST[‘GLOBALS’]) OR isset($_FILES[‘GLOBALS’])) {  exit(‘Request tain ...

  8. Apache Flume入门指南[翻译自官方文档]

    声明: 根据官方文档选择性的翻译了下,不对请指正 https://flume.apache.org/FlumeUserGuide.html

  9. Struts2运行原理

    一个请求在Struts2框架中的处理大概分为以下几个步骤: 1 客户端发送请求:2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤 ...

  10. oracle中表空间的相关操作

    Oracle 创建表空间 注意点: 1.如果在PL/SQL 等工具里打开的话,直接修改下面的代码中[斜体加粗部分]执行 2.确保路径存在,比如[E:\app\Quentin\oradata\orcl] ...