UEFI.源码分析.DXE的异步事件服务.第三部分.定时器与时钟中断

  • 源代码:EDK2
  • 版本:UDK2017
  • UEFI源码分析第二篇,异步事件服务
  • 第三部分,定时器
  • 第一部分,事件驱动
  • 第二部分,任务优先级

设置定时器EVT_TIMER

244 EFI_STATUS                            
245 EFIAPI                                
246 CoreSetTimer (                        
247   IN EFI_EVENT            UserEvent,  
248   IN EFI_TIMER_DELAY      Type,       
249   IN UINT64               TriggerTime 
250   )                                   

函数CoreSetTimer将定时器类型的事件设置好超时时间,也就是更新Event->Timer

273   if (Event->Timer.Link.ForwardLink != NULL) {
274     RemoveEntryList (&Event->Timer.Link);     
275     Event->Timer.Link.ForwardLink = NULL;     
276   }                                           

进一步调用CoreInsertEventTimer将定时器设置好。

281   if (Type != TimerCancel) {                                          
282                                                                       
283     if (Type == TimerPeriodic) {                                      
284       if (TriggerTime == 0) {                                         
285         gTimer->GetTimerPeriod (gTimer, &TriggerTime);                
286       }                                                               
287       Event->Timer.Period = TriggerTime;                              
288     }                                                                 
289                                                                       
290     Event->Timer.TriggerTime = CoreCurrentSystemTime () + TriggerTime;
291     CoreInsertEventTimer (Event);                                     
292                                                                       
293     if (TriggerTime == 0) {                                           
294       CoreSignalEvent (mEfiCheckTimerEvent);                          
295     }                                                                 
296   }                                                                   

函数CoreInsertEventTimer如下

 40 VOID                   
 41 CoreInsertEventTimer ( 
 42   IN IEVENT   *Event   
 43   )                    
 44 {                      
 54   TriggerTime = Event->Timer.TriggerTime; 
 59   for (Link = mEfiTimerList.ForwardLink; Link != &mEfiTimerList; Link = Link->ForwardLink) {
 60     Event2 = CR (Link, IEVENT, Timer.Link, EVENT_SIGNATURE);                                
 61                                                                                             
 62     if (Event2->Timer.TriggerTime > TriggerTime) {                                          
 63       break;                                                                          
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值