关于直接下载程序到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 这条指令去掉后才能成功?为什么??? 同求啊,我的也是,不明白其中的原理,只知道是栈没有初始化好。因为直接操作寄存器是可以的,但是加上变量后就不正常了。个人判断是Uboot 把栈初始化过了 ,或者我们操作不对 本帖最后由 411592004 于 2012-12-1 11:00 编辑
楼主的问题解决了吗,情况是什么样? 无打印,还是复位? 可以这样修改一下试试,修改你的lds文件:first 0x00000000{head.o main.o},这里只是举个例子,意思是指定这两个目标文件在一块。
期待你的测试结果。。。。 411592004 发表于 2012-12-1 10:55 static/image/common/back.gif
楼主的问题解决了吗,情况是什么样? 无打印,还是复位?
我遇到的是同一个问题,应该是感觉卡死在延时函数里,不加延时函数(变量)就没事,直接对寄存器操作正常。 imust511 发表于 2012-12-1 12:17 static/image/common/back.gif
我遇到的是同一个问题,应该是感觉卡死在延时函数里,不加延时函数(变量)就没事,直接对寄存器操作正常 ...
你的程序和楼主的一样? 411592004 发表于 2012-12-1 13:48 static/image/common/back.gif
你的程序和楼主的一样?
嗯 是的,这是在有uboot的板子上tftp下载上的,不知的问题出在哪里
原程序好像是韦东山的那个,他的操作应该是直接在没有uboot的板子上进行的。
页:
[1]