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.

[参考译文] J721EXSOMXEVM:R5 freeRTOS ipc_ech_test 问题(困扰)

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1526162/j721exsomxevm-r5-freertos-ipc_echo_test-questions-frustrations

器件型号:J721EXSOMXEVM

工具/软件:

我安装了 J721EXSOMXEVM 处理器卡的大型通用载板。 我正在通过与 TI XDS200 JTAG 探针的 JTAG 连接加载和运行程序。 我们已经使用此方法构建并运行其他代码。

我尝试仅在两个 R5 内核上运行修改后的 IPC 回波示例。 主 MCU2_0 和主 MCU2_1。 (我不会在这个时候混淆 MCU 的命名。)

我选取了常用的 ipc_echo_test_fretos 示例、通过编辑这两个内核的“ipc_rtos_echo_test.c"文件“文件、将其限制在这两个内核、如下所示。

#if defined (SOC_J721E)
#define CORE_IN_TEST            1
.....

#ifdef BUILD_MCU2_0
uint32_t selfProcId = IPC_MCU2_0;
uint32_t remoteProc[] =
{
#if defined (SOC_J721E)
    IPC_MCU2_1
.....

#ifdef BUILD_MCU2_1
uint32_t selfProcId = IPC_MCU2_1;
uint32_t remoteProc[] =
{
#if defined (SOC_J721E)
    IPC_MCU2_0
然后、我使用以下 make 命令针对两个内核进行构建
使 CORE=MCU2_0 BUILD_PROFILE=DEBUG IPC_ECHO_TEST_FreeRTOS
使 CORE=MCU2_1 BUILD_PROFILE=DEBUG IPC_ECHO_TEST_FreeRTOS
然后、我将这些构建的可执行文件加载到相应的内核 (MAIN_Cortex_R5_0_0 和  MAIN_Cortex_R5_0_1) 中、
然后我先运行 0_0、然后快速运行 0_1。   
问题:  
调试器不会在断点处停止、因此我必须逐步浏览代码并在汇编中放置  断点、有时断点会中断。
 如果我没有放入任何断点并运行它们、它们几乎总是出现在中止处理程序或 HwiP_undefined_handler 方法中。
如何进行调试?
我回到这个示例的原因是我尝试让这两个 R5 处理器使用 IPC 与其他人通信、结果非常不一致。 我 有时可以让 0_0 处理器接收服务通知、但我无法收到“ping"。“。

我花了一半时间与 Code Composer Studio 和调试器配合使用、另一半时间在汇编语言中设置断点、因为它拒绝让我在 C 代码中设置断点。


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

    您好:

    [报价 userid=“620214" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1526162/j721exsomxevm-r5-freertos-ipc_echo_test-questions-frustrations
    然后、我使用以下 make 命令针对两个内核进行构建
    使 CORE=MCU2_0 BUILD_PROFILE=DEBUG IPC_ECHO_TEST_FreeRTOS
    使 CORE=MCU2_1 BUILD_PROFILE=DEBUG IPC_ECHO_TEST_FreeRTOS
    [/报价]

    您正在对 ipc_rtos_echo_test.c 文件进行更改、该文件将针对“ipc_echo_test_freertos"而“而不是“ipc_echo_test_freertos"构建“构建

    您能否执行 build_profile=release 但不进行调试、因为我们仅验证版本配置文件?

    它必须是

    创建-sj ipc_rtos_echo_test_freertos=MCU2_0 build_os_type=FreeRTOS

    创建-sj ipc_rtos_echo_test_freertos=MCU2_1 BUILD_OS_TYPE=FreeRTOS

    您可以在 main() 中暂停两个内核、并在两个内核的代码中添加一些断点、以确保两个内核都已命中。 当前、如果您要在控制台或 UART 上打印、将跟踪打印内容、您可以更改以下定义

    define App_printf Ipc_Trace_

    如果您在没有断点的情况下启动、代码将在两个内核上成功运行并到达中止阶段。

    注意:

    如果您在 MCU2_0 和 MCU2_1 上使用 FreeRTOS、则保持 sciserver 在 MCU1_0 内核上持续运行、否则您需要运行  

    两个内核上的 IPC_BareMetal_echo_test 应用程序

    此致

    Tarun Mukesh

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

    Tarun、

    感谢您的答复。 但是、您必须在中输入错误(您正在对 ipc_rtos_echo_test.c 文件进行更改、该文件将为“ipc_echo_test_freertos"而“而不是“ipc_echo_test_freertos"构建“构建)构建)? 这些都是相同的东西在引号。 这话什么意思?

    我按照您的说明制作了两个示例。 我们的 sciserver 始终在 MCU1_0 上运行。 这是我们遵循的调试启动过程的一部分。 我还注意到、在编译过程中会生成 R5 证书。 这很重要吗?  

    我加载了映像、然后先从 MCU2_0 开始运行它们。 我会得到以下输出。

    IPC_echo_test (core : mcu2_0) .....
    IPC_echo_test (core : mcu2_1) .....
    mmccuu22__10  <<---->>  mmccuu22__01,,  PPiinngg--  1100000000,,  ppoonngg  --  1100000000  ccoommpplleetteedd
    

    这看起来是否正确? UART 印刷品看起来像是字符增加了一倍。 必须同时来自两个处理器访问 UART。

    所以它似乎起了作用。  除了在“释放“模式下运行它之外、编译还执行了一些特殊操作吗?  

    变量“build_os_type"不“不是我知道必须设置的变量。 它不会显示在“make help“命令中。  我构建的时候没有设置这个变量,它似乎是一样的工作。 可能是因为上次运行时设置的?

    最后:在 CCS 中使用 JTAG 调试器、我们通常在加载程序之前复位内核。 大约一半的时间、当我们加载程序时、它刚开始运行、我们必须暂停它、复位、然后再次加载。 然后、它将在 main 停止。 有什么想法,为什么会发生这种情况?

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

    您好、

    SDK 中有 2 种不同的测试

    1)  ipc_rtos_echo_test_freertos,此测试将与所有 RTOS 内核通信进行 IPC 传输。

    2) ipc_echo_test_freertos,该测试将与所有 RTOS 内核以及 Linux 内核通信以进行 IPC 传输。

     

    您可以使用 这些测试中的任何一个 、但您在 ipc_rtos_echo_test.c 中所做的更改将适用于 ipc_rtos_echo_test_freertest   测试、同样、还有 ipc_echo_test.c 文件用于 ipc_echo_test_freertest 测试  

    如果不进行任何更改、您的用例也可以正常工作。

    [引述 userid=“620214" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1526162/j721exsomxevm-r5-freertos-ipc_echo_test-questions-frustrations/5869277 #5869277“]

    这看起来是否正确? UART 印刷品看起来像是字符增加了一倍。 必须同时来自两个处理器访问 UART。

    所以它似乎起了作用。  除了在“释放“模式下运行它之外、编译还执行了一些特殊操作吗?  

    [/报价]

    是的 UART 对我来说看起来不错,因为两个内核同时访问同一个 UART 实例可能存在这样的问题。  

    是的,正如我所说,我们只验证发布模式,这就是为什么它工作正常.

    最后:在 CCS 中、我们通常在加载程序之前复位内核。 大约一半的时间、当我们加载程序时、它刚开始运行、我们必须暂停它、复位、然后再次加载。 然后、它将在 main 停止。 有什么想法、为什么会发生这种情况?

    您可以针对 CCS 相关问题再提交一个 E2E 论坛、吗?  通常不应发生这种情况。 加载程序后、内核应处于暂停状态的 main、但除非给出 run、否则不会运行。

     

    此致

    Tarun Mukesh