hardware 中的几个地址问题

@******************************************************************************
@ File:head.s
@ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行
@******************************************************************************     
 
.text
.global _start
_start:
                                            @函数disable_watch_dog, memsetup, init_nand, nand_read_ll在init.c中定义
            ldr    sp, =4096              @设置堆栈
            bl      disable_watch_dog      @关WATCH DOG
            bl      memsetup                @初始化SDRAM
            bl      nand_init              @初始化NAND Flash

                                            @将NAND Flash中地址4096开始的1024字节代码(main.c编译得到)复制到SDRAM中
                                            @nand_read_ll函数需要3个参数:
            ldr    r0,    =0x30000000    @1. 目标地址=0x30000000,这是SDRAM的起始地址
            mov    r1,    #4096          @2.  源地址  = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处
            mov    r2,    #1024          @3.  复制长度= 1024(bytes),对于本实验的main.c,这是足够了
            bl      nand_read              @调用C函数nand_read


            ldr    sp, =0x34000000        @设置栈
            ldr    lr, =halt_loop          @设置返回地址
            ldr    pc, =main              @b指令和bl指令只能前后跳转32M的范围,所以这里使用向pc赋值的方法进行跳转
halt_loop:
            b      halt_loop
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

   ldr    sp, =4096              @设置堆栈

1.当设置sp=4096后,sp指针指向地址0x00001000。按第142页画的图可以知道,sp是指向存储空间的最后一个数据单元,所以说这是一个满栈,这点对吗?如果对的,我自己的理解堆栈是一个存储空间,既然是存储空间,那么必然有存储空间的起始地址和结束地址。根据满栈这个条件,可以知道这个存储空间的结束地址是0x00001000,按第142页画的图,这个堆栈的存储空间是0x00000000-0x00001000,那么怎么知道这个起始地址就应该是0x00000000呢?
2.如何在编程中确定堆栈的类型?满栈,空栈,降序,升序?
3.  mov    r1,    #4096          @2.  源地址  = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处 //这句怎么就知道main.c
的代码都存在NAND Flash地址4096开始处呢?
SECTIONS {
  firtst   0x00000000 : { head.o init.o nand.o}
  second  0x30000000 : AT(4096) { main.o }
}

0x00000000   指定了first部分的运行地址,0x30000000指定second部分的运行地址。AT(4096)指定了main.o在编译生成的映像文件中的地址。这里的运行地址不一定在程序下载到开发板上就立即在这个地址上运行了,只是指定下地址而已。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值