已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年郴州资兴市事业单位招聘笔试真题
- 包装材料生产线项目可行性研究报告
- 初五新春活动方案策划(3篇)
- 2026年大数据分析专业人员劳动合同
- 河北省保定市2026年重点学校初一入学数学分班考试试题及答案
- 贵州政府采购评审专家考试试题及答案
- 2026年新疆高考(物理)考试试卷(真题)答案解析
- 2026年黑龙江中考数学(真题)试卷带答案
- 2026年宁夏小升初语文(真题)试卷(含答案)
- 2026年四川小升初英语真题(含答案)
- IPC7711C7721C-2017(CN)电子组件的返工修改和维修(完整版)
- 有色金属冶炼质检员上岗证考试题库及答案
- 钓鱼基础知识课件下载
- 肺部感染合并心力衰竭的护理
- 输尿管成形术后护理
- 《院感相关知识》课件
- 伴生放射性矿开发利用企业环境辐射监测要求、监测年度报告格式与内容
- DB43T 1570-2018 烟花爆竹自动化生产线通 用安全技术条件
- 2021译林版高中英语选择性必修三课文翻译
- 实验室试剂管理培训
- 2024年中远海运物流所属宁波中远海运物流有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论