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.

[参考译文] TMDS243EVM:使用 ind_comms_sdk_am243x_11、在 EtherCAT--Part2 旁边添加 CPSW

Guru**** 2555640 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1533209/tmds243evm-using-ind_comms_sdk_am243x_11-add-cpsw-beside-ethercat--part2

器件型号:TMDS243EVM
主题:SysConfig 中讨论的其他器件

工具/软件:

尊敬的 TI 专家:

继续执行以下 POST。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1518558/tmds243evm-using-ind_comms_sdk_am243x_11-add-cpsw-beside-ethercat/5895796#5895796

  我们自己设计的电路板硬件与此类似:ICSSG0 +两个用于 EtherCAT 的 DP83826;CPSW0 +两个  用于以太网的 DP83867。

  这些 EtherCAT 和以太网可以在单个 R5 内核上协同工作、这是我想要的。

  我尝试合并以下两个工程、这两个工程都可以很好地与我的电路板和 CCS 配合使用、

     IND_comms_sdk_am243x_11_00_00_08\examples\industrial_comms\EtherCAT_slave_beckhoff ssc_demo\am243x-evm\r5fss1-0_freeRTOS  — 我的工程基于此演示。

     ind_comms_sdk_am243x_11_00_00_08\mcu_plus_sdk\source\networking\enet\core\examples\lwip\enet_lwip_cpsw\am243x-evm\r5fss0-0_freeRTOS

 以下是我所经历的过程、以及我被卡住的地方。

1、导入 EtherCAT_SLAVE_Beckhoff ssc_demo_am243x-evm_r5fss0-0_freertos_ti-arm-clang Build OK

2 将 SysConfig 从 EtherCAT_SLAVE_Beckhoff ssc_demo_am243x-evm_r5fss1-0_freertos_ti-arm-clang Build OK 复制

3 在 SysConfig 中:添加 Enet (CPSW)、将自动添加 EthPhy (CPSW/ICSS)。 将 EthPhy 器件修改为 DP83867。 并从 enet_Lwip_cpsw 工程中复制 Include 选项。 构建正常

4 从 enet_Lwip_cpsw 演示中、将所有相关文件 (.c 和.h) 和 folderextPhyMgmt 复制到本地。 Main.c 均来自 EtherCAT_SLAVE_Beckhoff。 将 ENET_ENABLE_PER_CPSW=1 添加到预定义符号、  构建正常

在 main.c 中添加以下内容

       #include  “TI_DRIVERS_OPEN_CLOSE.h"</s>“

#include  “TI_board_OPEN_CLOSE.h"</s>“

构建正常

6 当我尝试调用 enet_lwip_example() 时、出现如下错误  

修改 linker.cmd 后、MEM 错误被修复。 但是、“未定义的 符号“、“首次引用“ 我不知道如何修复它们。

-------------------------------------------------------------------------------------------------------

我已将${SDK_INSTALL_PATH}/MCU_PLUS_SDK 路径添加到 CCS 中的“Product discovery path“(从 Window->Preferences->Code Composer Studio->Products)。

以下是我的工程的头文件、它们将  enet_lwip_cpsw 和 ethercat_slave_beckhoff ssc_demo 两个演示工程的头文件合并。

请帮我解决这个问题!

BR、

春阳  

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

    嗨、春阳


    您能否分享 linker.cmd 我需要了解您为使程序适应存储器而做的更改。

    另外, 在 main.c 中添加 enet_lwip_example() 的位置是什么?

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

    你(们)好

    位于 main.c 中

    void EtherCAT_SLAVE_Beckhoff ssc_demo_main (void * args);
    void enet_lwip_example (void * args);

    void freertos_main (void * args)

    EtherCAT_SLAVE_Beckhoff ssc_demo_main (NULL);
    Enet_lwip_example (NULL);

    vTaskDelete(NULL);
    }

    /////////////////

    链接器.cmd

    移动数据

    R5F_VECS:origin = 0x0、长度= 0x40
    R5F_TCMA:origin = 0x40、长度= 0x7FC0
    R5F_TCMB0:origin = 0x41010000、长度= 0x8000
    non_cache_MEM:origin = 0x70060000、长度= 0x8000
    MSRAM:origin = 0x70080000、length = 0xC0000  //此处将 0xC8000 更改为 0xC0000     
    USER_SHM_MEM:origin = 0x701D0000、长度= 0x180
    Log_SHM_MEM:origin = 0x701D0180、长度= 0x3E80
    RTOS_NORTOS_IPC_SHM_MEM:origin = 0x701D4000、length = 0xC000
    Flash:origin = 0x60100000、length = 0x80000

    /*对于未在此内核中定义但由其他内核与当前内核共享的存储器区域*/


    }

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

    我无法上传文件、因此我将 linker.cmd 的所有内容复制到这里、 因为它不是很长。

    //////////////////

    /*这是在 main() 内运行的代码所使用的栈
    *如果是 NORTOS,
    *-这意味着 ISR 外部的所有代码都使用此栈
    *对于 freeRTOS
    *-这意味着在 main() 中调用 vTaskStartScheduler() 之前的所有代码
    *使用此栈。
    *-在 vTaskStartScheduler () 之后,在 FreeRTOS 中创建的每个任务都有自己的栈
    */

    -- stack_size=32768
    /*这是 NORTOS 和 FreeRTOS 中 malloc () API 的堆大小
    *这也是 pvPortMalloc 在 FreeRTOS 中使用的堆
    */
    -- heap_size=32768
    -e_vectors /*这是应用程序的条目、_vector 必须放置在起始地址 0x0 */

    /*这是 R5 处于 IRQ 模式时的栈大小
    *在 NORTOS 中,
    *-这里中断嵌套被启用
    *-这是注册为 IRQ 类型的 ISR 使用的栈
    *在 FreeRTOS 中、
    *-这里中断嵌套被启用
    *-这是在接收到 IRQ 时初始使用的堆栈
    *-但随后模式切换到 SVC 模式,并将 SVC 堆栈用于所有用户 ISR 回调
    *-因此在 FreeRTOS 中,IRQ 栈大小更小,SVC 栈大小更多
    */
    _IRQ_STACK_SIZE = 256;
    /*这是 R5 处于 IRQ 模式时的栈大小
    *-在 NORTOS 和 FreeRTOS 中、针对 FIQ 禁用嵌套
    */
    __FIQ_STACK_SIZE = 256;
    __SVC_STACK_SIZE = 4096;/*这是 R5 处于 SVC 模式时的栈大小*/
    __abort_stack_size = 256;/*这是 R5 处于中止模式时的栈大小*/
    __undefined_stack_size = 256;/*这是 R5 处于 UNDEF 模式时的栈大小*/

    很重要

    .vectors :{
    }> R5F_VECS , palign(8)


    组:{
    .text.hwi :{
    } palign(8)
    .text.cache :{
    } palign(8)
    .text.mpu:{
    } palign(8)
    .text.boot:{
    } palign(8)
    .text:abort :{
    } palign(8)
    }> MSRAM


    组:{
    .text:{
    } palign(8)
    .rodata :{
    } palign(8)
    }> MSRAM


    组:{
    .data:{
    } palign(8)
    }> MSRAM


    组:{
    .bss :{
    } palign(8)
    RUN_START (__BSS_START)
    RUN_END (__BSS_END)
    .sysmem :{
    } palign(8)
    .stack :{
    } palign(8)
    }> MSRAM


    组:{
    .irqstack :{
    。 =。 +_IRQ_STACK_SIZE;
    }对齐 (8)
    RUN_START (__IRQ_STACK_START)
    RUN_END (__IRQ_STACK_END)
    .fiqstack :{
    。 =。 +__FIQ_STACK_SIZE;
    }对齐 (8)
    RUN_START (__FIQ_STACK_START)
    RUN_END (__FIQ_STACK_END)
    .svcstack :{
    。 =。 +_SVC_STACK_SIZE;
    }对齐 (8)
    RUN_START (__SVC_STACK_START)
    RUN_END (__SVC_STACK_END)
    .abortstack :{
    。 =。 +_ABORT_STACK_SIZE;
    }对齐 (8)
    RUN_START (__ABORT_STACK_START)
    RUN_END (__ABORT_STACK_END)
    .undefinedstack :{
    。 =。 +__undefined_stack_size;
    }对齐 (8)
    RUN_START (__undefined_stack_start)
    RUN_END (_Undefined_stack_end)
    }> MSRAM


    组:{
    .arm.exidx:{
    } palign(8)
    .init_array:{
    } palign(8)
    .fini_array:{
    } palign(8)
    }> MSRAM

    .bss.user_shared_mem (NoLoad):{
    }> USER_SHM_MEM

    .bss.log_shared_mem (NoLoad):{
    }> LOG_SHM_MEM

    .bss.ipc_vring_mem(空载):{
    }> RTOS_NORTOS_IPC_SHM_MEM

    .bss.nocache (NoLoad):{
    }> non_cache_MEM


    }


    移动数据

    R5F_VECS:origin = 0x0、长度= 0x40
    R5F_TCMA:origin = 0x40、长度= 0x7FC0
    R5F_TCMB0:origin = 0x41010000、长度= 0x8000
    non_cache_MEM:origin = 0x70060000、长度= 0x8000
    MSRAM:origin = 0x70080000、length = 0xC0000
    USER_SHM_MEM:origin = 0x701D0000、长度= 0x180
    Log_SHM_MEM:origin = 0x701D0180、长度= 0x3E80
    RTOS_NORTOS_IPC_SHM_MEM:origin = 0x701D4000、length = 0xC000
    Flash:origin = 0x60100000、length = 0x80000

    /*对于未在此内核中定义但由其他内核与当前内核共享的存储器区域*/


    }

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

    我可以重现您的问题。 就会找出原因并返回给您。

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

    我很高兴知道这一点、 请继续、任何更新、请告诉我。

    非常感谢、

    春阳  

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

    嗨、春阳

    之所以存在未解决的符号问题、是因为 CPSW 需要一些库、这些库未包含在 EtherCAT 示例中。 必须包含这些库。 它类似于添加一些包含路径。

    在 enet_lwip_cpsw 示例中、转到“Properties"->"Arm Linker"->"File“ Linker"->"File search"“ search"路径“路径。“。</s>“

    然后、复制库名称及其路径。

    现在、在 EtherCAT 示例中、转到 properties、添加那些尚未存在的库。

    例如、您将看到 EtherCAT 示例中不存在以下库。


    enet-cpsw.am243x.r5f.ti-arm-clang.debug.lib
    lwipif-cpsw-freertos.am243x.r5f.ti-arm-clang.debug.lib
    lwip-freertos.am243x.r5f.ti-arm-clang.debug.lib
    lwip-contrib-freertos.am243x.r5f.ti-arm-clang.debug.lib

    添加这些库后、将解决未定义符号错误。 但现在由于您有更多的库、您将面临“程序将无法适应内存问题“、因此这需要解决。 您可以通过 syscfg 自行解决此问题、也可以使用以下链接器文件

    /*这是在 main() 内运行的代码所使用的栈
    *如果是 NORTOS,
    *-这意味着 ISR 外部的所有代码都使用此栈
    *对于 freeRTOS
    *-这意味着在 main() 中调用 vTaskStartScheduler() 之前的所有代码
    *使用此栈。
    *-在 vTaskStartScheduler () 之后,在 FreeRTOS 中创建的每个任务都有自己的栈
    */

    -- stack_size=32768
    /*这是 NORTOS 和 FreeRTOS 中 malloc () API 的堆大小
    *这也是 pvPortMalloc 在 FreeRTOS 中使用的堆
    */
    -- heap_size=32768
    -e_vectors /*这是应用程序的条目、_vector 必须放置在起始地址 0x0 */

    /*这是 R5 处于 IRQ 模式时的栈大小
    *在 NORTOS 中,
    *-这里中断嵌套被启用
    *-这是注册为 IRQ 类型的 ISR 使用的栈
    *在 FreeRTOS 中、
    *-这里中断嵌套被启用
    *-这是在接收到 IRQ 时初始使用的堆栈
    *-但随后模式切换到 SVC 模式,并将 SVC 堆栈用于所有用户 ISR 回调
    *-因此在 FreeRTOS 中,IRQ 栈大小更小,SVC 栈大小更多
    */
    _IRQ_STACK_SIZE = 256;
    /*这是 R5 处于 IRQ 模式时的栈大小
    *-在 NORTOS 和 FreeRTOS 中、针对 FIQ 禁用嵌套
    */
    __FIQ_STACK_SIZE = 256;
    __SVC_STACK_SIZE = 4096;/*这是 R5 处于 SVC 模式时的栈大小*/
    __abort_stack_size = 256;/*这是 R5 处于中止模式时的栈大小*/
    __undefined_stack_size = 256;/*这是 R5 处于 UNDEF 模式时的栈大小*/

    很重要

    .vectors :{
    }> R5F_VECS , palign(8)


    组:{
    .text.hwi :{
    } palign(8)
    .text.cache :{
    } palign(8)
    .text.mpu:{
    } palign(8)
    .text.boot:{
    } palign(8)
    .text:abort :{
    } palign(8)
    }> MSRAM


    组:{
    .rodata :{
    } palign(8)
    }> MSRAM


    组:{
    .data:{
    } palign(8)
    }> MSRAM


    组:{
    .bss :{
    } palign(8)
    RUN_START (__BSS_START)
    RUN_END (__BSS_END)
    .sysmem :{
    } palign(8)
    .stack :{
    } palign(8)
    }> MSRAM


    组:{
    .irqstack :{
    。 =。 +_IRQ_STACK_SIZE;
    }对齐 (8)
    RUN_START (__IRQ_STACK_START)
    RUN_END (__IRQ_STACK_END)
    .fiqstack :{
    。 =。 +__FIQ_STACK_SIZE;
    }对齐 (8)
    RUN_START (__FIQ_STACK_START)
    RUN_END (__FIQ_STACK_END)
    .svcstack :{
    。 =。 +_SVC_STACK_SIZE;
    }对齐 (8)
    RUN_START (__SVC_STACK_START)
    RUN_END (__SVC_STACK_END)
    .abortstack :{
    。 =。 +_ABORT_STACK_SIZE;
    }对齐 (8)
    RUN_START (__ABORT_STACK_START)
    RUN_END (__ABORT_STACK_END)
    .undefinedstack :{
    。 =。 +__undefined_stack_size;
    }对齐 (8)
    RUN_START (__undefined_stack_start)
    RUN_END (_Undefined_stack_end)
    }> MSRAM


    组:{
    .arm.exidx:{
    } palign(8)
    .init_array:{
    } palign(8)
    .fini_array:{
    } palign(8)
    }> MSRAM

    .bss.user_shared_mem (NoLoad):{
    }> USER_SHM_MEM

    .bss.log_shared_mem (NoLoad):{
    }> LOG_SHM_MEM

    .bss.ipc_vring_mem(空载):{
    }> RTOS_NORTOS_IPC_SHM_MEM

    .bss.nocache (NoLoad):{
    }> non_cache_MEM


    组:{
    CONFIG_OUTPUT_SECTION0:{
    -l“enet-cpsw.am243xr5f.ti-arm-clang.*".lib(“ (.text)
    l“lwipif-cpsw-freertos.am243xr5f.ti-arm-clang.*".lib(“ (.text)
    l“lwip-freertos.am243xr5f.ti-arm-clang.*".lib(“ (.text)
    -l“freertos.am243xr5f.ti-arm-clang.*".lib(“ (.text)
    -l“lwip-contrib-freertos.am243x.r5f.ti-arm-clang.*".lib(“ (.text)
    -l“drivers.am243xr5f.ti-arm-clang.*".lib(“ (.text)
    -l“board.am243xr5f.ti-arm-clang.*".lib(“ (.text)
    -l“ethercat_slave_iss_fwhal.am243x.r5f.ti-arm-clang.*".lib(“ (.text)
    }对齐 (8)
    }> DDR_ALL_X


    组:{
    .text:{
    }对齐 (8)
    }> MSRAM


    }


    移动数据

    R5F_VECS:origin = 0x0、长度= 0x40
    R5F_TCMA:origin = 0x40、长度= 0x7FC0
    R5F_TCMB0:origin = 0x41010000、长度= 0x8000
    non_cache_MEM:origin = 0x70060000、长度= 0x8000
    MSRAM:origin = 0x70080000、length = 0xC0000
    USER_SHM_MEM:origin = 0x701D0000、长度= 0x180
    Log_SHM_MEM:origin = 0x701D0180、长度= 0x3E80
    RTOS_NORTOS_IPC_SHM_MEM:origin = 0x701D4000、length = 0xC000
    Flash:origin = 0x60100000、length = 0x80000
    DDR_ALL_X:origin = 0x80000000、length = 0x50000

    /*对于未在此内核中定义但由其他内核与当前内核共享的存储器区域*/


    }

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

    尊敬的 Keshav:

      感谢您发送编修。

      我的工程现在可以通过构建。

      始终出现“内存问题“错误、直到我按照以下方式放大大小。

       MSRAM  :原点= 0x70080000、长度= 0x140000

       单个 R5F 内核是否适合使用这种尺寸的 MSRAM?

      现在可以在我的电路板上运行该测试。 然后我会回复您。

    BR、

    春阳   

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

    是的、应该可以使用此尺寸的 MSRAM。

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

    尊敬的 Keshav:

      感谢您发送编修。

      我的电路板现在可以同时使用 EtherCAT 和以太网。

      我可能会在  没有你的支持下在这里停留很长时间。

    BR、

    春阳