zoukankan      html  css  js  c++  java
  • W-D-S-链接地址

    1、程序一开始是烧写到nandflash上,设置为nandflash启动,6410片内有8K的内存,设为nandflash启动时,是从片内内存0地址开始,一上电,nandflash前面8K的内容会原原本本的拷贝到6410前面内存的8k地址处,然后从0地址开始运行;如果烧写到nandflash上面的程序大于8k,不做其他处理则没办法运行。

    所以要初始化DDR,把整个nandflash里面的程序拷贝到DDR里面去。

    那么应该把程序复制到DDR哪儿呢?应该复制到它的链接地址。

    之前的Makefile里面,-Ttext 0,表明该程序的链接地址是从0开始,所以当程序小于8K的时候,拷贝到6410前8k,从0地址开始,所以与链接地址对应,能够运行。

    当程序超过8K的时候,要复制到DDR,那么要修改链接地址!

    看看链接地址的作用:

    一个程序会分成:

    代码段:指令、数据段:有初始值且初始值不为零的全局变量,或静态变量、BSS段:初始值为零或无初始值的全局、静态变量

    注意二进制文件里面是不存放BSS段的内容!!!!!!!!!!!!程序在启动的时候要把bss_start到bss_end里面的变量清零。

    当链接地址为0时,

    访问全局变量的时候用的是链接地址!

    当链接地址为0x50000000

    上面同一套程序,链接地址不一样,导致程序访问的全局变量也是使用的地址也不一样!

    当从nandflash启动,把nandflash前8k复制到6410片内的前8K里面去,此时即使程序的链接地址是0x50000000,(注意:一个程序运行的时候“应该”位于它的链接地址。),由于这前面的程序使用的位置无关码编写的,所以不管链接地址为多少,它在任意地方都可以运行;它主要是使用b、bl来跳转,且不访问全局变量和静态变量。

    当从nandflash启动,把nandflash前8k复制到6410片内的前8K里面去,当程序的链接地址是0x50000000时候,那么当程序复制到6410片内时要进行重定位,即程序自己要把自己拷贝到DDR里面的链接地址0x50000000,然后从6410片内调到DDR的链接地址运行。这样才会正确!!

    重定位:把程序复制到它的链接地址处。

    1)程序运行时,“应该”位于它的连接地址

    2)硬件决定了程序一开始从0运行,需要重定位,即前面一小段代码把程序复制到它的链接地址处。

    3)前面一小段代码为何能正常运行,因为他们是用位置无关码写的。

  • 相关阅读:
    ThingJS,轻松切换3D场景!
    ThingJS,以可视化的方式解决管线难题
    可视化能成为物联网“最后一公里”么?
    ThingJS 新手教程之初识在线开发(一)
    threejs和ThingJS的区别,ThingJS收费么?
    带你了解为什么许多公司都会选择使用ThingJS制作Demo进行投标!
    物联网可视化平台有哪些?ThingJS怎么样?
    ThingJS园区搭建工具模模搭介绍
    ThingJS,物联网可视化方面的专家平台!
    ajax的post的方法,不报错,就是不输出信息
  • 原文地址:https://www.cnblogs.com/gary-guo/p/5592505.html
Copyright © 2011-2022 走看看