albert 发表于 2012-11-30 19:46:12

关于直接下载程序到sdram下直接运行的问题

@******************************************************************************
@ File:head.S
@ 功能:通过它转入C程序
@******************************************************************************      

.text
.global _start
_start:
                ldr r0 , =0x53000000
                mov r1 , #0x0
                str r1 ,

                ldr sp , =1024*4@设置堆栈指针,不知道为什么,当我想把程序直接下载到
                                                  @sdram上运行的话,必须把设置堆栈指针这条命令去掉,才
                                                  @能成功,不明白啊????
                bl main
               
halt_loop:
            b       halt_loop


#define        GPBCON                (*(volatile unsigned long *)0x56000010)
#define        GPBDAT                (*(volatile unsigned long *)0x56000014)

#define        GPB5_out        (1<<(5*2))
#define        GPB6_out        (1<<(6*2))
#define        GPB7_out        (1<<(7*2))
#define        GPB8_out        (1<<(8*2))

voidwait(volatile unsigned long dly)
{
        for(; dly > 0; dly--);
}

int main(void)
{
        unsigned long i = 5;

        GPBCON = GPB5_out|GPB6_out|GPB7_out|GPB8_out;                // 将LED1-3对应的GPF4/5/6三个引脚设为输出

        while(1){
                wait(30000);
                GPBDAT = (~(1<<i));               // 根据i的值,点亮LED1-3
                if(++i == 9)
                        i = 5;
        }

        return 0;
       
}

代码如上,只有在把 ldr sp , =1024*4 这条指令去掉后才能成功?为什么???

imust511 发表于 2012-12-1 10:26:00

同求啊,我的也是,不明白其中的原理,只知道是栈没有初始化好。因为直接操作寄存器是可以的,但是加上变量后就不正常了。个人判断是Uboot 把栈初始化过了 ,或者我们操作不对

411592004 发表于 2012-12-1 10:55:05

本帖最后由 411592004 于 2012-12-1 11:00 编辑

楼主的问题解决了吗,情况是什么样? 无打印,还是复位?

411592004 发表于 2012-12-1 11:12:59

可以这样修改一下试试,修改你的lds文件:first 0x00000000{head.o main.o},这里只是举个例子,意思是指定这两个目标文件在一块。
期待你的测试结果。。。。

imust511 发表于 2012-12-1 12:17:19

411592004 发表于 2012-12-1 10:55 static/image/common/back.gif
楼主的问题解决了吗,情况是什么样? 无打印,还是复位?

我遇到的是同一个问题,应该是感觉卡死在延时函数里,不加延时函数(变量)就没事,直接对寄存器操作正常。

411592004 发表于 2012-12-1 13:48:32

imust511 发表于 2012-12-1 12:17 static/image/common/back.gif
我遇到的是同一个问题,应该是感觉卡死在延时函数里,不加延时函数(变量)就没事,直接对寄存器操作正常 ...

你的程序和楼主的一样?

imust511 发表于 2012-12-3 20:49:22

411592004 发表于 2012-12-1 13:48 static/image/common/back.gif
你的程序和楼主的一样?

嗯 是的,这是在有uboot的板子上tftp下载上的,不知的问题出在哪里
原程序好像是韦东山的那个,他的操作应该是直接在没有uboot的板子上进行的。
页: [1]
查看完整版本: 关于直接下载程序到sdram下直接运行的问题