我现在在BF518上移植了RT操作系统,开了一个用户线程,系统原有一个空线程,线程调度中在做线程切换时,是用汇编将当前线程的状态(各个寄存器)压栈,然后将最新(最高就绪优先级)线程状态出栈(更新各个寄存器),返回,这时本应该进入新线程任务入口执行,但是实际却没有,走入了例外出错死循环。因此我就怀疑是不是栈操作错了,任务入口函数指针没有添加到正确的寄存器中,因为也是刚开始做,对BF518(BF51x)不是很熟悉,所以请教各位大侠,有没有清楚这块(BF518、BF51x)的,帮忙看看。
十分感谢!!
你的RTOS是uCOSII吗,我这里有个可以在原厂开发板上运行的uCOSII的代码,你看看对你有什么帮助。
BF518 uCOSII代码
多谢andy,我用的是RT-Thread,不过这个ucos2的也很有参考价值。
一直在纠结这个问题,昨晚终于搞定了,是在做任务却换时,入栈和出栈错了一个u32,即多了一个SP++
一直以为是什么大问题,看来一些小的细节还是要注意的。程序员,细心是很重要的。
最后,再次感谢andy的热心帮忙。