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.

[参考译文] TCM-AM243X:如何将 freertos.am243x.r5f.ti-arm-gcc.debug.lib 放在 MCU-PLUS-SDK 中的内核1

Guru**** 2463330 points
Other Parts Discussed in Thread: AM2432

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1477763/mcu-plus-sdk-am243x-how-to-put-freertos-am243x-r5f-ti-arm-gcc-debug-lib-in-the-tcm-for-core-1

器件型号:MCU-PLUS-SDK AM243X
主题中讨论的其他器件:AM2432

工具与软件:

您好!

我使用的是 am2432  MCU_PLUS_sdk_am243x_09_01_00_41 示例。 (您很好地帮助我们使用 GCC 编译所有内容)

我已经准备了两个 FreeRTOS "Hello World"应用程序、一个用于核心0、另一个用于核心1。

我将使用 XDS200连接到每个内核、并同时激活这两个内核。

我正在使用 UART 打印输出查看这两个应用程序是否正确运行。

现在、我想使用用于 CORE-1的 FreeRTOS 库-  freertos.am243x.r5f.ti-arm-gcc.debug.lib

以获得更高的速度。

我知道我可以在 linker.cmd 中创建一个 TCM 组,并将每个 FreeRTOS 函数属性都放在那里,

但是否有更通用的方法

 .libraries:
 {
 * freertos.am243x.r5f.ti-arm-gcc.debug.lib(.text .data .bss)
 }> TCM AT>闪存

或 -WL、--whole-archive -lfreertos.am243x.r5f.ti-arm-gcc.debug -WL、--no-whole-archive

正确的方法是什么?

谢谢!

Eli。

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

    Eli、您好!

    您可以在今天之前得到回复。

    此致、

    Anil。

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

    Eli、您好!

    我们已经完成了与您的项目要求类似的测试案例。

    您可以通过下面的链接获取这些详细信息、并且我们还已经在链接器命令文件中将整个 FreeRTOS 库添加到 MSRAM 存储器中。

    您只需在链接器 cmd 文件中将 MSRAM 更新为 TCM 存储器。

    如果您遇到任何问题、敬请告知。

    https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1326858/am243x-freertos-jitter/5433121#5433121

    SECTIONS
    	{
    
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.text)
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.data)
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.bss)
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.rodata)
    	 } > MSRAM {} palign(8)

    e2e.ti.com/.../5468.linker.cmd

    此致、

    Anil。

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

    尊敬的 Anil:

    请帮助我修复我的 linker.cmd。

    它可以工作,但将所有 FreeRTOS 代码和数据放入 MSRAM 中,即使我更改为 TCM。

    我将建议的行放在部分的哪个位置?

    /*定义堆栈和堆大小*/
    _TI_STACK_SIZE = 8000;
    _TI_HEAP_SIZE = 2 * 1024;

    /*定义入口点*/
    条目(_vectors)

    /*不同模式的堆栈大小*/
    _IRQ_STACK_SIZE = 256;
    _FIQ_STACK_SIZE = 256;
    _SVC_STACK_SIZE = 512;
    __abort_stack_size = 256;
    __defined_stack_size = 256;

    /* Core-1内存区域*/
    小程序

    R5F_VECS:origin = 0x00000000、length = 0x00000040
    R5F_TCMA : origin = 0x00008040 , length = 0x00007FC0 /* code*/
    r5F_TCMB1:origin = 0x41018000、length = 0x00008000 /* data*/

    /*确保 MSRAM 不会重叠*/
    MSRAM : origin = 0x70120000 , length = 0x15FFFF

    /*闪存*/
    Flash:origin = 0x60200000、length = 0x800000

    /* Core-1的 DDR 内存(512MB 总容量的20%= 128MB)*
    DDR : origin = 0x98000000 , length = 0x08000000

    /*共享内存*/
    USER_SHM_MEM:origin = 0x701D0000、length = 0x00004000
    LOG_SHM_MEM:origin = 0x701D4000、length = 0x00004000
    RTOS_NORTOS_IPC_SHM_MEM:origin = 0x701D8000、length = 0x00008000
    Non_cache_mem : origin = 0x70060000 , length = 0x8000
    }

    /* SECTIONS */
    部分中)

    vectors : align (8){}> R5F_VECS
    text.hwi:align (8){}> MSRAM
    .text.cache : ALIGN (8){}> MSRAM.
    .text.mpu:align (8){}> MSRAM
    .text.boot:align (8){}> MSRAM
    .text.startup:align (8){}>MSRAM.
    .text.abort:align (8){}> MSRAM

    .text :对齐(8){}>MSRAM.
    .rodata : align (8){}>MSRAM.
    .data :对齐(8){}>MSRAM.

    /*堆栈定义*/
    .irqstack (NoLoad):对齐(8){
    _IRQ_STACK_START =.;
    . =。 +_IRQ_STACK_SIZE;
    _IRQ_STACK_END =.;
    }> MSRAM

    .fiqstack (NoLoad):对齐(8){
    _FIQ_STACK_START =.;
    . =。 +_FIQ_STACK_SIZE;
    _FIQ_STACK_END =.;
    }> MSRAM

    svcstack (NoLoad):对齐(8){
    __SVC_STACK_START =。;
    . =。 +__SVC_STACK_SIZE;
    __SVC_STACK_END =.;
    }> MSRAM

    abortstack (NoLoad):对齐(8){
    __abort_stack_start =.;
    . =。 +___ abort_stack_size;
    __ABORT_STACK_END =.;
    }> MSRAM

    undefinedstack (NoLoad):对齐(8){
    __defined_stack_start =.;
    . =。 +__undefined_stack_size;
    __defined_stack_end =.;
    }> MSRAM

    FreeRTOS_DATA (NoLoad):align (8)

    _s_freertos_data =.;/*.freertos_data 段的起始地址*/
    *(.freertos_data)
    _e_freertos_data =.;/*.freertos_data 段的结束地址*/
    }> R5F_TCMB1 /*MSRAM*/*DDR*/


    Privileged_data (NoLoad): align (8){
    _s_privileged_data =.;
    *(特权数据)
    _e_privileged_data =.;
    }> MSRAM

    特权函数: align(8){
    _s_privileged_functions =.;
    *(特权函数)
    _e_privileged_functionsb =.;
    }> R5F_TCMA /*MSRAM*/

    /*堆和堆栈*/
    .sysmem (NoLoad):对齐(8){
    _TI_HEAP_START =.;
    . =。 +__TI_heap_size;
    _TI_HEAP_END =.;
    }> MSRAM

    .stack (NoLoad):对齐(8){
    _TI_STACK_BASE =。;
    __stack_start =.;
    __stack =.;
    . = align (8);
    . =。 +_TI_STACK_SIZE;
    . = align (8);
    }> MSRAM
    __STACK_END =.;

    .bss :{
    _BSS_START__=.;
    *(.bss)
    *(.bss.*)
    . =对齐(8);
    *(通用)
    ___ bss_end_=.;
    . =对齐(8);
    }> MSRAM

    __BSS_START =__BSS_START__;
    __BSS_END =__BSS_END__;

    /*定义 init 和 fini 数组*/
    preinit_array : align (4){
    proven_hided (__preinit_array_start =.);
    keep (*(.preinit_array*))
    proven_hided (__preinit_array_end =.);
    }> MSRAM

    init_array : align (4){
    provide_hided (__init_array_start =.);
    keep (*(sort (.init_array.*)))
    keep (*(.init_array*))
    provide_hided (__init_array_end =.);
    }> MSRAM

    fini_array : align (4){
    prove_hided (__fini_array_start =.);
    Keep (*(sort (.fini_array.*)))
    keep (*(.fini_array*))
    prove_hided (__fini_array_end =.);
    }> MSRAM

    /*堆*/
    heap (NoLoad): align(16){
    _s_heap =.;
    *(堆)
    _e_heap =.;
    }> DDR
    }

    谢谢!

    此致、

    Eli

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

    Eli、您好!

    您可以遵循上面附加的链接器 cmd 文件吗?

    您可以将更改移至 SECTIONS 文件夹。

    此致、

    Anil。

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

    尊敬的 Anil:

    谢谢、

    此致、

    Eli