osal_start_system运行操作系统函数

/*********************************************************************
* @fnosal_start_system
*
* @brief
*
*This function is the main loop function of the task system.It
*will look through all task events and call the task_event_processor()
*function for the task with the event.If there are no events (for
*all tasks), this function puts the processor into Sleep.
*This Function doesn't return.
*
* @paramvoid
*
* @returnnone
*/
注解:这个是任务系统轮询的主要函数。他会查找发生的事件然后调用相应的事件执行函数。如果没有事件登记要发生,那么就进入睡眠模式。这个函数是永远不会返回的。
【osal_start_system运行操作系统函数】

void osal_start_system( void ) { #if !defined ( ZBIT ) && !defined ( UBIT ) for(; ; )// Forever Loop #endif { uint8 idx = 0; osalTimeUpdate(); //扫描哪个事件被触发了,然后置相应的标志位 Hal_ProcessPoll(); // This replaces MT_SerialPoll() and osal_check_timer().do { if (tasksEvents[idx])// 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 = tasksEvents[idx]; //提取需要处理的任务中的事件 tasksEvents[idx] = 0; // Clear the Events for this task.清除本次任务的事件 HAL_EXIT_CRITICAL_SECTION(intState); //退出临界区events = (tasksArr[idx])( idx, events ); ///通过指针调用任务处理函数,关键HAL_ENTER_CRITICAL_SECTION(intState); ///进入临界区 tasksEvents[idx] |= 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 } }






    推荐阅读