免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1179 | 回复: 0
打印 上一主题 下一主题

cc2430学习2 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-24 11:38 |只看该作者 |倒序浏览
上节基本上初步认识了Zstack的一些情况,今天继续我的学习,打开Sample例子看看,究竟ZIGBEE是怎么回事。
毫无疑问:如果是第一次打开这个例子工程,肯定很迷糊,因为此时我迷糊了。对图2-1我简直是相当迷糊。


图2-1
这么多文件夹,打开之后又有那么多文件,从何看起?不要着急,特别是有些人拿到之后,啥都不知道的人第一个问题就是:我要实现XXX,在哪修改或者在哪添加我的函数呢?凡是我遇到这样的客户,我就可以肯定他技术部咋的。就连我这个外行都知道,不把这些弄明白,就是实现XXX只需要修改一个字母,那也不知道在哪改啊?所以我不急,但是我也理解很多客户,因为有时候项目催的比较急,毕竟老板都是外行嘛!
两条路: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();
  /* Display the device info on the LCD */------------液晶支持显示
#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。
/*********************************************************************
* @fn      zmain_ext_addr
* @brief   Makes extended address if none exists.确定扩展地址是有效的
* @return  none
*********************************************************************/
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


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/73801/showart_1807638.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP