将项目链接到引导加载器

我对把引导加载器与某个独立应用配合使用感到很头疼。

我能够分别为一个引导加载器和一个独立应用进行编程(虽然它们以源代码方式在调试对话框中运行时都有问题),当我点击复位时它们都可以工作。只要以应用钩子 (application hook) 在引导加载器上调用 update(),我就可以使用串行 flash 编程器来进行编程。

每当我为引导加载器或上述应用编程时,调试器似乎就不会从 Main的地方开始。我怀疑我的链接器脚本有错误,但我对链接器脚本的确点都不了解。 

我正在使用该引导加载器以及项目实例中包含的引导加载器链接脚本。这样可以让应用在 0x1000 启动。对于我的定制项目来说,我正使用的链接器脚本只有一行:

__cs3_heap_end = __cs3_region_end_ram - 256;

我知道我需要设置应用,以重新安置和链接我的代码,好在地址 0x1000 上启动。但是我不知道具体应该怎么做。我是不是应该把起始值以固定值的方式体现在我的链接器脚本中?

  • 您需要在其中包含一个 lm3sxxxx.ld 链接器脚本。在这个脚本中,您需要更改两个地方:

    1)

    MEMORY

    {

     ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00010000

     rom (rx) : ORIGIN = 0x00002000, LENGTH = 0x0003f000 /**ORIGIN 应设定为您需要链接的起始地址

    }

    2)

    SECTIONS

    {

     . = 0x2000; //将该行添加到“SECTION”部分开始的地方,其会将起始符“.”放置在相应的部分。

    ...

    }

    看看可行吗?