物联网专业教师培训任务的建立_第1页
物联网专业教师培训任务的建立_第2页
物联网专业教师培训任务的建立_第3页
物联网专业教师培训任务的建立_第4页
物联网专业教师培训任务的建立_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、物联网专业2013年1月教师培训任务的建立OSAL是ZSTACK协议栈的核心,ZSTACK的任何一个子系统都作为一个任务,在开发过程中必须要创建OSAL任务来运行应用程序。每一个事件都是通过任务来实现的。如果要在ZSTACK协议栈中添加自己的事件,首先要添加自己的任务。添加任务是在应用层实现的。任务的建立Zstack协议栈里面运行的是OS系统,OS系统中事件的产生和处理是通过任务来实现的。端点是建立一个任务所必不可少的内容,OS系统中可以有多个任务,一个任务可以有多个端点,一个端点包含输入簇和输出簇,并且输入簇和输出簇必须相对应。任务的建立任务的建立初始化系统int main( void )

2、/ 关闭所有中断 osal_int_disable( INTS_ALL ); / 初始化相关硬件 HAL_BOARD_INIT(); / 电源检测 zmain_vdd_check(); / 初始化堆栈 zmain_ram_init(); /初始化i/o InitBoard( OB_COLD ); / 初始化硬件驱动 HalDriverInit(); /初始化NV osal_nv_init( NULL ); / Initialize basic NV items zgInit(); / 初始化MAC ZMacInit(); / 初始化地址 zmain_ext_addr();#ifndef NON

3、WK任务的建立 / AF初始化 afInit();#endif / 初始化操作系统 osal_init_system(); / 开中断 osal_int_enable( INTS_ALL ); / 复位 InitBoard( OB_READY ); /sd rest / 设备硬件初始化 zmain_dev_info(); /* LCD*/#ifdef LCD_SUPPORTED zmain_lcd_init();#endif#ifdef WDT_IN_PM1 /* 看门狗 */ WatchDogEnable( WDTIMX );#endif/ 操作系统开始 osal_start_system(

4、); return ( 0 );任务的建立打开工程,可以看到协调器Coodinator和路由器Router目录下有三个文件,MyfirstAppCoordManage.c、MyfirstAppCoodManage.h和OSAL_MyfirstAppCood.c.任务的添加是在OSAL_MyfirsrAppCood.c文件中添加的。任务的建立打开OSAL_MyfirstAppCoord.c文件,可以看到tasksArr 数组和osalInitTasks函数。在taskArr 数组中存放了所有任务的事件处理函数的地址;osalInitTasks是OSAL的任务初始化函数,所有任务的初始化工作都在这

5、里面完成,并且自动给每个任务分配一个ID。定义任务列表const pTaskEventHandlerFn tasksArr = /MAC层 macEventLoop, /网络层 nwk_event_loop, /硬件抽象层 Hal_ProcessEvent, /APS层 APS_event_loop, /ZDO层 ZDApp_event_loop, /自己添加 My_Task_Process_Event;添加自己的任务void osalInitTasks( void ) uint8 taskID = 0; /分配任务列表 tasksEvents = (uint16 *)osal_mem_all

6、oc( sizeof( uint16 ) * tasksCnt); osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt); /MAC任务 macTaskInit( taskID+ ); /网络层任务 nwk_init( taskID+ ); /HAL任务 Hal_Init( taskID+ ); /APS任务 APS_Init( taskID+ ); /ZDO任务 ZDApp_Init( taskID+ ); /自己添加的任务 My_Task_Init( taskID );任务的建立任务的建立任务添加完了之后就要对所添加的任务和想

7、对应的事件进行初始化。初始化是在MyfirsrAppCoordManage.c文件中。void My_Task_Init( byte task_id ) My_TaskID = task_id; /设置广播目的地址 multi_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;/设置广播地址模式 multi_DstAddr.endPoint = MY_ENDPOINT_NO; multi_DstAddr.addr.shortAddr = 0 xffff; /设置单播信息 Single_DstAddr.addrMode = (afAddrMode_t)

8、Addr16Bit; Single_DstAddr.endPoint = MY_ENDPOINT_NO; /初始化端点描述符 My_EndPoint_Desc.endPoint = MY_ENDPOINT_NO; My_EndPoint_Desc.task_id = &My_TaskID; My_EndPoint_Desc.simpleDesc = (SimpleDescriptionFormat_t*)&My_EndPoint_SimpleDesc; My_EndPoint_Desc.latencyReq = noLatencyReqs; /在AF层注册应用对象(一个端点) afRegist

9、er( &My_EndPoint_Desc ); 相应的事件在事件处理函数中处理UINT16 My_Task_Process_Event(byte task_id,UINT16 events) /当一个消息被发送给任务时,SYS_EVENT_MSG,事件会被传递给任务 /表示有一个消息等待处理。 afIncomingMSGPacket_t *MSGpkt; if ( events & SYS_EVENT_MSG ) /从消息队列中取出消息 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(My_TaskID); while ( MSGpkt

10、) switch ( MSGpkt-hdr.event ) /* 当设备成功加入网络以后, ZigBee 设备对象(ZDO)会给所有已经在应用程序框架中注册过的任务 (也就是作为 ZigBee 的应用程序对象存在的任务)发送一个ZDO_STATE_CHANGE消息,消息的状 态指示了当前网络的状态。 */ case ZDO_STATE_CHANGE:/网络状态改变事件 任务的建立 NwkState = (devStates_t)MSGpkt-hdr.status;if ( NwkState = DEV_ZB_COORD ) break; /模块接收到数据信息事件 case AF_INCOMING_MSG_CMD: /处理接收到的数据 My_Task_Process_MSG ( MSGpkt ); break; /按键事件 case KEY_CHANGE: break; default: break; /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论