From dc8c366fc06ea6be8717c4189dad0c72479b2bf6 Mon Sep 17 00:00:00 2001 From: Yourtion Date: Fri, 22 Apr 2016 16:53:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E9=AB=98=E8=BF=90=E8=A1=8C=E9=80=9F?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 15_day/bootpack.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/15_day/bootpack.c b/15_day/bootpack.c index 0b51e85..d2c2e5d 100644 --- a/15_day/bootpack.c +++ b/15_day/bootpack.c @@ -14,7 +14,7 @@ struct TSS32 { int ldtr, iomap; }; -void task_b_main(void); +void task_b_main(struct SHEET *sht_back); void HariMain(void) { @@ -106,7 +106,7 @@ void HariMain(void) set_segmdesc(gdt + 3, 103, (int) &tss_a, AR_TSS32); set_segmdesc(gdt + 4, 103, (int) &tss_b, AR_TSS32); load_tr(3 * 8); - task_b_esp = memman_alloc_4k(memman, 64 * 1024) + 64 * 1024; + task_b_esp = memman_alloc_4k(memman, 64 * 1024) + 64 * 1024 - 8; tss_b.eip = (int) &task_b_main; tss_b.eflags = 0x00000202; /* IF = 1; */ tss_b.eax = 0; @@ -123,7 +123,7 @@ void HariMain(void) tss_b.ds = 1 * 8; tss_b.fs = 1 * 8; tss_b.gs = 1 * 8; - *((int *) 0x0fec) = (int) sht_back; + *((int *) (task_b_esp + 4)) = (int) sht_back; for (;;) { io_cli(); @@ -282,19 +282,20 @@ void make_textbox8(struct SHEET *sht, int x0, int y0, int sx, int sy, int c) return; } -void task_b_main(void) +void task_b_main(struct SHEET *sht_back) { struct FIFO32 fifo; - struct TIMER *timer_ts; + struct TIMER *timer_ts, *timer_put; int i, fifobuf[128], count = 0; - char s[11]; - struct SHEET *sht_back; + char s[12]; fifo32_init(&fifo, 128, fifobuf); timer_ts = timer_alloc(); - timer_init(timer_ts, &fifo, 1); + timer_init(timer_ts, &fifo, 2); timer_settime(timer_ts, 2); - sht_back = (struct SHEET *) *((int *) 0x0fec); + timer_put = timer_alloc(); + timer_init(timer_put, &fifo, 1); + timer_settime(timer_put, 1); for (;;) { count++; @@ -306,7 +307,11 @@ void task_b_main(void) } else { i = fifo32_get(&fifo); io_sti(); - if (i == 1) { /*任务切换*/ + if (i == 1) { + sprintf(s, "%11d", count); + putfonts8_asc_sht(sht_back, 0, 144, COL8_FFFFFF, COL8_008484, s, 11); + timer_settime(timer_put, 1); + } else if (i == 2) { farjmp(0, 3 * 8); timer_settime(timer_ts, 2); }