/* By Marcus Xing kernel/clock.c 时钟中断调用的函数 */ #include "type.h" #include "const.h" #include "protect.h" #include "proc.h" #include "console.h" #include "tty.h" #include "global.h" #include "proto.h" /*--------------------------------------------------------------------Init_Clock 有关时钟中断的初始化 */ void Init_Clock() { /* 时钟中断的处理函数的填充 */ IRQ_Handler_Table[0] = Clock_Handler; /* 激活时钟中断 */ Enable_IRQ(0); } /*-----------------------------------------------------------------Clock_Handler 时钟中断处理程序 */ void Clock_Handler(int int_vec_no) { d_Ticks++; /* 每发生时钟中断d_Ticks就自增1次 */ p_Next_PCB->ticks--; /* 当前进程的ticks值自减1 */ /* 如果重入,直接退出 */ if(d_Flag_Reenter != 0) { return; } /* 如果当前进程的ticks没用完,则不调度 */ if(p_Next_PCB->ticks > 0) { return; } /* 进程调度 */ Schedule(); } /*-------------------------------------------------------------------Milli_Delay 精确到10ms的延迟函数 */ void Milli_Delay(int delay_time_by_milli) { int old_ticks = Get_Ticks(); /* 得到当前的Ticks */ /* 当前ticks减到老的ticks的时间差小于形参的话,空循环下去 */ /* 每隔10ms,Ticks值增1,100个ticks就是1s */ while((Get_Ticks() - old_ticks) * 10 < delay_time_by_milli) { } }