野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8005|回复: 2

分散加载文件问题请教

[复制链接]
发表于 2018-6-7 11:24:25 | 显示全部楼层 |阅读模式

请教高手帮忙解答
我第一次使用RT系列芯片遇到下面问题,我想搞明白
在官方的MIMXRT1052xxxxx_flexspi_nor.scf文件中有以下代码:

#define m_flash_config_start           0x60000000
#define m_flash_config_size            0x00001000

#define m_ivt_start                    0x60001000
#define m_ivt_size                     0x00001000

#define m_interrupts_start             0x60002000
#define m_interrupts_size              0x00000400

#define m_text_start                   0x60002400
#define m_text_size                    0x01FFDC00

#define m_data_start                   0x20000000
#define m_data_size                    0x00020000

#define m_data2_start                  0x20200000
#define m_data2_size                   0x00040000


LR_m_text m_interrupts_start m_text_start+m_text_size-m_interrupts_size {   ; load region size_region
  VECTOR_ROM m_interrupts_start m_interrupts_size { ; load address = execution address
    * (RESET,+FIRST)
  }
  ER_m_text m_text_start m_text_size { ; load address = execution address
    * (InRoot$$Sections)
    .ANY (+RO)
  }
  RW_m_data m_data_start m_data_size-Stack_Size-Heap_Size { ; RW data
    .ANY (+RW +ZI)
    * (NonCacheable.init)
    * (NonCacheable)
  }
  ARM_LIB_HEAP +0 EMPTY Heap_Size {    ; Heap region growing up
  }
  ARM_LIB_STACK m_data_start+m_data_size EMPTY -Stack_Size { ; Stack region growing down
  }
}


问题一:
根据加载时域的描述定义
load_region_name(base_address|("+"offset))[attribute_list][max_size]
{
        execution_region_description+
}

base_address:表示本加载时域中的对象在连接时的起始地址,地址必须是字对齐的;

max_size:指定本加载时域的最大尺寸。如果本加载时域的实际尺寸超过了该值,连接器将报告错误,默认取值为 0xFFFFFFFF;


base_address = m_interrupts_start(0x60002000)
max_size = m_text_start+m_text_size-m_interrupts_size(0x60002400 + 0x01FFDC00 - 0x00000400)
这个max_size是什么范围,有点看不懂


问题二:
RW_m_data 的地址空间(start:0x20000000,size:0x00020000) 不在 LR_m_text地址空间(start:0x60002000,size:????????)范围内
这样写是不是有问题?


正点原子的例程将这部分已经修改,不知道官方这部分是不是真的错了。请高手帮忙解答,谢谢。
回复

使用道具 举报

发表于 2018-6-7 13:56:32 | 显示全部楼层
RW_m_data 在sdk例程里是用来做液晶缓存的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-7 13:59:22 | 显示全部楼层
我找到了一些证据表明这个写法有问题,
我在找到了NXP其它系列MCU的SCF文件加载域是这样定义的
LR_m_text m_interrupts_start m_text_start+m_text_size-m_interrupts_start { ; load region size_region
  VECTOR_ROM m_interrupts_start m_interrupts_size { ; load address = execution address
    * (RESET,+FIRST)
  }
  ER_m_flash_config m_flash_config_start FIXED m_flash_config_size { ; load address = execution address
    * (FlashConfig)
  }
  ER_m_text m_text_start m_text_size { ; load address = execution address
    * (InRoot$$Sections)
    .ANY (+RO)
  }

#if (defined(__ram_vector_table__))
  VECTOR_RAM m_interrupts_ram_start EMPTY m_interrupts_ram_size {
  }
#else
  VECTOR_RAM m_interrupts_start EMPTY 0 {
  }
#endif
  RW_m_data m_data_start m_data_size { ; RW data
    .ANY (+RW +ZI)
  }
  RW_m_data_2 m_data_2_start m_data_2_size-Stack_Size-Heap_Size { ; RW data
    .ANY (+RW +ZI)
  }
  ARM_LIB_HEAP ((ImageLimit(RW_m_data_2) == m_data_2_start) ? m_data_2_start : +0) EMPTY Heap_Size { ; Heap region growing up
  }
  ARM_LIB_STACK m_data_2_start+m_data_2_size EMPTY -Stack_Size { ; Stack region growing down
  }
}
红色部分就是不同的地方,
1、m_text_start+m_text_size-m_interrupts_size
2、m_text_start+m_text_size-m_interrupts_start
所有的RT1052系列的例程全是第1种写法应该不对,应该改为2的写法。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-4 16:49 , Processed in 0.046951 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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