マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

わからねー

タスク切り替えでタイマ割り込み時にスタックに積まれている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の値は配列のサイズより大きくなってないのに…