タスク切り替えでタイマ割り込み時にスタックに積まれているEIPを書き換えることでタスク切り替えを行おうと思っている。しかし、
currentTask = (currentTask + 1) % taskCount; if(currentTask == 0) stack[10] = (int)taskA; else if(currentTask == 1) stack[10] = (int)taskB;
というコードではうまく切り替えはできてるのに(切り替えの度に元の位置に戻ってしまうが…)
eip[currentTask] = stack[10]; currentTask = (currentTask + 1) % taskCount; stack[10] = eip[currentTask];
にするとアボートしてしまう。一体何でだろう。eipにはtaskAとtaskBへの関数のポインタが入ってるだけだし、currentTaskの値は配列のサイズより大きくなってないのに…