阅读:1359回复:6
请教:nboot中C代码的执行问题
不知道什么原因,nboot的用C语言写的代码一直不能运行完整。汇编全部执行完毕了,但是一跳到C函数main,问题就来了,不能运行函数,根据我点的灯的情况来看,似乎是卡在函数里面了,就是说跳到函数里面就出不来了,如果将那些初始化代码全部拷贝出来执行(不进行函数调用),那么nboot就可以正常跑完。
后来我又自己加了一个函数,里面又嵌套了其他的函数(只做些i++之类的运算),nboot照样可以跑完,这就让我很不能理解了,到底我前面nboot不能正常跑完的原因是什么呢? ps:我有初始化了各个模式下的堆栈 有知道的兄弟指点下,多谢了 |
|
沙发#
发布于:2008-03-02 19:32
自己顶一个
|
|
板凳#
发布于:2008-03-08 14:27
up
|
|
地板#
发布于:2008-03-08 20:39
你的意思没有完全明白,不知道我的猜测对不对:
你的现象是:进main函数有问题,不能执行到main函数中的内容? 而从汇编直接跳到其它函数时是正常的? 如果是这样,大致的原因是:sp与RAM分配的有问题,可能有重合现象,或者你用了SDRAM,但SDRAM没有初始化正确. |
|
|
地下室#
发布于:2008-03-10 15:49
多谢版主的解答。我再描述一下现象吧,前面讲的不是很清楚。 nboot的statrup.s可以执行完毕,也可以正常跳到main.c ,但是在main.c中,不能进行函数调用(宏可以),只要一调用,就会卡住。比如
main() { fun1(); fun2(); } 在调用fun1()之后,程序讲卡在fun1()的最后,不能返回到main函数继续调用fun2()。 奇怪的是:相同的nboot,eboot,在远峰的开发板上会出现上述现象,但是在我们自己做的开发板上却可以正常跑。 ps:我们的开发板用的是2442,远峰用的是2440,2442与2440的区别在于2442集成了64M的sdram和128的nandflash,而远峰开发板上的则不是集成的,其他都一样。 |
|
5楼#
发布于:2008-03-10 20:56
应该是SDRAM(如果堆栈是放在SDRAM中)没有正确初始化所致.或者是sp指向的SDRAM根本就不存在.
因为SDRAM没有正常工作,堆栈中不能保存住函数调用时所需要的地址,隔不久可以检查一下sp指向的SDRAM的内容,看是不是能正确保存数据. 在func1,func2不再调用别的函数应该还是可以回来的,即返回时 |
|
|
6楼#
发布于:2008-03-11 10:36
多谢版主,我去研究研究。
|
|