This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/CC3220S-LAUNCHXL:修改 CC3220S 的链接器脚本

Guru**** 2535420 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/761875/ccs-cc3220s-launchxl-modifying-the-linker-script-for-cc3220s

器件型号:CC3220S-LAUNCHXL

工具/软件:Code Composer Studio

您好!

我在 RAM 上运行的非常严格。  .lds 文件似乎包含所有链接器指令、所以我只是直接修改此文件、还是因为它只是由另一个工具自动生成而被删除?  此外、我能否将.data 移动到 SRAM0?  这样做是否有影响?  .data 现在为~10k、因此它看起来合适。

它实际上与更改 region_alias ("region_data"、SRAM)一样简单;更改为 region_alias ("region_data"、SRAM0);

/*
版权所有(c) 2016、德州仪器(TI)公司
*保留所有权利。
*
*
只要
符合以下条件*、允许以源代码和二进制形式重新分发和使用:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
***二进制形式的再发行必须在

*随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
***未经

事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*、

不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
*贡献者都不对任何直接、间接、偶然、特殊、
*模范、 或相应的损害(包括但不限于
*采购替代产品或服务;丧失使用、数据或利润;
*或业务中断)、但出于任何责任理论
、*无论是在合同中、严格责任还是由于
使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
、*即使已获悉可能会发生此类损坏。
//

/*
=== CC3220S_LAUNCHXL_TIRTOS。lds ===
*为 MSP_EXP432P401R M4定义存储器块开始/长度
*/

STACKSIZE = 1024;
HEAPSIZE = 0x8000;/* HeapMem 使用的堆缓冲区大小*/

MEMORY
{
SRAM0 (RWX):origin = 0x20000000,length = 0x00004000
SRAM (RWX):origin = 0x20004000、length = 0x0003c000
}

region_alias ("region_RAM_VECS"、SRAM0);
region_alias ("region_text"、SRAM);
region_alias ("region_BSS"、 SRAM);
region_alias ("region_data"、SRAM);
region_alias ("region_stack"、SRAM);
region_alias ("region_heap"、SRAM);
region_alias ("region_arm_EXIDX"、SRAM);
region_alias ("region_arm_EXTAB"、 SRAM);

SECTIONS{

提供(_vtable_base_address =
已定义(_vtable_base_address)? _vtable_base_address:0x20000000);

.vtable (_vtable_base_address)(空载):{
保留(*(.vtable)
)} > REGAL_RAM_VECS

提供(_intvecs_base_address =
已定义(_intvecs_base_address)? _intvecs_base_address:0x20004000);

.intvecs (_intvecs_base_address):at (_intvecs_base_address){
保留(*(.intvecs)
)} > region_text

.text:{
create_object_symbols
*(.text)
*(.text.*)
。 =对齐(0x4);
保留(*(.ctors))
。 =对齐(0x4);
保留(*(.ditors))
。 =对齐(0x4);
__init_array_start =.;
保留(*(.init_array*))
__init_array_end =.;
*(.init)
*(.fini*)
} > region_text at > region_text

提供(__etext =.);
提供(_etext =.);
提供(etext =.);

rodata:{
*(.rodata)
*(.rodata*)
} > region_text at > region_text

.data:align (4){
__DATA_LOADDR___= LOADDR (.data);
__data_start__=.;
*(.data)
*(.data*)
。 =对齐(4);
__DATA_END__=;
} > region_data at > region_text

arm.exidx:{
_exidx_start =.;
*(.arm.exidx*.gnu.linkone.armexidx.*)
_exidx_end =.;
} > REGION ARM_EXIDX、位于> REGION ARM_EXIDX

arm.extab:{
*(.arm.extab*.gnu.linkone.armextab.*)
} > REGION ARM_EXTAB、> REGION ARM_EXTAB

.bss:{
_bss_start__=.;
*(.shbss)
*(.bss)
*(.bss.*)
*(通用)
。 =对齐(4);
__bss_end__=;
} > REGION _BSS AT > REGION BSS

堆:{
_heap_start__=.;
结束=_heap_start__;
_end =结束;
_end =结束;
保留(*(.heap))
_heap_end_=.;
__HeapLimit=__heap_end__;
} > region_heap at>region_heap

/* HeapMem 使用的堆缓冲区*/
.priheap:{
。 =对齐(8);
_primary_heap_start__=.;
。 += HEAPSIZE;
__primary_heap_end__=.;
} > region_heap at>region_heap

.stack (NoLoad):align (0x8){
_stack =.;
_stack =.;
保留(*(.stack))
。 += STACKSIZE;
} > region_stack at> region_stack
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Andrew、

    您在示例中使用什么编译器? 是的、我相信您可以进行这种修改、它应该起作用。  

    此致、

    Vince

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用 GCC 项目。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、太棒了。 让我知道这在您测试后是否起作用。
    VR
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Andrew、

    这是否解决了您的问题?

    Vince