スタック例外で悩み中
qemu では発生しないのですが、bochs と VMWare では起動時にキーボードタスクとマウスタスクでスタック例外が発生します。
void task_idle(void) { for (;;) { io_hlt(); } } void task_keyboard(void) { for (;;) { List<int>* fifo = Scheduler::current->fifo; if (fifo->isEmpty() == false) { int i = fifo->removeAt(0); char c = 0; if((c = Keyboard::decode(i)) != 0) { Screen::put_key(c); } } } } void task_mouse(void) { for (;;) { List<int>* fifo = Scheduler::current->fifo; if (fifo->isEmpty() == false) { int i = fifo->removeAt(0); if (Mouse::decode(i) != 0) { Mouse::draw(); } } } }
アイドルタスクでは例外が起きないし、qemu でも例外が起きないので困り果てています。なにがおかしいのだろうか・・。ちなみに各タスクのスタックサイズは64KB、10msごとに次のタスクへ切り替えています。