3: 2007-01-31 (水) 12:29:32 |
現: 2024-01-06 (土) 22:39:09 |
| : | | : |
| task_a->langmode = 0; | | task_a->langmode = 0; |
| + | |
| /*fdタスク実験部*/ | | /*fdタスク実験部*/ |
| task_fdctl = task_alloc(); | | task_fdctl = task_alloc(); |
| task_run(task_fdctl,2,2); | | task_run(task_fdctl,2,2); |
| /*=============================*/ | | /*=============================*/ |
| + | |
| /* sht_back */ | | /* sht_back */ |
| sht_back = sheet_alloc(shtctl); | | sht_back = sheet_alloc(shtctl); |
| | | |
| void task_fdctl_main(){ | | void task_fdctl_main(){ |
| + | |
| struct TIMER *timer; | | struct TIMER *timer; |
| struct TASK *task = task_now(); | | struct TASK *task = task_now(); |
| int i=0,fifost,fifobuf[128]; | | int i=0,fifost,fifobuf[128]; |
| char s[60]; | | char s[60]; |
| + | |
| fifo32_init(&task->fifo,128,fifobuf,task); | | fifo32_init(&task->fifo,128,fifobuf,task); |
| timer = timer_alloc(); | | timer = timer_alloc(); |
| timer_init(timer,&task->fifo,1); | | timer_init(timer,&task->fifo,1); |
| timer_settime(timer,100); | | timer_settime(timer,100); |
| + | |
| struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; | | struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; |
| + | |
| for(;;){ | | for(;;){ |
| + | |
| io_cli(); | | io_cli(); |
| if (fifo32_status(&task->fifo) == 0){ | | if (fifo32_status(&task->fifo) == 0){ |
| task_sleep(task); | | task_sleep(task); |
| io_sti(); | | io_sti(); |
| + | |
| sprintf(s, "ST %d",fifo32_status(&task->fifo)); | | sprintf(s, "ST %d",fifo32_status(&task->fifo)); |
| boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16*3, 63, 31); | | boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16*3, 63, 31); |
| putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16*3, COL8_FF00FF, s); | | putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16*3, COL8_FF00FF, s); |
- | | + | |
| + | |
| } | | } |
| else { | | else { |
| fifost = fifo32_get(&task->fifo); | | fifost = fifo32_get(&task->fifo); |
| + | |
| io_sti(); | | io_sti(); |
| if (fifost = 1){ | | if (fifost = 1){ |
| timer_settime(timer,100); | | timer_settime(timer,100); |
| } | | } |
| + | |
| if (fifost >= 2){ | | if (fifost >= 2){ |
| sprintf(s, "Other! %d",fifost); | | sprintf(s, "Other! %d",fifost); |
| boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16*16, 63, 31); | | boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16*16, 63, 31); |
| putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16*16, COL8_FF00FF, s); | | putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16*16, COL8_FF00FF, s); |
- | | + | |
| + | |
| } | | } |
| } | | } |
| /*FDの実験2*/ | | /*FDの実験2*/ |
| void cmd_fd2(struct CONSOLE *cons){ | | void cmd_fd2(struct CONSOLE *cons){ |
| + | |
| int i; | | int i; |
| for (i=0; i>100;i++){ | | for (i=0; i>100;i++){ |
| fifo32_put(&task_fdctl->fifo,22); | | fifo32_put(&task_fdctl->fifo,22); |
| } | | } |
| + | |
| return; | | return; |
| } | | } |
| -そこで、以前にあっきーさんから聞いた、「ファンクションキー」に命令を割り当ててみることにしよう。(これなら、task_a内でFIFO送信が完了するはず。) | | -そこで、以前にあっきーさんから聞いた、「ファンクションキー」に命令を割り当ててみることにしよう。(これなら、task_a内でFIFO送信が完了するはず。) |
| -これでもしうまくいったなら、やはり予想通りの不具合ということになる。 | | -これでもしうまくいったなら、やはり予想通りの不具合ということになる。 |
| + | |
| + | |
| + | |
| + | |
| + | -う〜〜〜〜〜〜ん??? おっかしい。こんどは固まってしまうぞ??? |
| + | -まず最初、bootpac.cにこんなコードを追加してみた。 |
| + | |
| + | : |
| + | task_run(task, -1, 0); /* 終了処理を確実にやらせるために、寝ていたら起こす */ |
| + | } |
| + | } |
| + | /*fd実験*/ |
| + | if (i == 256 + 0x3e){ |
| + | fifo32_put(&task_fdctl->fifo,3); |
| + | } |
| + | |
| + | if (i == 256 + 0x3c && key_shift != 0) { /* Shift+F2 */ |
| + | : |
| + | |
| + | -これで、task_fdctl内のFIFOに3が送信されるはず。そうすればなんらかの反応があるはずなのだが、なんと固まってしまう・・・・ |
| + | |
| + | -内部を抜いたり等したが、どうしても固まってしまうなぁ。念のため、ここbootpac.c内の&task_fdctl-fifoの値とtask_fdctl内での&fifoの値を比較してみたが、やっぱり同じだ・・・。なんだろう?これ??? |