5043|11

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教:nboot中C代码的执行问题 [复制链接]

  不知道什么原因,nboot的用C语言写的代码一直不能运行完整。汇编全部执行完毕了,但是一跳到C函数main,问题就来了,不能运行函数,根据我点的灯的情况来看,似乎是卡在函数里面了,就是说跳到函数里面就出不来了,如果将那些初始化代码全部拷贝出来执行(不进行函数调用),那么nboot就可以正常跑完。
    后来我又自己加了一个函数,里面又嵌套了其他的函数(只做些i++之类的运算),nboot照样可以跑完,这就让我很不能理解了,到底我前面nboot不能正常跑完的原因是什么呢?  ps:我有初始化了各个模式下的堆栈

有知道的兄弟指点下,多谢

最新回复

有点难度哦  详情 回复 发表于 2008-5-1 10:18
点赞 关注

回复
举报

51

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己顶一下,期待达人出现^_^
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
不知道上面的描述会不会不清楚实际上就是象下面这样。
main()
{
    点Led灯1
   Fun1();
   点Led灯2;
   Fun2();
   点Led灯3;
}

main函数只能执行到点Led灯1.
如果将Fun1()中的内容拷贝出来,放到main函数中,那么程序就能执行到点Led灯2。
需要说明的是,在执行Fun1()时,我在Fun1()的最后进行点Led灯操作,还是可以进行的,但就是不能返回了,这到底是什么原因呢?
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

4
 
估计是堆栈的问题。C语言在调用函数的时候是要把返回地址、参数、函数用到的寄存器都压入堆栈的,在函数返回的时候恢复相关的寄存器。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼上的,能说下都有哪些堆栈需要初始化吗? 对了,系统对堆栈的地址有没有什么要求,我是这样初始化堆栈的,不知道有没有什么问题
SVCStack        EQU        (_STACK_BASEADDRESS-0x2800) ; 0x33ff5800 ~
UserStack        EQU        (_STACK_BASEADDRESS-0x3800); 0x33ff4800 ~
UndefStack        EQU        (_STACK_BASEADDRESS-0x2400) ; 0x33ff5c00 ~
AbortStack        EQU        (_STACK_BASEADDRESS-0x2000) ; 0x33ff6000 ~
IRQStack        EQU        (_STACK_BASEADDRESS-0x1000); 0x33ff7000 ~
FIQStack        EQU        (_STACK_BASEADDRESS-0x0) ; 0x33ff8000 ~



        bic        r0,r0,#MODEMASK
        orr        r1,r0,#UNDEFMODE|NOINT
        msr        cpsr_cxsf,r1                ;UndefMode
        ldr        sp,=UndefStack                ; UndefStack=0x33FF_5C00

        orr        r1,r0,#ABORTMODE|NOINT
        msr        cpsr_cxsf,r1                ;AbortMode
        ldr        sp,=AbortStack                ; AbortStack=0x33FF_6000

        orr        r1,r0,#IRQMODE|NOINT
        msr        cpsr_cxsf,r1                ;IRQMode
        ldr        sp,=IRQStack                ; IRQStack=0x33FF_7000

        orr        r1,r0,#FIQMODE|NOINT
        msr        cpsr_cxsf,r1                ;FIQMode
        ldr        sp,=FIQStack                ; FIQStack=0x33FF_8000


    bic                r0, r0, #MODEMASK|NOINT
    orr                r1, r0, #SVCMODE
    msr                cpsr_cxsf, r1                  ; SVCMode.
    ldr                sp, =SVCStack
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
我现在有另外一个疑问,就是不知道会不会是内存时序方面的问题。不过我检查了eboot里面对内存时序的设置,跟nboot中配置是一样的,而我不进行函数调用时,eboot是可以跑的,那应该是说明内存时序的设置是对的吧?
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 
Fun1();

内容啥样,咋写的?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

8
 
没看到你的实际情况不好猜测
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
Fun1,Fun2等函数是  初始化gpio口,nandflash还有uart口的函数。

我自己后来加的那个,仅仅是做了一些类似 i++的简单操作而已。大家帮忙项想还有没有什么地方有 出现问题的可能性.
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 
自己再up一下
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

11
 
最后再顶一次了。。。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
有点难度哦
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表