从零开始学习Zigbee开发 - 图文(3)

2019-08-03 13:05

图1-10

该节到此结束,下节就进入SampleApp例程中进行学习!

从零开始学习Zstack之2

上节基本上初步认识了Zstack的一些情况,今天继续我的学习,打开Sample例子看看,究竟ZIGBEE是怎么回事。

毫无疑问:如果是第一次打开这个例子工程,肯定很迷糊,因为此时我迷糊了。对图2-1我简直是相当迷糊。

图2-1

两条路:1就是先看主函数,2就是看看TI提供例子说明文档没有。 我这里先看看主函数再说哈!因为我就知道从主函数看起.

没办法大概每个文件夹找啊,主函数的特征还是比较明明显的,见图2-2所示:

图2-2

下面把主函数复制过来简单看下: ZSEG int main( void ) {

// Turn off interrupts------------关闭中断 osal_int_disable( INTS_ALL );

// Initialize HAL-----------初始化HAL,关于HAL是什么我想后面会有介绍的。 HAL_BOARD_INIT();

// Make sure supply voltage is high enough to run----电压检测,最好是能保证芯片能正常工作的电压

zmain_vdd_check();

// Initialize stack memory-------------初始化stack存储区 zmain_ram_init();

// Initialize board I/O------------初始化板载IO InitBoard( OB_COLD );

// Initialze HAL drivers-------------初始化HAL驱动 HalDriverInit();

// Initialize NV System--------------初始化NV系统,NV是什么后面我想也会有介绍的

osal_nv_init( NULL );

// Determine the extended address------------确定扩展地址(64位IEEE/物理地址) zmain_ext_addr();

// Initialize basic NV items----------------初始化基本NV条目 zgInit();

// Initialize the MAC----------------初始化MAC ZMacInit(); #ifndef NONWK

// Since the AF isn't a task, call it's initialization routine afInit(); #endif

// Initialize the operating system----------初始化操作系统,看样子这里面还有OS,麻烦了??..! osal_init_system();

// Allow interrupts-------------允许中断 osal_int_enable( INTS_ALL );

// Final board initialization------------------最后的版在初始化 InitBoard( OB_READY );

// Display information about this device---------------显示设备信息 zmain_dev_info(); ------------液晶支持显示 #ifdef LCD_SUPPORTED zmain_lcd_init(); #endif

osal_start_system(); // No Return from here-------------------这里没有返回,大概是进入OS了。 } // main()

可以看到基本上都是初始化函数,因为函数名称都基本上带了init字样的,呵呵,个人觉

得TI的变成习惯比我好,一看名称就知道大概功能了。所以这里也奉劝各位像我这样菜鸟级的初学者,一开始一定就要养成规范化编程的习惯,据说这样维护以及以后升级或者移植兼容性都比较好。我就先不管各个初始化函数是怎么实现的,我先看看各个功能是什么,现掌握整体功能在细化,我觉得这样的学习方法比较好,因为代码是在太多了,从一开始就逐句看,我敢保证没几个人有耐心看完看明白!

幸好每个初始化函数都有一句说明,虽然是英文的,但是理解起来一点都不难的。关于每个函数的功能我就直接写在上面的程序里面,节省纸张哈! ?????????????. 一句话:主函数的功能就是初始化!

主函数看完了又开始模糊了,又从何看起呢?在无从下手之际,只有去寻求TI说明文档的帮助了。上节不是漏掉了内容,是关于演示结果的,这里做上补充,怕因为缺调一点后面遇到什么不理解的就惨了! Sample例子演示演示现象:

1、认识硬件------------按键和LED

上节提到了 EM和DB两个板子,其硬件是不一样的。按键EM就有5各SW1~SW5,而DB只有1各方向键,但是他们有个对应关系,如图2-3所示.

图2-3

LED数量和颜色也不一样,EM有四个LED,如图2-4;而DB只有两个,如图2-5。

如图2-4

如图2-5

关于上面几个图2-4/5中出现的LEDx实际上是程序中出现的关键字。 2、初始化64位IEEE地址

实际上在主函数中有这么个初始化函数的:zmain_ext_addr()。这里说如果地址复位为0xFFFFFFFFFFFFFFFF的话,那么就会不停的闪烁LED1,一直等到按键SW5按下后程序才能继续运行,意思就是说按下SW5后就把无效的地址初始化为有效地物理地址了,这个应该是程序上实现的,那么就来看看对应的程序zmain_ext_addr。

static ZSEG void zmain_ext_addr( void ) {

uint8 i; uint8 led; uint8 tmp; uint8 *xad; uint16 AtoD;

// Initialize extended address in NV初始化NV里的扩载地址 osal_nv_item_init( ZCD_NV_EXTADDR, Z_EXTADDR_LEN, NULL );

osal_nv_read( ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, &aExtendedAddress );

// Check for uninitialized value (erased EEPROM = 0xFF)检查是否为无效值(地址) xad = (uint8*)&aExtendedAddress; for ( i = 0; i < Z_EXTADDR_LEN; i++ )

if ( *xad++ != 0xFF ) return;-------------------如果有一个字节不为0xFF,那么该地址有效返回 #ifdef ZDO_COORDINATOR tmp = 0x10; #else


从零开始学习Zigbee开发 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2014高考物理大一轮复习讲义第十三章第3课时原子与原子核解读

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: