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の値を比較してみたが、やっぱり同じだ・・・。なんだろう?これ??? |