ground 发表于 2011-11-3 10:42:24

讨论,若何动态提高函数执行优先级,非OS

while(1)
{
switch(Main_step)
{
    case0:
    A();
    Main_step++;
    break;
    case1:
    B();
    Main_step++;
    break;
    case2:
    C();
    Main_step++;
    break;
    case3:
    D();
    Main_step++;
    break;
}
}
如上述,如果在程序执行到A()的时候,产生中断,在中断内修改STEP为3,D()在下个循环优先执行;
这样产生2个问题,1\就必须在每个Main_step++前判断是不是在中断修改了Main_step;
2\即使判断中断修改了STEP,也有可能在判断和STEP++中间产生中断,所以必须暂时关中断;
还有一种极端情况,有可能2次循环执行不到本该优先的D();


解决办法,就是把D()移到switch外面,加标志,在每次循环都判断有没必要执行本函数;好像有点罗嗦;

高手漏个脸,有什么比较好的解决办法?OS就没必要提了;

ground 发表于 2011-11-3 11:02:28

对D()的实时性要求不高,能够在下个循环执行到就行;
页: [1]
查看完整版本: 讨论,若何动态提高函数执行优先级,非OS