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.

[参考译文] RTOS/TDA2EVM5777:如何确保 System_BitstreamBuffer 上的数据写入完成

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/664659/rtos-tda2evm5777-how-to-ensure-data-write-completion-on-system_bitstreambuffer

器件型号:TDA2EVM5777

工具/软件:TI-RTOS

您好!

我们创建了一个从编码器链路接收数据的链路。
由于编码器链路在其输出队列中输出位流、因此我们在输入队列中使用 System_BitstreamBuffer。

在我们的链接中、当我们接收 system_CMD_new_data 时、我们从 System_BitstreamBuffer 获取数据指针地址和数据大小。
在我们将地址和大小传递给 NSP 以直接进行网络发送之前、这是有效的、数据似乎在 NSP 通过网络接口发送数据之前完全写入。

但是、现在我们需要在发送数据之前计算校验和。
问题是、System_BitstreamBuffer 在写入 system_CMD_new_data 时通知数据地址和数据大小、同时仍写入实际数据。

这会导致我们的校验和计算产生错误的结果。

请参阅下面的内存转储:

在 system_CMD_new_data 期间传输■数据

0000 00 00 01 21 9a 01 3a 74 41 D7 00 03 00
00 0010 03 00 03 00 03 00 03 00 03 00 03 00 00 03 00 03 00 03
00 03 00 03 0020 01 69 fc 5c 31 C2 5d 79 64 d0 C7 1a fe F8 0C
0030 E2 99 D4 df 83 EB EC 11 0A 51 79 26 E1 db 08 12
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

■传输到 NSP 后实际发送的数据

0000 00 00 01 21 9a 01 3a 74 41 D7 00 03 00
00 0010 03 00 03 00 03 00 03 00 03 00 03 00 00 03 00 03 00 03
00 03 00 03 0020 01 69 fc 5c 31 C2 5d 79 64 d0 C7 1a fe F8 0C
0030 E2 99 D4 df 83 EB EC 11 0A 51 79 26 E1 db 08 12
0040 D9 CD 6B a0 bc 10 39 E4 A5 E6 6B A3 E4 bb e8 7c
0050 C9 2b A8 96 44 42 80 3f 4e 8a 90 2e 6B 3b 45 1b
0060 D3 97 6d de 4c de B3 0f 99 96 0b 1a C6 AB 77 bb
0070 29 12 63 ee F5 C6 ae 3f 5b D8 f2 7b 4D F4 bf 5F
0080 d6 AC 44 BA 0A 2D A1 2e 2f 4e D9 54 a0 70 F5 dc
0090 3b B1 b9 15 1a B2 98 73 05 D4 53 C3 ff 21 2a 67 

由于我们需要等待完整数据才能计算正确的校验和、我们是否可以询问以下问题:
如何确保 System_BitstreamBuffer 上的写入完成?
您能提供正确的 API 吗? 我们尝试在 xCHM 中找到它、但找不到它?

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此问题通过刷新缓存并使其无效来解决。
    很明显、当数据从一个内核传递到另一个内核时、需要使用该数据。
    在上述讨论中、编码器链路位于 IPU1_0中、处理数据的链路位于 A15中。

    以下文档对此进行了说明:

    IPC 链接 API

    IPC 链接不会处理以下内容
    o 缓存对缓冲区内容的操作
    o 每个通过 CPU 将数据写入缓冲区的处理链路都应在将缓冲区指针传递到下一个链路之前将缓冲区的内容从高速缓存中清除
    o 每个通过 CPU 从缓冲区读取数据的处理链路都应在使用缓冲区之前使缓冲区的内容无效
    o 当 HWA 或 EDMA 生成/读取缓冲区数据时、处理链接不需要对缓冲区执行刷新/使操作无效
    o 由于 IPC 链接不提供此类信息、因此 IPC 链接不会接触缓冲区指向的数据、也不会对缓冲区指向的数据执行任何缓存操作
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Normal、

    是的、这是正确的 IPC 链接不处理缓存操作、甚至不知道缓冲区是否缓存。 IPC 链路仅向远程内核上的链路发送一个指针。 单个链路负责根据所获得的缓冲区执行缓存操作。

    此致、

    Brijesh