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,也可执行.

  • 相关阅读:
    qt中使用dll库的方法
    41. wait notify 方法
    40.方式二的练习
    39.线程的实现方式二
    38. 死锁
    37. 解决线程问题方式二(同步函数)
    36. 解决线程问题方式一(同步代码块synchronized)
    35.线程问题
    34. Thread类的常用方法
    33. 自定义线程
  • 原文地址:https://www.cnblogs.com/fengeryi/p/4184782.html
Copyright © 2011-2022 走看看