ザビタン開発日記
2009 | 01
2008 | 01 | 02 | 06 | 12
2007 | 10 | 11 | 12
10月 18 (木曜日) 2007
13:30
タスク再設置でけた
 
実験用のタスクを設置することができたぞ!!
とりあえずこんなの。

:
:
//テストウィンドゥ
//=============================
//メモリの定義??
struct MEMMAN *testmemman = (struct MEMMAN *) MEMMAN_ADDR;
//まず下敷きをもらってくる
struct SHEET *testsht = sheet_alloc(shtctl);
//このシートに書きこめるよう、バッファを確保する。
//大きいのでmemman_allocを使う(画素分)
unsigned char *testbuf=(unsigned char *) memman_alloc_4k(testmemman,400*200);
//このバッファをtestwin下敷きで使用できるように当て込む
sheet_setbuf(testsht,testbuf,400,200,-1);
//バッファにウィンドゥを作成する
make_window8(testbuf,400,200,"testwin",0);
//新しいタスクを作るため、taskmanからタスクをもらってくる
struct TASK *testtask = task_alloc();
//このタスクで使うfifoバッファを確保する
int *testfifo = (int *) memman_alloc_4k(testmemman,128*4);
//タスクのレジスタを初期化
testtask->cons_stack = memman_alloc_4k(testmemman,64*1024);
testtask->tss.esp = testtask->cons_stack + 64 * 1024 - 12;
//タスクの実行関数のアドレスを当て込む
testtask->tss.eip = (int) &test_task;
testtask->tss.es = 1 * 8;
testtask->tss.cs = 2 * 8;
testtask->tss.ss = 1 * 8;
testtask->tss.ds = 1 * 8;
testtask->tss.fs = 1 * 8;
testtask->tss.gs = 1 * 8;
//これは実行関数に渡す引数(引数 *sheetを渡す)
*((int *) (testtask->tss.esp + 4)) = (int) testsht;
// *((int *) (testtask->tss.esp + 8)) = memtotal;
//タスクを走らせる
task_run(testtask, 2, 2); /* level=2, priority=2 */
//タスクが持つfiroに当て込みを行う
fifo32_init(&testtask->fifo, 128, testfifo, testtask);

:
:
void test_task(struct SHEET *sheet){
struct TASK *task = task_now();
struct TIMER *timer1 = timer_alloc();
int i;
char s[20];
int counter = 0;

timer_init(timer1,&task->fifo,10);
timer_settime(timer1,1000);

for(;;){
counter++;
if (counter > 100000){counter = 0;}

io_cli();

if (fifo32_status(&task->fifo) ==0){
io_sti();
}
else{
i = fifo32_get(&task->fifo);
io_sti();
}

sprintf(s,"counter=%06d",counter);
putfonts8_asc_sht(sheet,32,32,COL8_008484,COL8_FFFFFF,s,14);
}
}


や〜っとタスク設置のパターンを把握できた〜・・・
でもこれ、まだ問題があるんだよね。このtesttaskウィンドゥにキーボードデータがいくと(キーを押したりすると)
フリーズして画面が壊れちゃう・・・

これはたぶん、task_aのfifoが受け取ったキーデータの行き先とかの
処理をなんにもしてないせいだと思うんだけど、どこだったっけ・・・

リビジョン11

 
30日を過ぎたBlogにはコメントできません。

Referer  (1)
(1) 2 3 4 5 6 7 8 9 10 » 

PopnupBlog V3 Denali created by Bluemoon inc.