Hardware-Multitasking — Änderungen 6839 → 6843

Zeile 140: Zeile 140:
 
<c>
 
<c>
 
DWORD current_task_id=0;
 
DWORD current_task_id=0;
−
 
+
#define interrupt_return  asm("leave; iret")
−
void irq_pit(DWORD cs, DWORD eflags) //das hier ist ein Interupt
+
void isr_pit()
 
{
 
{
 
   current_task_id++;
 
   current_task_id++;
Zeile 156: Zeile 156:
 
       "ltr $1234:$1234;" :
 
       "ltr $1234:$1234;" :
 
: "a" (8*(current_task_id + TSS_SEL_BASE));
 
: "a" (8*(current_task_id + TSS_SEL_BASE));
−
   asm("leave; iret"); //nicht vergessen: Interrupt!
+
   interrupt_return;
 
}
 
}
 
</c>
 
</c>
 
Dieser Code kann natürlich noch erweitert werden, zum Beispiel, wenn man jedem Task eine unterschiedliche Priorität zuweist.
 
Dieser Code kann natürlich noch erweitert werden, zum Beispiel, wenn man jedem Task eine unterschiedliche Priorität zuweist.
−
Eventuell ist hier die AT&T-Syntax falsch, da ich mit dieser nicht ganz vertraut bin.
+
''Eventuell ist hier die AT&T-Syntax falsch, da ich mit dieser nicht ganz vertraut bin. Außerdem ist dieses als normale C-Prozedur getarnte Version einer ISR etwas unschön.''
  
 
=== Schritt 5: Multitasking initalisieren ===
 
=== Schritt 5: Multitasking initalisieren ===