- /*
- By Marcus Xing
- kernel/clock.c
- 时钟中断调用的函数
- */
- #include "type.h"
- #include "const.h"
- #include "ipc.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)
- {
- }
- }