summaryrefslogtreecommitdiff
path: root/src/kernel
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-07-04 22:23:37 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-07-04 22:23:37 +0200
commit05a6f2fcf4556ba9f3d0384c07554c387f6efba2 (patch)
tree85d430b47f0d5b1ad004f04d9ab4fbc602c83ed2 /src/kernel
parente6efe69c614d7781d18a7189831e8243abf57664 (diff)
downloadabaos-05a6f2fcf4556ba9f3d0384c07554c387f6efba2.tar.gz
abaos-05a6f2fcf4556ba9f3d0384c07554c387f6efba2.tar.bz2
got scheduling of task A and B working (now graphics output and termination is broken)
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/kernel.c31
-rw-r--r--src/kernel/tasks.c2
-rw-r--r--src/kernel/tasks.h2
3 files changed, 32 insertions, 3 deletions
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c
index 9a9f32e..b9beeb1 100644
--- a/src/kernel/kernel.c
+++ b/src/kernel/kernel.c
@@ -26,6 +26,8 @@
#include "text_widget.h"
#include "window.h"
+#include "tasks.h"
+
static jmp_buf panic_jmp_buf;
static void handle_keyboard_event( keyboard_event_t *event, void *context );
@@ -53,6 +55,9 @@ typedef struct {
static global_context_t global_context;
+static void funcA( );
+static void funcB( );
+
// must be first entry in kernel.bin (0x8800) as stage 2 of
// the boot loader expects the entry point to be here!
void kernel_main( void )
@@ -83,9 +88,19 @@ void kernel_main( void )
goto TERMINATE;
}
+ // TODO: two demo tasks for now, later we should do something useful in a task
+ task_manager_t task_manager;
+ task_manager_init( &task_manager );
+ task_t taskA;
+ task_init( &taskA, GDT_CODE_SEGMENT_SELECTOR, &funcA );
+ task_manager_add_task( &task_manager, &taskA );
+ task_t taskB;
+ task_init( &taskB, GDT_CODE_SEGMENT_SELECTOR, &funcB );
+ task_manager_add_task( &task_manager, &taskB );
+
puts( "Initializing interrupts" );
interrupt_t interrupt;
- interrupts_init( &interrupt );
+ interrupts_init( &interrupt, GDT_CODE_SEGMENT_SELECTOR, &task_manager );
puts( "Initializing drivers" );
driver_manager_init( &global_context.driver_manager );
@@ -362,3 +377,17 @@ static void handle_mouse_event( mouse_event_t *event, void *context )
break;
}
}
+
+static void funcA( )
+{
+ while( true ) {
+ printf( "A" );
+ }
+}
+
+static void funcB( )
+{
+ while( true ) {
+ printf( "B" );
+ }
+}
diff --git a/src/kernel/tasks.c b/src/kernel/tasks.c
index 164409a..4dd7f38 100644
--- a/src/kernel/tasks.c
+++ b/src/kernel/tasks.c
@@ -3,7 +3,7 @@
#include "kernel.h"
#include "string.h"
-void task_init( task_t *task, uint16_t gdt_code_segment_selector, task_func_t *entrypoint )
+void task_init( task_t *task, uint16_t gdt_code_segment_selector, task_func_t entrypoint )
{
memset( task, 0, sizeof( task_t ) );
diff --git a/src/kernel/tasks.h b/src/kernel/tasks.h
index 604c463..523631b 100644
--- a/src/kernel/tasks.h
+++ b/src/kernel/tasks.h
@@ -47,7 +47,7 @@ typedef struct {
typedef void (*task_func_t)( void );
-void task_init( task_t *task, uint16_t gdt_code_segment_selector, task_func_t *entrypoint );
+void task_init( task_t *task, uint16_t gdt_code_segment_selector, task_func_t entrypoint );
#define MAX_NOF_TASKS 256