osal主循环流程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
osal主循环流程.doc

OSAL主循环流程 Zigbee 2010-04-24 11:55:44 阅读761 评论6 ??字号:大中小?订阅 我使用的协议栈版本及例子信息: ZigBee2006\Texas Instruments\ZStack-1.4.3-1.2.1\Projects\zstack\Samples\SampleApp 接上篇OSAL初始化流程.记录下个人对OSAL主循环流程的学习: //-------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------- OSAL系统主循环函数: void osal_start_system( void ) { #if !defined ( ZBIT )??//不知道是什么东西 ? for(;;)?? // Forever Loop #endif ? { ??? uint8 idx = 0; ??? Hal_ProcessPoll();? // This replaces MT_SerialPoll() and osal_check_timer(). ???????????????????????????????????? //轮询TIMER与UART //-------------------------- //执行循环语句:tasksEvents[idx]是一个指针变量,指向存放任务idx的存储空间,初始化时由 //osal_memset()设为0,只要不为空类型NULL, //即有相对应任务事件发生,就break跳出循环体,通过下面的程序进行任务事件处理。 //如果为空,执行判断语句,即idx自增,再返回轮询有无各层的任务事件发生。如果 //执行完循环语句都没有检测到有事件发生,idx=7,进入睡眠。(对于本例子来说,任务数组里只有七个任务,tasksEvents[0]~tasksEvents[6],tasksEvents[6]就是用户自已添加的任务,idx随着用户添加任务的增多而增大) ??? do { ????? if (tasksEvents[idx])? // Task is highest priority that is ready. ????? {????????????????????? ??????? break;????????????? ????? } ??? } while (++idx tasksCnt); //tasksCnt=7(针对本例子,随着用户应用任务增多而增大) //------------------------- ??? if (idx tasksCnt) ??? { ????? uint16 events; ????? halIntState_t intState;? //中断位状态 ????? HAL_ENTER_CRITICAL_SECTION(intState);? ?//中断临界状态:保存先前中断状态,然后关中断 ????? events = tasksEvents[idx];? //uint16 events;对应有事件发生的任务的数组 ????? tasksEvents[idx] = 0;? // Clear the Events for this task.? NULL ????? HAL_EXIT_CRITICAL_SECTION(intState);? //跳出中断临界状态:恢复先前中断状态???? ??????events = (tasksArr[idx])( idx, events );???//调用相对应的任务事件处理函数处理,各类事件处理函 ???????????????????????????????????????????????????????????????????????? ?//数M(task_id,event)返回的都是这个任务未被处理的事件 ??????HAL_ENTER_CRITICAL_SECTION(intState); ????? tasksEvents[idx] |= events;??? // Add back unprocessed events to the current task. ?????????????????????????????????????????????????? ?//把刚才返回未处理的任

文档评论(0)

lmother_lt + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档