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


/* 
=============================================================================== 
| Copyright (C) 2004 RuanHaiShen, All rights reserved. 
| SUMMARY:  
|   Miscellaneous functions. 
| 
| 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" 
 
extern u32      _task_init_bkp; 
 
struct reg_context 
{ 
    u32  bkp; 
    u16  ds; 
    u16  flags; 
    u32  pc; 
    u32  exit; 
    u32  arg; 
    u16  earg; 
}; 
 
u8* __stack_init(entry_t entry, arg_t arg, sp_t ptos) 
{ 
    struct reg_context* regs; 
 
    regs = (struct reg_context*) 
        ((u32)ptos - sizeof(struct reg_context)); 
 
    regs->bkp    = (u32)&_task_init_bkp; 
    regs->ds     = _DS; 
    regs->flags  = (u16)0x0202; 
    regs->pc     = (u32)entry; 
#if CFG_TASK_DEL_EN > 0 
    regs->exit   = (u32)task_delete; 
#endif 
    regs->arg    = (u32)arg; 
    regs->earg   = (u16)0xffff; 
 
    return  (u8*)regs; 
} 
 
extern u8 _dos_tick_counter; 
void __timer_interrupt() 
{ 
    register u8 flag; 
     
    __intr_enter(); 
     
    if (--_dos_tick_counter == 0) { 
        _dos_tick_counter = 11; 
        __dos_tick(); 
    } else { 
        __eoi_to_8259a(); 
    } 
    flag = __do_tick(); 
    __intr_exit(flag); 
} 
 
 
 
/*===========================================================================*/