嵌入式操作系统内核原理和开发(延时操作)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
延时操作是操作系统中经常遇到的一种情形。延时的原因很多,有的时候是为了等待外设芯片处理结束,有的时候是为了暂时释放cpu的使用权,有的就是为了希望在一段时间获取资源,如果没法在单位时间内获取,放弃等待。但是不管怎么说,延时都是操作系统必不可少的一个工作。下面我们就看看延时是怎么实现的,
RAW_U16 raw_pend_object(RAW_COMMON_BLOCK_OBJECT *block_common_obj, RAW_TASK_OBJ *task_ptr, RAW_U32 timeout) { #if (CONFIG_RAW_ASSERT > 0) if (timeout == 0) { RAW_ASSERT(0); } #endif task_ptr->block_obj = block_common_obj; if (timeout == RAW_WAIT_FOREVER) { task_ptr->task_state = RAW_PEND; } /*task is blocked with timeout*/ else { tick_list_insert(task_ptr,timeout); task_ptr->task_state = RAW_PEND_TIMEOUT; } /*Remove from the ready list*/ remove_ready_list(&raw_ready_queue, task_ptr); if (block_common_obj->block_way == RAW_BLOCKED_WAY_FIFO) { list_insert(&block_common_obj->block_list, &task_ptr->task_list); } else { /*add to the priority sorted block list*/ add_to_priority_list(&block_common_obj->block_list, task_ptr); } return RAW_SUCCESS; }大家留意一下这里timeout参数的处理过程,关注一下对应的tick_list_insert函数,这样就可以明白我的意思了。