欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

大家说,为什么小弟我这个代码始终在while(1)中循环

更新时间: 2014-01-05 03:14:22 责任编辑: Author_N1

 

大家说,为什么我这个代码始终在while(1)中循环?
看了操作系统,想自己搞个任务切换,说更改SP的指针,后面一个Ret指令,
就可以跳到栈里保存的函数地址去运行,但是如果写成while(1)这种方式,怎么才能跳出去呢?

说名一下PrintX在别的文件实现了,下面代码编译没错,但是运行的时候,始终在Task1中循环,
怎么才能跳出去?


#if 1
_s8 stack1[10];
_s8 stack2[10];
_s8 stack3[10];
_s8 sptop[3];

sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;

void Delay()
{
    static int i;
    for (i = 0; i < 1000; i++);
}

void Task1()
{
    while (1)
    {
        PrintX("Task1\n");
        Delay();
        LED1 =  ~LED1;

        SP = sptop[1];
    }
}

void Task2()
{
    while (1)
    {
        PrintX("Task2\n");
        Delay();
        LED2 =  ~LED2;
        
        SP = sptop[2];
    }
}

void Task3()
{
    while (1)
    {
        PrintX("Task3\n");
        Delay();
        LED3 =  ~LED3;
        
        SP = sptop[0];
    }
}

void TaskInit()
{
    stack1[1] = (_s16)Task1;
    stack1[2] = ((_s16)Task1)>>8;
    sptop[0] = stack1;
    sptop[0] += 2;
    
    stack2[1] = (_s16)Task2;
    stack2[2] = ((_s16)Task2)>>8;
    sptop[1] = stack2;
    sptop[1] += 2;
    
    stack3[1] = (_s16)Task3;
    stack3[2] = ((_s16)Task3)>>8;
    sptop[2] = stack3;
    sptop[2] += 2;
}

void main()
{    
    InitUart();

    TaskInit();

    SP = sptop[0];
}
#endif


--参考方法--
不用一个return,把你赋值SP的放到一个函数里头,调用这个函数你就解决问题了。
感觉你还没有理解SP和PC是怎么控制的。建议还是看看别人写的一些简单的OS,获取你就会有收获了,SP赋值后,如果没有函数返回(你这里的return)就不会有从SP中恢复PC的动作。
--参考方法--
引用:
Quote: 引用:

不用一个return,把你赋值SP的放到一个函数里头,调用这个函数你就解决问题了。
感觉你还没有理解SP和PC是怎么控制的。建议还是看看别人写的一些简单的OS,获取你就会有收获了,SP赋值后,如果没有函数返回(你这里的return)就不会有从SP中恢复PC的动作。

点醒我了兄弟

那就给分吧,混了这么久还没有拿到过分呢。。。
--参考方法--
引用:
单步调试,能跳到其他任务,上面打错字了。


不好意思,不喜欢查别人的代码。给你一个学习RTOS的例子,自己学,用心看,对你来说绝对很有收获
--参考方法--
引用:
单步调试,能跳到其他任务,上面打错字了。

忘了给连接了:http://wenku.baidu.com/view/0091cc254b35eefdc8d33345.html
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:22
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19917/
本文WWW.DOC100.NET DOC100.NET版权所有。