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;
}
/*===========================================================================*/