提高运行速度

This commit is contained in:
Yourtion
2016-04-22 16:53:40 +08:00
parent 30c62ffbd0
commit dc8c366fc0

View File

@@ -14,7 +14,7 @@ struct TSS32 {
int ldtr, iomap; int ldtr, iomap;
}; };
void task_b_main(void); void task_b_main(struct SHEET *sht_back);
void HariMain(void) void HariMain(void)
{ {
@@ -106,7 +106,7 @@ void HariMain(void)
set_segmdesc(gdt + 3, 103, (int) &tss_a, AR_TSS32); set_segmdesc(gdt + 3, 103, (int) &tss_a, AR_TSS32);
set_segmdesc(gdt + 4, 103, (int) &tss_b, AR_TSS32); set_segmdesc(gdt + 4, 103, (int) &tss_b, AR_TSS32);
load_tr(3 * 8); 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.eip = (int) &task_b_main;
tss_b.eflags = 0x00000202; /* IF = 1; */ tss_b.eflags = 0x00000202; /* IF = 1; */
tss_b.eax = 0; tss_b.eax = 0;
@@ -123,7 +123,7 @@ void HariMain(void)
tss_b.ds = 1 * 8; tss_b.ds = 1 * 8;
tss_b.fs = 1 * 8; tss_b.fs = 1 * 8;
tss_b.gs = 1 * 8; tss_b.gs = 1 * 8;
*((int *) 0x0fec) = (int) sht_back; *((int *) (task_b_esp + 4)) = (int) sht_back;
for (;;) { for (;;) {
io_cli(); io_cli();
@@ -282,19 +282,20 @@ void make_textbox8(struct SHEET *sht, int x0, int y0, int sx, int sy, int c)
return; return;
} }
void task_b_main(void) void task_b_main(struct SHEET *sht_back)
{ {
struct FIFO32 fifo; struct FIFO32 fifo;
struct TIMER *timer_ts; struct TIMER *timer_ts, *timer_put;
int i, fifobuf[128], count = 0; int i, fifobuf[128], count = 0;
char s[11]; char s[12];
struct SHEET *sht_back;
fifo32_init(&fifo, 128, fifobuf); fifo32_init(&fifo, 128, fifobuf);
timer_ts = timer_alloc(); timer_ts = timer_alloc();
timer_init(timer_ts, &fifo, 1); timer_init(timer_ts, &fifo, 2);
timer_settime(timer_ts, 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 (;;) { for (;;) {
count++; count++;
@@ -306,7 +307,11 @@ void task_b_main(void)
} else { } else {
i = fifo32_get(&fifo); i = fifo32_get(&fifo);
io_sti(); 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); farjmp(0, 3 * 8);
timer_settime(timer_ts, 2); timer_settime(timer_ts, 2);
} }