天嵌 ARM开发社区

 找回密码
 注册
查看: 3006|回复: 6

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

[复制链接]
albert 发表于 2012-11-30 19:46:12 | 显示全部楼层 |阅读模式
@******************************************************************************
@ File:head.S
@ 功能:通过它转入C程序
@******************************************************************************      

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

                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))

void  wait(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
楼主的问题解决了吗,情况是什么样? 无打印,还是复位?

我遇到的是同一个问题,应该是感觉卡死在延时函数里,不加延时函数(变量)就没事,直接对寄存器操作正常。
411592004 发表于 2012-12-1 13:48:32 | 显示全部楼层
imust511 发表于 2012-12-1 12:17
我遇到的是同一个问题,应该是感觉卡死在延时函数里,不加延时函数(变量)就没事,直接对寄存器操作正常 ...

你的程序和楼主的一样?
imust511 发表于 2012-12-3 20:49:22 | 显示全部楼层
411592004 发表于 2012-12-1 13:48
你的程序和楼主的一样?

嗯 是的,这是在有uboot的板子上tftp下载上的,不知的问题出在哪里
原程序好像是韦东山的那个,他的操作应该是直接在没有uboot的板子上进行的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-3 10:04 , Processed in 1.031243 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表