OSALA主循环流程的.docVIP

  • 1
  • 0
  • 约9.63千字
  • 约 8页
  • 2017-08-20 发布于浙江
  • 举报
OSALA主循环流程的

OSAL主循环流程 接上篇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. ?????????????????????????????????????????????????? //把刚才返回未处理的任务事件添加加当前任务中再进行处理 ????????????????????????????????????????????????? //(跳出此if(idx tasksCnt)循环再进行if (tasksEvents[idx])判断并处理) ??????HAL_EXIT_CRITICAL_SECTION(intState)

文档评论(0)

1亿VIP精品文档

相关文档