zoukankan      html  css  js  c++  java
  • MDK链接脚本错误

    我想让我的程序运行在RAM中而不是在SPI FLASH上,写了一个scatterfile:

    ROM 0x00000000 0x00200000 ;spi flash
    {
    STARTUP +0
    {
    startup.o(RESET, +First)
    ;*(+RO)
    }
    RO 0x20000000 0x00020000 ;运行地址RAM中
    {
    *(+RO)
    *(+RW)
    *(+ZI)
    }
    }

    链接时出现错误:

    Error: L6202E: entry.o(.ARM.Collect$$$$00000000) cannot be assigned to non-root region 'ER_RO'

    错误可以通过改成下面消除:

    ROM 0x00000000 0x00200000 ;加载地址flash
    {
    STARTUP +0
    {
    startup.o(RESET, +First)
    ;*(+RO)
    }
    }

    RAM 0x20000000 0x00020000;加载地址RAM

    {

    RO 0x20000000 0x00020000 ;运行地址RAM中
    {
    *(+RO)
    *(+RW)
    *(+ZI)
    }

    }

    可以链接通过,但是由于加载地址两个,链接完成之后会生成***.bin的目录,目录里面有名为ROM和RAM连个文件.

    最后没有找到具体原因,entry.o不知道是具体怎么生成的,也不知道有什么作用,只能改成:

    ROM 0x00000000 0x00200000 ;spi flash
    {
    STARTUP +0
    {
    startup.o(RESET, +First)
    *(+RO)
    }
    RO 0x20000000 0x00020000 ;运行地址RAM中
    {

    xxx.o;我想要运行在RAM中的code

    .

    .

    .

    xxx2.o
    ;*(+RO)
    *(+RW)
    *(+ZI)
    }
    }

    链接通过,可以生成xxx.bin,也可执行.

  • 相关阅读:
    poj 1611 The Suspects
    POJ 2236 Wireless Network
    POJ 1703 Find them, Catch them
    poj 1733 Parity game
    hdu 1598 find the most comfortable road
    cmake的使用二:链接第三方静态库
    线段树基础
    迪杰斯特拉算法
    Floyd详解
    STL中的set使用方法详细
  • 原文地址:https://www.cnblogs.com/fengeryi/p/4184782.html
Copyright © 2011-2022 走看看