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.

[参考译文] TDA4VM:在 main2_1和 mcu1_0之间传输数据

Guru**** 2478765 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1459661/tda4vm-transfer-data-between-main2_1-and-mcu1_0

器件型号:TDA4VM

工具与软件:

您好、TI 专家:

  我想将数据从主 MCU 2.1发送到 MCU 1_0、除了 IPC 之外、我认为共享内存是传输数据的一种简单方法、尤其是对于大数据大小的情况。 以供参考、文档或演示并开始使用。

  1.哪个内存 区域可以用来在内核之间共享?

  2. SDK API 是否 可以立即使用或者需要自己实现?

谢谢。  

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

    您好!

    除了 IPC 之外,我们没有关于内核间通信的文档。 对于较大的数据大小、您可以在 DDR 中保留存储器的一部分、并在 MPU 配置中配置该部分。 在说谎的视觉应用框架工作做同样的巨大数据块传输。

    除 IPC 之外、没有现成的 API 可供您使用。

    此致

    Tarun Mukesh

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

    尊敬的专家:

      我在 MCU1_0 区域的 DDR 中保留了一个段、即0xA020xxxx、并从映射文件中获取其地址。 然后在 main2_1内核中、我通过指针写入数据。 结果是、它只能写入值1~2次、然后 MCU1_0读取值不再更改。

    此外、我尝试了0x7004000、0xb0000000、结果是相同的。 无错误、但从 mcu1_0读取的值无更新。 而 main2_1每0.5秒更改一次字节0、1。

      

    [18:04:31.696]收←◆mcu1_0: 1-70000000...01 03 12 13 14 15 16
    [18:04:32.696]收←◆mcu1_0: 2-70000000...01 03 12 13 14 15 16
    [18:04:33.696]收←◆mcu1_0: 3-70000000...01 03 12 13 14 15 16
    [18:04:34.696]收←◆mcu1_0: 4-70000000...07 09 12 13 14 15 16
    [18:04:35.696]收←◆mcu1_0: 5-70000000...07 09 12 13 14 15 16
    [18:04:36.696]收←◆mcu1_0: 6-70000000...07 09 12 13 14 15 16
    [18:04:37.696]收←◆mcu1_0: 7-70000000...07 09 12 13 14 15 16
    [18:04:38.696]收←◆mcu1_0: 8-70000000...03 05 12 13 14 15 16
    [18:04:39.696]收←◆mcu1_0: 9-70000000...03 05 12 13 14 15 16
    [18:04:40.696]收←◆mcu1_0: 10-70000000...03 05 12 13 14 15 16
    [18:04:41.696]收←◆mcu1_0: 11-70000000...03 05 12 13 14 15 16
    [18:04:42.696]收←◆mcu1_0: 12-70000000...0B 0D 12 13 14 15 16
    [18:04:43.696]收←◆mcu1_0: 13-70000000...01 03 12 13 14 15 16
    [18:04:44.696]收←◆mcu1_0: 14-70000000...01 03 12 13 14 15 16
    [18:04:45.696]收←◆mcu1_0: 15-70000000...05 07 12 13 14 15 16
    [18:04:46.696]收←◆mcu1_0: 16-70000000...05 07 12 13 14 15 16
    [18:04:47.696]收←◆mcu1_0: 17-70000000...05 07 12 13 14 15 16
    [18:04:48.696]收←◆mcu1_0: 18-70000000...05 07 12 13 14 15 16
    [18:04:49.696]收←◆mcu1_0: 19-70000000...05 07 12 13 14 15 16
    [18:04:50.696]收←◆mcu1_0: 20-70000000...05 07 12 13 14 15 16
    [18:04:51.696]收←◆mcu1_0: 21-70000000...05 07 12 13 14 15 16
    [18:04:52.696]收←◆mcu1_0: 22-70000000...05 07 12 13 14 15 16
    

       我的问题是:

    1. 谁应该创建保留 RAM、 MCU1_0或 main2_1?

    2. 要配置 MPU 的文件是什么? 我`sdk_rtos_0900/vision_apps/platform/j721e/rtos/MCU2_1/j721e_mpu_cfg.c`、和其他 MPU 配置文件、都带有"

    CSL_ARM_R5_ACC_PERM_PRIV_USR_RD_WR'权限、  
    最新动态:
    3.我尝试了0xAA000000区域,该区域有效。 但 IPC 功能已经使用了这种 区域、它与之前的区域有何不同?

    谢谢。

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

    您好!

    've 在 MCU1_0 区域的 DDR 中保留一个段是0xA020xxxx、并从映射文件获取该段的地址。 然后在 main2_1内核中、我通过指针写入数据。 结果是、它只能写入值1~2次、然后 MCU1_0读取值不再更改。[/QUOT]

    您提到您已经预定了地址,请问您是如何预订的? 您如何确保在 MAIN2_1写入后从 MCU1_0读取、您是否实现了任何锁定机制。

    两个内核都应在各自的内核中保留存储器部分。

    我们通常有 r5_mpu_freertos.c 文件用于 FreeRTOS 配置。 您需要遵循有关如何  创建和使用0xAA000000的类似过程。

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您提到您已保留了地址,我可以知道您如何保留了一个部分吗? 您是如何确保在 MAIN2_1写入后从 MCU1_0中读取的、您是否实现了任何锁定机制。[/QUOT]

    目前、我从 MCU2_1分配空间、 目前、我已经将 DDR_MCU2_1区域的末尾改为共享存储器。

    sdk_rtos_0900/vision_apps/platform/j721e/rtos/mcu2_1/linker_mem_map.cmd
    
        DDR_MCU2_1               ( RWIX ) : ORIGIN = 0xA4100400 , LENGTH = 0x01EFEC00  // reduce 4K
    
        /* DDR for MCU2_1 share memory  */
        USS_MCU2_1                        : ORIGIN = 0xA5FFF000 , LENGTH = 0x01000
    
    
    
    sdk_rtos_0900/vision_apps/platform/j721e/rtos/mcu2_1/j721e_linker_freertos.cmd
        .uss_share         : {} align(4)       > USS_MCU2_1
    
    
    sdk_rtos_0900/vision_apps/platform/j721e/rtos/mcu2_1/main.c
       uint8_t  gUssSharedMem[128]  __attribute__((section(".uss_share") ))  = {0};

    对于数据同步、我没有实现它、因为我只在 mcu21中写入并在 mcu10  中读取、在 mcu21中、它每0.5秒写入 Seq 值、每1秒在 mcu10中读取一次 值正确与否并不重要、因为没有同步方法(可以稍后完成)、我需要注意的是如果在 mcu10中读取的值发生变化。  

     

    sdk_rtos_0900/vision_apps/platform/j721e/rtos/mcu2_1/main.c
    write data:
    
        uint8_t *pUss = &gUssSharedMem[0]; 
        while(1)
        {
            pUss[0] = idx;
            idx += 1;
            appLogWaitMsecs(500u);
        }
    
    read data:
    sdk_rtos_0900/mcusw/mcuss_demos/profiling/can/APA5/SystemFile/main_task.c
    
    volatile uint8_t  *ussRxbuf = (volatile uint8_t *)(0xa5fff000);
    void UPA_Task(void*  a0, void*  a1)
    {
        while(RunUPATask)
        {
            AppUtils_Printf(TRUE, "mcu1_0: %d-%08x...%02X %02X %02X %02X %02X %02X %02X\n", cnt,
            &ussRxbuf[0],
            ussRxbuf[0],ussRxbuf[1],ussRxbuf[2],ussRxbuf[3],ussRxbuf[4],ussRxbuf[5],ussRxbuf[6],ussRxbuf[7]
            );
            SemaphoreP_pend(UPAHande, 1000);
    
        }
    }

    我们通常有 用于 FreeRTOS 配置的 R5_MPU_FreeRTOS.c 文件。 您需要遵循有关如何  创建和使用0xAA000000的类似过程。

    如果数据未更改问题是缓存问题、是否还需要在 mcu21侧进行配置、 哪个文件是"sdk_rtos_0900/vision_apps/platform/j721e/rtos/mcu2_1/j721e_mpu_cfg.c"、  如何在 mcu10或 mcu21中确定 mpu 配置?

    谢谢。

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

    您好!

    在链接器文件中分配空间是可以的,但您需要在 MPU 配置文件中保留空间。

    [报价 userid="636604" url="~/support/processors-group/processors/f/processors-forum/1459661/tda4vm-transfer-data-between-main2_1-and-mcu1_0/5601463 #5601463"]sdk_rtos_0900/vision_apps/platform/j721e/rtos/mcu2_1/j721e_mpu_cfg.c

    在路径本身中、它称作 MCU2_1、这是在 MCU2_1上。

    同样、无论您在 MCU1_0上运行的是什么操作系统、都应该有 MPU 配置文件、该文件还应该包含相同的 MPU 配置。

    此类区域的示例为"0xAA000000 "。

    此致

    Tarun Mukesh