Zigbee系列 学习笔记二(工程文件分析)

以下为转载内容,因为学习Zigbee,稍作整理了一下,希望作者不要怪罪。

一、下载ZStack-CC2530.2.5.1a 网址http://download.csdn.net/detail/thanksgining/8328925

下载后:

二、安装ZStack-CC2530.2.5.1a

安装后:

Components:顾名思义这个是库文件,里面放了一些ZDO,driver,hal,zcl等库代码

Documents:这个不用说大家都知道是放TI的开发文档的,你能够把这些文档一个个看懂,你对这个协议栈已经是了如指掌了。里面很多都是讲述协议栈的API的必须读

Projects:这个文件夹放的是TI协议栈的例子程序,一个个例子程序都是以一个个project的形式给我们的,学好这些例子程序的一两个,基本你就能做事情了

Tools:这个文件是放TI的例子程序的一些上位机之类的程序,作为工具使用

Components文件夹

如上所言,全是一些库的东西,hal是硬件层面上的一些driver等等。mac、zmac是mac层的协议接口,mt是我们用到的API几乎都可以在这里找到例子。osal这个就是TI的ZStack协议栈的操作系统,是事件驱动的,stack是一些zdo和zcl等等。

三、打开SamleApp.eww工程,路径:Projects\zstack\Samples\SampleApp\CC2530DB

1、进入main函数,文件路径:ZMain下的ZMain.c

int main( void )

{

  /* * Turn off interrupts 关闭所有中断,其实就是关闭总中断 * #define INTS_ALL 0xFF * 最终调用 EA = 0; */

  osal_int_disable( INTS_ALL );

   /* * Initialization for board related stuff such as LEDs * 初始化系统时钟、LEDs */

  HAL_BOARD_INIT();

  /* * Make sure supply voltage is high enough to run * 检查芯片电压是否正常 */

  zmain_vdd_check(); // Initialize board I/O InitBoard( OB_COLD );

  /* * Initialze HAL drivers * 初始化ADC、DMA、AES、LED、LCD、KEY * UART、SPI等有放在此函数初始化,但没有实现 * 硬件相关初始化 */

  HalDriverInit();

  /* * Initialize NV System * 初始化FLASH、存储器 */

  osal_nv_init( NULL );

  /* * Initialize the MAC * 初始化MAC层 */

  ZMacInit();

  /* * Determine the extended address * 确定IEEE 64位地址 */

  zmain_ext_addr();

  #if defined ZCL_KEY_ESTABLISH //没有定义

  // Initialize the Certicom certificate information.

  zmain_cert_init();

  #endif

  /* * 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();

  /* * Allow interrupts 允许所有中断,其实就是开总中断 * #define INTS_ALL 0xFF * 最终调用 EA = 1; */

  osal_int_enable( INTS_ALL );

  /* * Final board initialization * 初始化按键 * #define OB_READY 2 */

  InitBoard( OB_READY );

  /* * Display information about this device * 在LCD上打印显示此设备的设备信息 */

  zmain_dev_info();

  /* Display the device info on the LCD */

  #ifdef LCD_SUPPORTED //没有定义

  zmain_lcd_init();

  #endif

  #ifdef WDT_IN_PM1 //没有定义

   /* If WDT is used, this is a good place to enable it. */

  WatchDogEnable( WDTIMX );

  #endif

  /* * No Return from here * 执行操作系统,进入后不会返回 */

  osal_start_system();

  return 0; // Shouldn‘t get here.

}//main()

对于一个片上系统而言,必需有电源、晶振/时钟、存储器等部件组成,所有我们的协议栈也必需初始化这些。从main函数也可以看出,它确实也初始化的电压、时钟、存储器,还有网络、IEEE、系统、非易失变量等一些初始化,这些初始化主要根据具体的硬件平台。而ZStack协议栈采用的是多任务机制,并且采用轮询方式来执行这些任务。在调用osal_start_system启动系统之后,系统就开始永无止境地轮询来执行每个任务。在看系统启动后是如何轮询所有的任务之前,我们先来看下系统初始化函数osal_init_system

uint8 osal_init_system( void )

{

  /* * Initialize the Memory Allocation System * 初始化内存分配 */

  osal_mem_init();

  /* * Initialize the message queue * 初始化消息队列 * /

  /*typedef void * osal_msg_q_t; * osal_msg_q_t osal_qHead;

  /*osal_qHead是一个void的指针,可以指向任何类型 */

  osal_qHead = NULL;

  /* * Initialize the timers * 函数里只有一条语句:osal_systemClock = 0; * 而static uint32 osal_systemClock; * 初始化定时计时变量为0 */

  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 );

}

系统的初始化主要从操作系统层面来做相应的初始化,比如内存管理、电源管理、消息队列等一些初始化。其中的定时器初始化,是因为ZStack-OSAL系统采用了定时捕捉任务事件的发生。这里主要是系统任务初始化函数osalInitTask(),将整个系统的所有任务都初始化了。

时间: 2024-10-18 00:18:01

Zigbee系列 学习笔记二(工程文件分析)的相关文章

Zigbee系列 学习笔记五(信道选择)

EEE 802.15.4/ZigBee工作在工业科学医疗(ISM)频段,定义了两个工作频段,即2.4 GHz频段和868/915 MHz频段.在IEEE 802.15.4中,总共分配了27个具有3种速率的信道:在2.4 GHz频段有16个速率为250kb/s的信道,在915 MHz频段有10个40 kb/s的信道,在868 MHz频段有1个20 kb/s的信道. 这些信道的中心频率按如下定义(k为信道数): Fc=868.3MHz,(k=0) Fc=906MHz+2(k-1)MHz,(k=1,2

Zigbee系列 学习笔记四(睡眠及唤醒)

大家都知道2430有3种睡眠模式,pm2模式比较省功耗而且可以被定时唤醒:pm3模式最省电但是只能被外部中断唤醒.开启睡眠功能很简单: 首先确认/Texas Instruments/ZStack-1.4.3-1.2.1/Projects/zstack/Tools/CC2430DB目录下的f8wConfig.cfg文件中DRFD_RCVC_ALWAYS_ON定义为FALSE:然后在IAR的Options->C/C++Compiler->Preprocessor->Defined symbo

Zigbee系列 学习笔记一(协议栈)

IEEE802.15.4协议内容: 802.15.4,即IEEE用于低速无线个人域网(LR-WPAN)的物理层和媒体接入控制层规范.支持两种网络拓扑,即单跳星状或当通信线路超过10m时的多跳对等拓扑.但是对等拓扑的逻辑结构由网络层定义.LR-WPAN中的器件既可以使用64位IEEE地址,也可以使用在关联过程中指配的16位短地址.一个802.15.4网可以容纳最多216个器件.在这个网络中,根据设备所具有的通信能力,可以分为全功能设备(full-function device,FFD)和精简功能设

linux学习笔记(二)之文件系统结构

一.目录结构 1.目录功能介绍 很多linux系统的发行版目录结构布局都遵循着FSSTND标准,这一标准的特点是根目录非常简洁,只包含系统最基本的文件,遵循这一标准,有利于程序的编写和移植,也便于系统管理和维护. (1)/etc目录 这个目录主要用于存放系统管理相关的配置文件以及子目录,其中比较重要的有系统初始化文件/etc/re,用户信息文件/etc/passwd等,相关网络配置文件和服务启动文件也均在这个目录下.详细信息如下: passwd 用户库文件,所有用户的用户名,UID,GID和工作

Zigbee系列 学习笔记三(初始化程序解析)

1 int main( void ) 2 { 3 // Turn off interrupts 4 osal_int_disable( INTS_ALL ); 5 6 // Initialization for board related stuff such as LEDs 7 HAL_BOARD_INIT(); 8 9 // Make sure supply voltage is high enough to run 10 zmain_vdd_check(); 11 12 // Initia

linux学习笔记二:文件与目录管理

APUE 学习笔记(二) 文件I/O

1. 文件I/O 对于内核而言,所有打开的文件都通过文件描述符引用,内核不区分文本文件和二进制文件 open函数:O_RDONLY  O_WRONLY  O_RDWR create函数: close函数:关闭一个文件时还会释放该进程加在该文件上的所有记录锁 lseek函数:显式地为一个打开的文件设置其偏移量 每个打开的文件都有一个与其相关联的 "当前文件偏移量",用以度量从文件开始处计算的字节数,通常,读.写操作都从当前文件偏移量处开始,并使偏移量增加所读写的字节数 文件偏移量可以大于

Linux学习笔记二:Linux的文件处理命令

1.文件处理命令:ls 作用:显示目录文件 语法:ls [选项] [文件或目录] [选项]:-a 显示所有文件,包括隐藏文件   -l 显示详细信息 -d 查看目录属性 [文件或目录]:当省略时默认将当前路径作为参数 实例: · ls 显示当前文件夹下所有文件(不包括隐藏文件)的信息 · ls -l 显示当前文件夹下所有文件(不包括隐藏文件)的详细信息 · ls -ld  显示当前文件夹的详细信息 技巧:要查看文件夹的信息,必须加-d参数:要查看详细参数,必须加-l参数. 2.文件的属性 使用”

Linux System Programming 学习笔记(二) 文件I/O

1.每个Linux进程都有一个最大打开文件数,默认情况下,最大值是1024 文件描述符不仅可以引用普通文件,也可以引用套接字socket,目录,管道(everything is a file) 默认情况下,子进程会获得其父进程文件表的完整拷贝 2.打开文件 open系统调用必须包含 O_RDONLY,O_WRONLY,O_RDWR 三种存取模式之一 注意 O_NONBLOCK模式 int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644