嵌入式操作系统内核原理和开发(延时操作)

嵌入式操作系统内核原理和开发(延时操作)

ID:9338575

大小:94.50 KB

页数:6页

时间:2018-04-28

嵌入式操作系统内核原理和开发(延时操作)_第1页
嵌入式操作系统内核原理和开发(延时操作)_第2页
嵌入式操作系统内核原理和开发(延时操作)_第3页
嵌入式操作系统内核原理和开发(延时操作)_第4页
嵌入式操作系统内核原理和开发(延时操作)_第5页
资源描述:

《嵌入式操作系统内核原理和开发(延时操作)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、软件英才网软件行业驰名招聘网站嵌入式操作系统内核原理和开发(延时操作)延时操作是操作系统中经常遇到的一种情形。延时的原因很多,有的时候是为了等待外设芯片处理结束,有的时候是为了暂时释放cpu的使用权,有的就是为了希望在一段时间获取资源,如果没法在单位时间内获取,放弃等待。但是不管怎么说,延时都是操作系统必不可少的一个工作。下面我们就看看延时是怎么实现的,[cpp]viewplaincopy1staticvoidtick_list_priority_insert(LIST*head,RAW_TASK_OBJ*task_ptr)2{

2、3RAW_U32val;45LIST*q,*start,*end;6RAW_TASK_OBJ*task_iter_temp;78start=end=head;9val=task_ptr->tick_remain;101112for(q=start->next;q!=end;q=q->next){1314task_iter_temp=list_entry(q,RAW_TASK_OBJ,tick_list);1516/*sortedbyremaintime*/1718if((task_iter_temp->tick_match-ra

3、w_tick_count)>val){19break;20}21}2223list_insert(q,&task_ptr->tick_list);242526}272829voidtick_list_insert(RAW_TASK_OBJ*task_ptr,RAW_U32time)3031{32LIST*tick_head_ptr;3334RAW_U16spoke;35有需要请联系我们软件英才网软件行业驰名招聘网站1if(time){23task_ptr->tick_match=raw_tick_count+time;4task

4、_ptr->tick_remain=time;56spoke=(RAW_U16)(task_ptr->tick_match&(TICK_HEAD_ARRAY-1));7tick_head_ptr=&tick_head[spoke];89tick_list_priority_insert(tick_head_ptr,task_ptr);1011task_ptr->tick_head=tick_head_ptr;1213}1415}16延时的代码其实不是很多,所以我在这里把最重要的两个函数给粘贴到这里了。因为每个线程都有可能延时,那

5、么怎么处理这些线程之间的关系就是我们需要做的事情了。我们看到了,我们直接用tick_match表示线程需要等待的那个时间点就可以了。当然,tick是不断增加的,我们可以把尾数相同的线程按照高低顺序排列在一起,这样在对应的tick到来的时候,就直接按照尾数查找就可以了,tick_list_priority_insert就是干了这么一件事情。那么,tick什么时候到期呢?到期又该怎么处理呢,我们接着往下看,[cpp]viewplaincopy17voidtick_list_update(void)18{1920LIST*tick_h

6、ead_ptr;21RAW_TASK_OBJ*p_tcb;22LIST*iter;23LIST*iter_temp;2425RAW_U16spoke;2627RAW_SR_ALLOC();2829RAW_CRITICAL_ENTER();30有需要请联系我们软件英才网软件行业驰名招聘网站1raw_tick_count++;2spoke=(RAW_U16)(raw_tick_count&(TICK_HEAD_ARRAY-1));3tick_head_ptr=&tick_head[spoke];4iter=tick_head_ptr

7、->next;56while(RAW_TRUE){78/*searchallthetimelistifpossible*/9if(iter!=tick_head_ptr){1011iter_temp=iter->next;12p_tcb=list_entry(iter,RAW_TASK_OBJ,tick_list);1314/*Sincetimelistissortedbyremaintime,sojustcamparetheabsolutetime*/15if(raw_tick_count==p_tcb->tick_match

8、){1617switch(p_tcb->task_state){18caseRAW_DLY:1920p_tcb->block_status=RAW_B_OK;21p_tcb->task_state=RAW_RDY;22tick_list_remove(p_tcb

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。