Nucleus timer分析

在Nucleus中timer的创建函数是NU_Create_Timer,其定义是

  1. #define         NU_Create_Timer                 TMS_Create_Timer  

通过其参数我们就可以看出如何设置一个timer。

  1. STATUS  TMS_Create_Timer(NU_TIMER *timer_ptr, CHAR *name,  
  2. VOID (*expiration_routine)(UNSIGNED), UNSIGNED id,  
  3. UNSIGNED initial_time, UNSIGNED reschedule_time, OPTION enable)  
  4.   
  5. timer -> tm_actual_timer.tm_timer_type =    TM_APPL_TIMER;  
  6. CSC_Place_On_List(&TMD_Created_Timers_List, &(timer -> tm_created));  
  7. TMD_Total_Timers++;  

创建一个timer是很容易看懂的,我们主要分析timer时间到了之后的系统流程。

在TI平台中使用一个硬件晶振产生中断来作为系统的定时器,每次中断间隔时间作为操作系统的一个tick,也就是一个时间片。当中断发生时也就是产生了一个irq,在以前的irq流程中分析中我们可以知道每个irq都有一个自己的处理函数。在ti的平台的这个函数中我们可以发现如下代码

  1. TMT_Timer_Interrupt();  

这个函数就是Nucleus timer的接口函数,在这个函数中会检查是否有timer的时间到了,如果有timer active需要进行对应的操作,该函数会激活timer的HISR,这个HISR是在Nucleus初始化时TMI_Initialize函数中创建的。

  1. status =  TCCE_Create_HISR((NU_HISR *) &TMD_HISR, "SYSTEM H",  
  2. TMC_Timer_HISR, (OPTION) TMD_HISR_Priority,  
  3. TMD_HISR_Stack_Ptr, TMD_HISR_Stack_Size);  

在这个HISR的处理函数中,使用timer函数创建的timer的最主要的代码是

  1. /* Determine if the task timer has expired.  */  
  2. if (TMD_Timer_State == TM_EXPIRED)  
  3.   
  4. /* Resume the timer task.  */  
  5. TMC_Timer_Expiration();  

在TMC_Timer_Expiration函数中

  1. id =                  app_timer -> tm_expiration_id;  
  2. expiration_routine =  app_timer -> tm_expiration_routine;  
  3. //app_timer的tm_expiration_id和tm_expiration_routine就是创建函数TMS_Create_Timer传入的参数。  
  4. if (!done)  
  5. {  
  6.   
  7. /* Determine which type of timer has expired.  */  
  8. if (type == TM_APPL_TIMER)  
  9. //类型为TM_APPL_TIMER,也就是task调用timer函数创建的类型。  
  10. //调用创建传入的timer超时时需要调用的函数。  
  11. /* Call application timer's expiration function.  */  
  12. (*(expiration_routine)) (id);  
  13. else  
  14. //这里是Nucleus进行task的时间片处理的部分。  
  15. /* Call the task timeout function in the thread control 
  16. function.  */  
  17. TCC_Task_Timeout((NU_TASK *) pointer);  
  18. }  

基本上Nucleus的timer主要流程就是这些了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值