zigbee学习笔记(一).docx_第1页
zigbee学习笔记(一).docx_第2页
zigbee学习笔记(一).docx_第3页
zigbee学习笔记(一).docx_第4页
zigbee学习笔记(一).docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

Zstack的任务处理机制Zmain.c中初始化部分重点掌握:osal_init_system(); /初始化操作系统osal_start_system(); /执行操作系统Z-Stack 操作系统初始化中:osalInitTasks(); /初始化系统的任务初始化系统的任务:void osalInitTasks( void )uint8 taskID = 0;/分配内存,返回指向缓冲区的指针tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);/设置所分配的内存空间单元值为0osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt);/任务优先级由高向低依次排列,高优先级对应taskID 的值反而小macTaskInit( taskID+ ); /macTaskInit(0),用户不需考虑nwk_init( taskID+ ); /nwk_init(1),用户不需考虑Hal_Init( taskID+ ); /Hal_Init(2),用户需考虑APS_Init( taskID+ ); /APS_Init(3),用户不需考虑ZDApp_Init( taskID+ ); /ZDApp_Init(4),用户需考虑GenericApp_Init ( taskID ); / GenericApp_Init _Init(5),用户需考虑注明用户不需考虑的任务Ti已经给初始化完成了,在编程的时候可以不予考虑。我们只需要考虑硬件层和应用层的任务初始化。如:Hal_Init( taskID+ );ZDApp_Init( taskID+ );GenericApp_Init ( taskID );下面说一下如何在程序中加入自己的任务:在osalInitTasks()和tasksArr添加相应的项就可以了。1.修改osalInitTasks()Void osalInitTasks(void)OuhsApp_Init(taskID+);PhotoApp_Init(taskID);2.修改tasksArrConst pTaskEventHandlerFn taskArr= OuhsApp_ProcessEventPhotoApp_ProcessEvent;3.添加-Init()和-ProcessEvent()Void PhotoApp_Init(uint8 task_id)Uint16 PhotoApp_ProcessEvent(uint8 task_id uint16 events)以上是任务的初始化与任务的添加,下面看以下任务是如何处理的?osal_start_system(); /执行操作系统void osal_start_system( void )#if !defined ( ZBIT ) & !defined ( UBIT ) for(;) / Forever Loop#endif osal_run_system(); osal_run_system:void osal_run_system( void ) uint8 idx = 0; osalTimeUpdate(); /这里是在扫描哪个事件被触发了,然后置相应的标志位 Hal_ProcessPoll(); /硬件进程调用,This replaces MT_SerialPoll() and osal_check_timer(). do if (tasksEventsidx) / Task is highest priority that is ready. break; / 得到待处理的最高优先级任务索引号 idx while (+idx tasksCnt); if (idx tasksCnt) uint16 events; halIntState_t intState; HAL_ENTER_CRITICAL_SECTION(intState);/ 进入临界区,保护 events = tasksEventsidx; /提取需要处理的任务中的事件 tasksEventsidx = 0; / Clear the Events for this task.清除本次任务的事件 HAL_EXIT_CRITICAL_SECTION(intState); / 退出临界区 activeTaskID = idx; events = (tasksArridx)( idx, events ); /通过指针调用任务处理函数,关键 activeTaskID = TASK_NO_TASK; HAL_ENTER_CRITICAL_SECTION(intState); / 进入临界区,保护 tasksEventsidx |= events; / Add back unprocessed events to the current task.保存未处理的事件 HAL_EXIT_CRITICAL_SECTION(intState); / 退出临界区 #if defined( POWER_SAVING ) else / Complete pass through all task events with no activity? osal_pwrmgr_powerconserve(); / Put the processor/system into sleep #endif /* Yield in case cooperative scheduling is being used. */#if defined (configUSE_PREEMPTION) & (configUSE_PREEMPTION = 0) osal_task_yield(); #endif此表的顺序必须和osalInitTask中的顺序相同:const pTaskEventHandlerFn tasksArr = macEventLoop, nwk_event_loop, Hal_ProcessEvent,#if defined( MT_TASK ) MT_ProcessEvent,#endif APS_event_loop,#if defined ( ZIGBEE_FRAGMENTATION ) APSF_ProcessEvent,#endif ZDApp_event_loop,#if defined ( ZIGBEE_FREQ_AGILITY ) | defined ( ZIGBEE_PANID_CONFLICT ) ZDNwkMgr_event_loop,#endif GenericApp_Proces

温馨提示

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

评论

0/150

提交评论