查看: 11255|回复: 23

[已解决] 【已解决】关于kl26 链接文件ProcessorExpert.ld地址偏移到0x4000...

[复制链接]
  • TA的每日心情
    慵懒
    2017-4-27 10:34
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    507

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1450
    最后登录
    2020-8-3
    发表于 2014-12-1 15:55:07 | 显示全部楼层 |阅读模式
    本帖最后由 流-423774 于 2015-1-21 11:29 编辑

    这个问题困扰我比较久了,关于这个ProcessorExpert.ld文件配置问题,因为之前的项目使用的codewarrior10.5这个编译环境,我想把编译的这个文件做APP,前面16k地址给bootloader,app从0x4000地址开始,关于PricessirExpert.ld的配置如下:
    ENTRY(__thumb_startup)

    /* Highest address of the user mode stack */
    _estack = 0x20003000;    /* end of m_data */
    __SP_INIT = _estack;

    /* Generate a link error if heap and stack don't fit into RAM */
    __heap_size = 0x00;                    /* required amount of heap  */
    __stack_size = 0x0600;                 /* required amount of stack */


    MEMORY {
      m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x000000C0
      m_text      (RX) : ORIGIN = 0x00000410, LENGTH = 0x00017BF0
      m_data      (RW) : ORIGIN = 0x1FFFF000, LENGTH = 0x00004000
      m_cfmprotrom  (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010
    }

    /* Define output sections */
    SECTIONS
    {
      /* The startup code goes first into INTERNAL_FLASH */
      .interrupts :
      {
        __vector_table = .;
        . = ALIGN(4);
        KEEP(*(.vectortable)) /* Startup code */
        . = ALIGN(4);
      } > m_interrupts

      .cfmprotect :
      {
        . = ALIGN(4);
            KEEP(*(.cfmconfig))     /* Flash Configuration Field (FCF) */
            . = ALIGN(4);
      } > m_cfmprotrom

      /* The program code and other data goes into INTERNAL_FLASH */
      .text :
      {
        . = ALIGN(4);
        *(.text)           /* .text sections (code) */
        *(.text*)          /* .text* sections (code) */
        *(.rodata)         /* .rodata sections (constants, strings, etc.) */
        *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
        *(.glue_7)         /* glue arm to thumb code */
        *(.glue_7t)        /* glue thumb to arm code */
        *(.eh_frame)

        KEEP (*(.init))
        KEEP (*(.fini))

        . = ALIGN(4);

        _etext = .;        /* define a global symbols at end of code */
      } > m_text

       .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > m_text
        .ARM : {
        __exidx_start = .;
          *(.ARM.exidx*)
          __exidx_end = .;
      } > m_text

    .ctors :
      {
        __CTOR_LIST__ = .;
        /* gcc uses crtbegin.o to find the start of
           the constructors, so we make sure it is
           first.  Because this is a wildcard, it
           doesn't matter if the user does not
           actually link against crtbegin.o; the
           linker won't look for a file to match a
           wildcard.  The wildcard also means that it
           doesn't matter which directory crtbegin.o
           is in.  */
        KEEP (*crtbegin.o(.ctors))
        /* We don't want to include the .ctor section from
           from the crtend.o file until after the sorted ctors.
           The .ctor section from the crtend file contains the
           end of ctors marker and it must be last */
        KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
        KEEP (*(SORT(.ctors.*)))
        KEEP (*(.ctors))
        __CTOR_END__ = .;
      } > m_text

      .dtors :
      {
        __DTOR_LIST__ = .;
        KEEP (*crtbegin.o(.dtors))
        KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
        KEEP (*(SORT(.dtors.*)))
        KEEP (*(.dtors))
        __DTOR_END__ = .;
      } > m_text

      .preinit_array     :
      {
        PROVIDE_HIDDEN (__preinit_array_start = .);
        KEEP (*(.preinit_array*))
        PROVIDE_HIDDEN (__preinit_array_end = .);
      } > m_text
      .init_array :
      {
        PROVIDE_HIDDEN (__init_array_start = .);
        KEEP (*(SORT(.init_array.*)))
        KEEP (*(.init_array*))
        PROVIDE_HIDDEN (__init_array_end = .);
      } > m_text
      .fini_array :
      {
        PROVIDE_HIDDEN (__fini_array_start = .);
        KEEP (*(SORT(.fini_array.*)))
        KEEP (*(.fini_array*))
        PROVIDE_HIDDEN (__fini_array_end = .);

            ___ROM_AT = .;
      } > m_text

      /* reserve MTB memory at the beginning of m_data */
      .mtb : /* MTB buffer address as defined by the hardware */
      {
        . = ALIGN(8);
        _mtb_start = .;
        KEEP(*(.mtb_buf)) /* need to KEEP Micro Trace Buffer as not referenced by application */
        . = ALIGN(8);
        _mtb_end = .;
      } > m_data

      /* Initialized data sections goes into RAM, load LMA copy after code */
      .data : AT(___ROM_AT)
      {
        . = ALIGN(4);
        _sdata = .;        /* create a global symbol at data start */
        *(.data)           /* .data sections */
        *(.data*)          /* .data* sections */

        . = ALIGN(4);

        _edata = .;        /* define a global symbol at data end */
      } > m_data

      ___data_size = _edata - _sdata;


      /* Uninitialized data section */
      . = ALIGN(4);
      .bss :
      {
        /* This is used by the startup in order to initialize the .bss section */
        __START_BSS = .;
              PROVIDE ( __bss_start__ = __START_BSS );

        *(.bss)
        *(.bss*)
        *(COMMON)

        . = ALIGN(4);
        __END_BSS = .;
              PROVIDE ( __bss_end__ = __END_BSS );
      } > m_data

      _romp_at = ___ROM_AT + SIZEOF(.data);
      .romp : AT(_romp_at)
      {
        __S_romp = _romp_at;
        LONG(___ROM_AT);
        LONG(_sdata);
        LONG(___data_size);
        LONG(0);
        LONG(0);
        LONG(0);
      } > m_data

      /* User_heap_stack section, used to check that there is enough RAM left */
      ._user_heap_stack :
      {
        . = ALIGN(4);
        PROVIDE ( end = . );
        PROVIDE ( _end = . );
        __heap_addr = .;
        . = . + __heap_size;
        . = . + __stack_size;
        . = ALIGN(4);
      } > m_data

      .ARM.attributes 0 : { *(.ARM.attributes) }
    }

    我知道答案 目前已有23人回答
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2014-12-1 15:58:01 | 显示全部楼层
    楼主你好!
    你现在偏移地址出了什么问题?
    请把问题描述清楚哦。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-4-27 10:34
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    507

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1450
    最后登录
    2020-8-3
     楼主| 发表于 2014-12-1 17:37:30 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2014-12-1 15:58
    楼主你好!
    你现在偏移地址出了什么问题?
    请把问题描述清楚哦。

    感觉偏移出来生成的bin文件有问题,我按照AN2295的文档m_text      (RX) : ORIGIN = 0x00000410, LENGTH = 0x00017BF0 修改成 m_text      (RX) : ORIGIN = 0x00004000, LENGTH = 0x00017BF0但是生成的bin文件把前面interrupt等都加进去了
    哎...今天够累的,签到来了1...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2014-12-2 09:25:28 | 显示全部楼层
    流-423774 发表于 2014-12-1 17:37
    感觉偏移出来生成的bin文件有问题,我按照AN2295的文档m_text      (RX) : ORIGIN = 0x00000410, LENGTH  ...

    你i现在给出的ld文件是你APP的ld是吧?
    你interrupt从0地址开始,是因为你定义了这个:  m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x000000C0
    这句就导致你中断向量表直接从0开始放了,APP中,你需要把中断向量表也偏移到后面去。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-4-27 10:34
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    507

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1450
    最后登录
    2020-8-3
     楼主| 发表于 2014-12-2 09:48:14 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2014-12-2 09:25
    你i现在给出的ld文件是你APP的ld是吧?
    你interrupt从0地址开始,是因为你定义了这个:  m_interrupts (R ...

    我该成这样子呢,MEMORY {
      m_interrupts (RX) : ORIGIN = 0x00004000, LENGTH = 0x000000C0
      m_text      (RX) : ORIGIN = 0x00004410, LENGTH = 0x0001BBF0
      m_data      (RW) : ORIGIN = 0x1FFFF000, LENGTH = 0x00004000
      m_cfmprotrom  (RX) : ORIGIN = 0x00004400, LENGTH = 0x00000010
    }
    但好像还是不行 m_text的长度也修改过了,APP也跑步起来!
    哎...今天够累的,签到来了1...
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-4-27 10:34
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    507

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1450
    最后登录
    2020-8-3
     楼主| 发表于 2014-12-2 09:55:15 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2014-12-2 09:25
    你i现在给出的ld文件是你APP的ld是吧?
    你interrupt从0地址开始,是因为你定义了这个:  m_interrupts (R ...

    hex文件如下图显示 1.jpg
    哎...今天够累的,签到来了1...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2014-12-2 10:59:52 | 显示全部楼层
    流-423774 发表于 2014-12-2 09:55
    hex文件如下图显示

    看你生成的代码,APP的地址已经偏移过去了。
    那么你bootloader程序之前有没有成功运行过?
    这样,你把你bootloader程序和你的APP都放上来,我看看。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-4-27 10:34
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    507

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1450
    最后登录
    2020-8-3
     楼主| 发表于 2014-12-2 11:26:42 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2014-12-2 10:59
    看你生成的代码,APP的地址已经偏移过去了。
    那么你bootloader程序之前有没有成功运行过?
    这样,你把你b ...

    bootloader没有问题,我使用iar和keil5编译出的测试APP都能在0x4000地址成功跳转跑起来,我感觉是CW10.5编译器的问题。
    哎...今天够累的,签到来了1...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2014-12-2 15:19:01 | 显示全部楼层
    流-423774 发表于 2014-12-2 11:26
    bootloader没有问题,我使用iar和keil5编译出的测试APP都能在0x4000地址成功跳转跑起来,我感觉是CW10.5 ...

    好的,待会有空我这边测试下看看,然后回复你,还请耐心等待下。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-4-27 10:34
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    507

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1450
    最后登录
    2020-8-3
     楼主| 发表于 2014-12-3 18:52:55 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2014-12-2 15:19
    好的,待会有空我这边测试下看看,然后回复你,还请耐心等待下。

    你好,不知道测试可不可以,还有我的bootloader代码要怎么发给你
    哎...今天够累的,签到来了1...
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 16:55 , Processed in 0.109115 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表