OSDN Git Service

Add Timer
authorvosystems <doradora.motochan@gmail.com>
Sat, 18 Oct 2014 12:50:41 +0000 (21:50 +0900)
committervosystems <doradora.motochan@gmail.com>
Sat, 18 Oct 2014 12:50:41 +0000 (21:50 +0900)
Kernel/Interrupt.c
Kernel/Makefile
Kernel/boot.c
include/KeyBoard.h

index ac97be5..34d8abf 100644 (file)
@@ -20,20 +20,37 @@ unsigned long long input;
 struct msg_data kernel;
 int kernelbuf[32];
 
-struct timer timer;
-
 void timer_interrupt( void )
 {
        /*count tick*/
        timer_tick++;
-       if(timer->timeout>0)
+       
+       if(timer.next>timer.count)
+       {
+               return;
+       }
+       int i;
+       for(i=0;i<timer.using;i++)
        {
-               timer->timeout--;
-               if(timer->timeout==0)
+               if(timer.timers[i]->timeout>timer.count)
                {
-                       msg_put(timer->msg,timer->data);
+                       break;
                }
+               timer.timers[i]->flags=TIMER_FLAGS_ALLOC;
+               msg_put(timer.timers[i]->msg,timer.timers[i]->data);
+       }
+       int j;
+       timer.using-=i;
+       for(j=0;j<timer.using;j++)
+       {
+               timer.timers[j]=timer.timers[j+i];
+       }
+       if(timer.using>0){
+               timer.next=timer.timers[0]->timeout;
+       }else{
+               timer.next=0xffffffff;
        }
+       return;
 }
 
 void keyboard_interrupt( void )
index d7818d3..9326b62 100644 (file)
@@ -36,9 +36,10 @@ FAT_C=FAT.c
 GRAPHIC_C=Graphical.c
 SYSTEM_C=System.c
 MESSAGE_C=Message.c
+TIMER_C=timer.c
 
 #オブジェクト
-BOOT_OBJ=${BOOT_S:.S=.o} ${BOOT_C:.c=.o} ${VANE_S:.S=.o} ${KEYBOARD_C:.c=.o} ${STDIO_C:.c=.o} ${GDT_IDT_C:.c=.o} ${INTERRUPT_C:.c=.o} ${STRING_C:.c=.o} ${ASM_INTERRUPT_S:.S=.o} ${SCANCODE_C:.c=.o} ${MEMMAN_C:.c=.o} ${FAT_C:.c=.o} ${GRAPHIC_C:.c=.o} ${SYSTEM_C:.c=.o} ${MESSAGE_C:.c=.o}
+BOOT_OBJ=${BOOT_S:.S=.o} ${BOOT_C:.c=.o} ${VANE_S:.S=.o} ${KEYBOARD_C:.c=.o} ${STDIO_C:.c=.o} ${GDT_IDT_C:.c=.o} ${INTERRUPT_C:.c=.o} ${STRING_C:.c=.o} ${ASM_INTERRUPT_S:.S=.o} ${SCANCODE_C:.c=.o} ${MEMMAN_C:.c=.o} ${FAT_C:.c=.o} ${GRAPHIC_C:.c=.o} ${SYSTEM_C:.c=.o} ${MESSAGE_C:.c=.o} ${TIMER_C:.c=.o}
 
 kernel: ${BOOT_OBJ}
        ${LD} ${TARGET} ${BOOT_OBJ}
index 1c7910f..1185ead 100644 (file)
@@ -23,6 +23,7 @@
 #include<memory.h>
 #include<Graphic.h>
 #include<Message.h>
+#include<timer.h>
 
 /*PROTOTYPE*/
 void outPortByte( unsigned short address, unsigned char value );
@@ -215,4 +216,10 @@ void initPit( void )
        /*      set counter0 100Hz                                               */
        /* --------------------------------------------------------------------- */
        setPitCounter( 100, DEF_PIT_COM_COUNTER0,  DEF_PIT_COM_MODE_SQUAREWAVE );
+       timer.count=0;
+       int i;
+       for(i=0;i<MAX_TIMER;i++)
+       {
+               timer.timers[i]->flags=0;
+       }
 }
index b7d8214..908c35f 100644 (file)
@@ -34,8 +34,6 @@ extern int system_key_code_flag,break_flag;
 extern unsigned long long input;
 
 /*PROTOTYPE*/
-void outPortByte( unsigned short address, unsigned char value );
-unsigned char inPortByte( unsigned short address );
 unsigned char readKbdCtrlStatus(void);
 STATUS writeKbdCtrlCommand(unsigned char command);
 unsigned char readKbdEncBuffer(void);