www.pudn.com > r&s1.10°æ±¾£«Îĵµ.rar > timer.c


/* 
=============================================================================== 
| Copyright (C) 2004 RuanHaiShen, All rights reserved. 
| SUMMARY:  
|   Timer implementation. 
| 
| DESCRIPTION: 
|   See http://www.01s.org for documentation, latest information, license  
|   and contact details. 
|   email:ruanhaishen@01s.org 
=============================================================================*/ 
/*===========================================================================*/ 
#include "arch/arch.h" 
#include "inc/queue.h" 
#include "inc/kernel.h" 
#include "inc/memory.h" 
#include "inc/ipc.h" 
#include "inc/kapi.h" 
 
 
#if CFG_TICK_COUNT_EN > 0 
static volatile u32 _ticks = 0; 
 
u32 tick_get(void) 
{ 
    register u32 val; 
 
    CRITICAL_ENTER; 
    val = _ticks; 
    CRITICAL_EXIT; 
    return val; 
} 
#endif 
 
u8 __do_tick(void) 
{ 
    register u8 cprio; 
    register u8 flag; 
 
    hook_do_tick(); 
 
    for (flag = 0,cprio = 0; cprio < TASK_IDLE_PRIO; cprio++) { 
        CRITICAL_ENTER; 
        if (_tasks[cprio].delay != 0 && 
                !(_tasks[cprio].state & STATE_SUSPEND)) { 
            if (--_tasks[cprio].delay == 0) { 
                __ready_que_add(cprio); 
                flag = 1; 
            } 
        } 
        CRITICAL_EXIT; 
    } 
 
#if CFG_TICK_COUNT_EN > 0 
    CRITICAL_ENTER; 
    _ticks++; 
    CRITICAL_EXIT; 
#endif 
 
    return flag; 
} 
 
 
/*===========================================================================*/