diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-07-04 22:23:37 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-07-04 22:23:37 +0200 |
commit | 05a6f2fcf4556ba9f3d0384c07554c387f6efba2 (patch) | |
tree | 85d430b47f0d5b1ad004f04d9ab4fbc602c83ed2 /src/kernel | |
parent | e6efe69c614d7781d18a7189831e8243abf57664 (diff) | |
download | abaos-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.c | 31 | ||||
-rw-r--r-- | src/kernel/tasks.c | 2 | ||||
-rw-r--r-- | src/kernel/tasks.h | 2 |
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 |