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.

[参考译文] am243x FreeRTOS 抖动

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

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

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

你(们)好

我们在 FreeRTOS (Cortex R、内核0)中遇到无法解释的抖动。

测量方法:

  1. 500uS 的周期性中断
  2. ISR 向任务发布了一个二进制信标(最高优先级)
  3. 任务唤醒并对 CPU 时间戳计数器进行采样。

差异用于评估系统抖动。

简单示例、一项任务、2-5uS 内的抖动。 很好。

当我在软件中启用更多器件、再加上一些我无法解释的因素时、延迟似乎会增加。

不访问硬件。 低优先级任务定期唤醒、但不执行任何操作。

例如、  初始化网络代码和不初始化网络代码时的延迟存在很大差异。

如果没有初始化网络、在初始化网络的情况下、延迟/抖动为+/- 20us、但电缆断开(DMA 无中断)+/- 80us。

所有代码均从 DDR 运行、DDR 均被缓存。

高速缓存缺失可以解释这种行为吗?

有什么想法吗?

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

    嗨、Rasty、

    简而言之、由于运行的是 TCP/IP 网络堆栈等复杂的应用、这些行为是正常现象、因为您测量的延迟来自低优先级任务。 如果较高优先级任务的运行需要很长时间才能完成、那么低优先级任务的响应将被延迟。 这不是因为中断服务例程被延迟、而是因为低优先级任务的响应被延迟。

    减少延迟的一种方法是、将最常用的函数和数据放入 TCM 或 OCRAM 中而不是放入 DDR 中、从而减少较高优先级任务的执行时间。 当然、客户需要对其应用进行性能分析、以便了解要放入 TCM 和 OCRAM 等更快存储器中的函数和数据区域。

    当然、您也可以提高任务的优先级、因为它们需要很短的响应时间。

    只有32KB 程序缓存和32KB 数据缓存、因此当程序像 TCP/IP 网络堆栈一样复杂时、缓存缺失肯定会增加、因此较高优先级任务的执行时间也会增加。 因此、您希望在 TCM 或 OCRAM 中(而不是 DDR 中)放置最常用的函数和数据。

    此致、

    Ming

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

    您好!

    我想您并没有回答我的问题。

    我测量的响应 极好的 具有优先级的任务。 它抖动,尽管事实是存在的 没有 函数。

    我期望缓存重新填充会产生一些影响、但不会太高。

    谢谢

    Raste.

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

    嗨、Rasty、

    您是否有任何任务与测量响应延迟的任务具有相同的优先级?

    此致、

    Ming

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

    你(们)好

    任务具有最高优先级。 没有其他具有相同优先级的任务。

    Raste.

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

    嗨、Rasty、

    如果是这种情况、则延迟必须发生在与网络相关的 ISR 中。 您是否能够使用 CycleCounterP API 测量与网络相关的 ISR 所用的时间?

    此致、

    Ming

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

    您好!

    已拔下网络电缆、无 DMA 中断、已使用断点进行检查。

    谢谢

    Raste.

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

    我发现了实时问题的主要根源、但并非所有问题都存在。

    如何将以太网重新配置为在轮询模式、无 DMA、高速缓存无效和无中断的情况下工作?

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

    嗨、Rasty、

    由于这是有关以太网的问题、我会将您的主题转发给我们的 Ethernet-CPWS 专家、以获取进一步的帮助!

    此致、

    Ming

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

    嗨、Rasty

    是否可以共享我们可以在 EVM 上复制的测试?

    [报价 userid="359686" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1326858/am243x-freertos-jitter/5050392 #5050392"

    1.从该图中可以推断出是否存在可能影响性能的缓存失效 API? 我将尝试在呼叫跟踪中查看更多内容、但我希望这只是使特定缓存块失效、而不会影响高优先级任务的缓存能力。 (除非对于已缓存代码以执行高优先级任务的同一缓存行存在某种相互依赖关系)

    2.是否仅在发送/接收数据包时才进行此呼叫跟踪? 或者、即使在断开电缆时、此触发是否触发?

    3. R5F 寄存了哪些中断(并触发了哪些中断),它们的优先级是什么? 我看到一个500us 计时器中断和一个以太网中断(?)。

    此致

    Karan

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

    你(们)好

    1.我没有期待高速缓存无效,因为有一个选项为堆栈通过 MPU 定义非高速缓存内存。

    2.只需设置断点即可缓存失效功能并查看发生了什么。

    3.仅定时器中断和 DMA。

    是否可以切换到轮询模式?  

    谢谢

    Raste.  

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

    1. GCC 合规示例(非 TI CLANG)。

    2. Rasty 来分享在这里使用的 SDK 示例。 TI 重复使用该任务、并添加一个500us 计时器任务、以查看我们是否能够复制此问题。

    3. Rasty 评论什么是500us 计时器任务的优先级。

    是否可以切换到轮询模式?  [报价]

    4. TI 分享这方面的步骤。

    此致

    Karan

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

    你(们)好

    请说明所有这些问题与我的请求有何关联?

    ** 是否可以将以太网驱动程序/堆栈切换到轮询模式和/或消除高速缓存无效?

    计时器优先级无关紧要、因为问题通常在以太网堆栈初始化后系统运行缓慢、而网线为* 不是* 互联  

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

    Raste.

    根据我的笔记、您的请求是问题4的一部分。

    其他问题/意见将帮助我们调试该问题。

    此致

    Karan

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

    嗨、Rasty、

    有关轮询方法的实现、可以参考"enet_lwip_cpsw"示例。

    File:///C/C:/Repos/mcu_plus_sdk/docs/api_guide_am243x/EXAMPLES_ENET_LWIP_CPSW.html

    您能否分享您的测试示例来在我的设置中重现问题?

    此致

    Ashwani

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

    从3月7日开始的注释

    1. TCP/IP 对时间要求不高,可以在 DDR 中进行非缓存。 Ashwani (TI)、提供有关哪些缓冲区/代码可以放置在未缓存 DDR 中的详细信息。 此外还介绍了如何进行这些代码更改以更改存储器映射。

    步骤1。 仅将数据放在未缓存的 DDR 中。

    步骤2。 在未缓存的 DDR 中选择性地放置.text。

    此致

    Karan

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

    嗨、Rasty、

    很抱歉响应延迟。

    请按照以下文档了解延迟基准测试。

    www.ti.com/.../spracv1b.pdf

    请允许我留出更多时间进行内部同步并回复 您。

    此致、

    Ashwani

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

    你(们)好

    如何更改此参数(来自 SysConfig 生成的文件)

    /*! 简短的 RX 数据包任务堆栈大小*/
    #define LWIPIF_RX_PACKET_TASK_STACK (1024U)

    /*! 简明 TX 数据包任务堆栈大小*/
    #define LWIPIF_TX_PACKET_TASK_STACK (1024U)

    /*! 短链接状态轮询任务堆栈大小*/
    #if (_debug_=1)
    #define LWIPIF_POLL_task_stack (3072U)
    #else
    #define LWIPIF_POLL_task_stack (1024U)
    #endif

    谢谢

    Raste.

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

    您好、Karan

    我还没有回答这个问题。

    我尝试了 关注

    1.将 DDR (地址0x90000000)中的存储器区域定义为不可缓存(DDR_NC)

    2.将以下部分移到非可缓存区域

    DDR : origin = 0x80000000 , length = 0x10000000

    DDR_NC : origin = 0x90000000 , length = 0x10000000

    *(* ENET_DMA_DESC_MEMPOOL)
    *(* ENET_DMA_RING_MEMPOOL)
    /*#if (ENET_SYSCFG_PKT_POOL_ENABLE=1)*/
    *(* ENET_DMA_PKT_MEMPOOL)
    /*#endif*/
    }> DDR_NC

    .bss (NoLoad):align (128){*(ENET_DMA_OBJ_MEM)}> DDR_NC
    .bss (NoLoad):对齐(128){*(ENET_DMA_PKT_INFO_MEMPOOL)}> DDR_NC

    3.禁用高速缓存无效。

    一旦我禁用高速缓存无效,我得到非常奇怪的行为 堆栈

    需要帮助 将 DMA 缓冲区移动到非缓存存储器并摆脱缓存无效。

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

    我们无法完全摆脱高速缓存无效化、因为它是在驱动程序代码中处理的。

    DMA 描述符和 DMA 环存储器应始终被缓存。

    [报价 userid="359686" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1326858/am243x-freertos-jitter/5088559 #5088559"]ENET_DMA_OBJ_MEM)[/QUOT]

    这应该在缓存区中。

    [报价用户 id="359686" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1326858/am243x-freertos-jitter/5088559 #5088559"]ENET_DMA_PKT_MEMPOL[/QUOT]

    这与数据包有效载荷有关。 因此、可以根据用例缓存或取消缓存的存储器位置。

    此致

    Ashwani

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

    请说明为何应缓存。

    替代方案是什么? 您是否有无 DMA 的网络驱动程序? 轮询?

    谢谢

    生锈  

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

    如果要将 DMA 描述符和 DMA 环移动到未缓存的存储器中、则

    1那么、性能将会降低。

    2.您需要从驱动程序中删除高速缓存无效相关代码

    您是否有无 DMA 的网络驱动程序?

    我们不支持使用 ICSSG 的无 DMA 网络和使用1G 的 CPSW。

    此致
    Ashwani

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

    你能给我发送一个总和的地方,我必须改变,以摆脱高速缓存和无效?

    我问这个问题、因为我已经独立完成了这项工作、但堆栈不能很好地工作。 我可能错过了一些重要的东西。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何更改此参数(来自 SysConfig 生成的文件)

    SysConfig 生成文件后的链接。

    然后、您编辑文件。

    复制生成的文件并将其粘贴到示例/工程目录中。

    将 SysConfig 设置为不包含在编译中、然后编译工程。

    您能给我发送一份我必须更改的地方的总和、以摆脱高速缓存并使其失效吗?

    我们正在为此开展工作。

    此致

    Ashwani

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

    我有指示高速缓存无效并非全部。

    即使我注释高速缓存无效、我仍然有50微秒的 ISR jitter。 我觉得与 EtherNet/DMA 相关的东西会很长时间禁用中断、或者某些 ISR (例如 udma_eventIsrFxn)会花费很长时间。

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

    嗨、Rasty、

    您能帮助我详细说明在我的设置中重现问题的步骤吗?

    我将从 SDK 9.1开始。

    要使用哪个 SDK 示例?

    为了重现此问题、我需要在设置中添加设置以进行哪些本地更改?

    此致

    Ashwani

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

    您可以采用任何 TI TCP/IP 示例。

    协议栈

    1.添加周期计时器、例如125us

    2从计时器 ISR 中为 高优先级任务提供一个信标

    3、在任务中测量任务唤醒时间的差异。 查找最小值/最大值。

    4.在有和没有以太网流量的情况下重复此测试。

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

    你好 Ashwani ,

    在这里、我们可以将源缓冲区和目标缓冲区地址保存在非缓存存储器中。 因此、R5F 将在 DMA 完成后在没有 cache_invalidation 的情况下直接从目标缓冲区读取数据。 我认为这是可能的。

    即使我注释掉缓存无效、我仍然有50微秒的 ISR 抖动。 我的印象是、与 EtherNet/DMA 相关的东西会很 长时间禁用中断、或者某些 ISR (例如 UDMA_eventIsrFxn)会耗时很长。

    Rasty、

    请看下面的图片。 通常、当 DMA 开始操作时、我们禁用所有 中断、在 DMA 启动后、我们再次恢复中断。 这是操作、如下图所示。 我假设我们在以太网驱动程序中也使用相同的 uDMA API 来启动 DMA。 这可能会带来问题。

    此致、

    S.Anil。

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

    我们使用 udma+cpsw+lwip、因此我假设我们使用相同的 API。

    您会建议什么?

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

    Rasty、  我不熟悉工业协议、但大部分都是相同的 API udma_ringQueueRaw 该函数在整个 MCU+SDK 中用于启动 DMA。

    此外、我们需要检查您的应用中使用的外设。 因为、在某些关键操作后、我们将执行相同的中断禁用或恢复操作。  如果您分享有关应用中使用的外设的所有详细信息、则进一步调试该问题非常有用。

    [报价 userid="359686" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1326858/am243x-freertos-jitter/5090169 #5090169"]

    我们使用 udma+cpsw+lwip、因此我假设我们使用相同的 API。

    [报价]

    我的假设也是一样的。

    Ashwani ,您可以在这里确认吗?

    此致、

    S.Anil。

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

    它不是工业协议。  基于 TI 示例的以太网 TCP/IP。

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

    一般而言、我不会介绍为什么 TI 驱动程序 在没有任何包装程序的情况下使用 Hwip_disable、而这些包装程序只允许禁用 选定的外设中断。

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

    我们使用的是行#1380

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    通常情况下、我并不理解为什么 TI 驱动程序 在没有任何只允许禁用 选定外设中断的包装程序的情况下使用 Hwip_disable。

    要使任何原子操作发生、需要禁用全局中断。

    此致

    Karan

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

    我进行了一些测量

    Enqueue和 Dequeue 会导致8和9 uSecs 相互抖动。

    udma_eventIsrFxn tooks 54 uSecs (!)。

    在我看来,这是设计缺陷。

    ISR 不应执行此类主要工作-必须进行线程化、工作应在任务不是 ISR 中完成。

    在这种情况下、您不需要全局禁用中断、就足够 有互斥量了。

    在任何情况下、我没有看到全局禁用中断的原因、软件应仅屏蔽 DMA 中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="320995" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1326858/am243x-freertos-jitter/5059639 #5059639"]

    有关轮询方法的实现、可以参考"enet_lwip_cpsw"示例。

    File:///C/C:/Repos/mcu_plus_sdk/docs/api_guide_am243x/EXAMPLES_ENET_LWIP_CPSW.html

    [报价]

    嗨、Rasty、

    您可以使用上述示例作为轮询方法的参考。

    在轮询模式下、应用程序可以定期调用 EnetDma_RETRIEV* API 来获得 TX 自由和 RX 完整数据包。

    下面的代码片段显示了接收操作的轮询模式用法。 周期性任务从 Enet DMA 检索数据包并定期将其传递到处理堆栈。

    void EnetApp_periodicTask(void)
    {
        /* Receive packets from DMA */
        while (true)
        {
            status = EnetDma_retrieveRxPktQ(hRxCh, pRetrieveQ);
            /* Processes the received packets and enqueues into freeQ */
            process(pRetrieveQ);
            status = EnetDma_submitRxPktQ(hRxCh, pFreeQ);
     
            sleep(100);
        }
    }

    对于 TX、轮询可用于检索传输完成的数据包。  

    void EnetApp_sendPkt(void)
    {
        /* Submit TX ready packets for transmission */
        status = EnetDma_submitTxPktQ(hTxCh, pSubmitQ);
    }
     
    void EnetApp_periodicTask(void)
    {
        /* Retrieve free TX packets from DMA */
        while (true)
        {
            sleep (100);
     
            status = EnetDma_retrieveTxPktQ(hTxCh, pRetrieveQ);
        }
    }

    此致

    Ashwani

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

    来自今天会议的操作项目:

    1. 如果 UDMA 的 ringQueueRaw callbalk 实际上需要全局中断、则禁用。
    2. 从 Rasty with SDK 的 Enet TCP 服务器示例复制测试设置并测量抖动。
    3. 与 Enet 团队合作、讨论是否可以优化存储器放置
      1. 从而使放大器的增益降低
    4. 以上是 TI-ARM CLANG -03优化、之后移至 GCC。

    此致

    Ashwani

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="359686" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1326858/am243x-freertos-jitter/5090151 #5090151"]在任务中测量任务唤醒时间的差异。 [报价]

    您要使用哪个 API 来获取此值?

    此致

    Ashwani

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

     CycleCounterP_getCount32 ()

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

    嗨、Rasty、

    要在我的设置中重现此问题、请执行以下步骤

    1. 使用 enet_cpsw_tcpserver 示例 SDK 9.1开始
    2. 打开 SysConfig  
      1. 添加了具有125us 节拍和"timerTickIsr"的计时器
      2. 添加了 GTC 以获取时间戳的节拍计数
    3. 更改 main.c 文件
      1. 添加了具有优先级 MAIN_task_PRI-2的"TIMER_TASK"
      2. 添加了 具有优先级 MAIN_task_PRI 的 jitter_task
      3. 将 FreeRTOS_MAIN 的优先级降低到 MAIN_task_PRI-1
      4. 添加了信号量以同步计时器 ISR 和抖动计算
      5. 此处是更新后的 main.c 文件
      6.  /cfs-file/__key/communityserver-discussions-components-files/81/5037.main.c
    4. 在 app_main.c 文件中进行了如下更改
      1. 注释掉了以太网相关代码
      2. 这里是更新文件
      3. /cfs-file/__key/communityserver-discussions-components-files/81/app_5F00_main_5F00_without_5F00_ethernet.c

    请查看更改并告诉我这些更改是否可以在我的电路板上重现您的设置?

    后续步骤:


    1.通过启用以太网代码获取抖动值

    2.在禁用以太网代码的情况下获取抖动值

    此致

    Ashwani

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

    任务应如所示。

    您不能从此任务打印消息。

    Volatile uint32_t _diffCounterMax=0 

    void empty_hop2 (void * args)__attribute__((section ("critical_text_section1"))

    uint32_t endCounter、diffCounter;
    startCounter = CycleCounterP_getCount32 ();
    while (1)

    xSemaphoreTake (Sem、portMAX_delay);/*等待从 TimeTick 唤醒*/
    endCounter = CycleCounterP_getCount32 ();
    diffCounter = endCounter - startCounter;
    if (diffCounter >_diffCounterMax)
    _diffCounterMax = diffCounter ;
    startCounter = endCounter;
    }
    }

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

    嗨 ,

    昨天,我离开了办公室。

    此处是更新的 main.c 文件、而 app_main.c 文件与之前共享的文件相同(不包括以太网代码)

    /cfs-file/__key/communityserver-discussions-components-files/81/4064.main.c

    我们创建了3个任务  

    计时器 ISR 触发器=>任务1:主任务向=>任务 2:空任务向=>任务3:抖动任务

    我在此测试中看到~1us 抖动。

    现在、你希望我在哪里添加/启用以太网代码(任务1、任务2或任务3)并通过启用以太网来获取新的抖动值?

    很好

    此致

    Ashwani

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

    DMA 驱动程序的建议补丁方法。

    e2e.ti.com/.../0001_2D00_1._2D00_Threaded_2D00_DMA_2D00_interrupt.patch.txt

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

    嗨、Rasty、

    更新:

    实验_1:

    4个任务正在运行(EMPTY_P2、Ethernet_P2、Main_P2、Jitter_P1)+ 125-US-ISR

    持续时间:10分钟

    最大抖动计算 w、r、t、125us、如下所示:

    实验2:

    3个任务正在运行(EMPTY_P2、Ethernet_P2、Main_P2、Jitter_P1)+  125-US-ISR

    持续时间:10分钟

    最大抖动计算 w、r、t、125us、如下所示:

    下一步

    1. 长时间运行此测试并获取抖动值。
    2. 端口并使用 GCC 运行此示例

    如果您在此处有任何输入、请告诉我吗?

    问题

    1. 您对以太网 Tx 流量的规划(以每秒的数据包数为单位)
    2. 您对以太网 Rx 流量(以每秒的数据包数为单位)的规划是什么
    3. 可容忍的数据包延迟是什么

    我们将根据您的输入调整 示例设置。

    此致

    Ashwani

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

    你好、Ashwani

    不需要以太网流量、尽最大努力。

    在最大以太网负载下预期高优先级任务抖动低至5 μ s。 TCP/IP 通信可能较慢、但不允许连接中断。

    此致

    Raste.  

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

    嗨、Rasty、

    更新: 长时间运行此测试并获取抖动值。

    实验_1:

    4个任务正在运行(EMPTY_P2、Ethernet_P2、Main_P2、Jitter_P1)+ 125-US-ISR

    持续时间:60分钟

    最大抖动计算 w、r、t、125us、如下所示:

    实验2:

    3个任务正在运行(EMPTY_P2、Ethernet_P2、Main_P2、Jitter_P1)+  125-US-ISR

    持续时间:10分钟

    最大抖动计算 w、r、t、125us、如下所示:

    下一步

    1. Re -在连接以太网电缆的情况下运行上述实验。
    2. 移植并使用 GCC 运行此示例、然后重新运行上述实验以查看 GCC 的效果
    3. 添加您的 DMA 补丁并重新运行上述实验。

    如果您在此处有任何输入、请告诉我吗?

    未连接以太网电缆时会产生这些结果。

    +/- 80 usec.

    连接以太网电缆时、您会看到此抖动?

    我 在未连接以太网电缆的情况下没有看到以下函数命中。

    void EnetUdma_txCqIsr (Udma_Event le hUdmaEvt、
    uint32_t eventType、
    空*应用数据)

    此致

    Ashwani

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

    请使用以太网电缆和一些 TCP/IP 流量运行。

    在未插入以太网电缆的情况下进行测试没有意义。

    我的输入是:25us 的抖动是不可接受的、需要加以解决。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请使用以太网线缆和部分 TCP/IP 流量运行。

    感谢 Rasty 确认。

    在连接以太网电缆的情况下进行上述 Re 运行实验。

    我们会在稳态下(也是1-2个异常值)看到相同的15-25us 抖动。

    后续步骤

    1. 移植并使用 GCC 运行此示例、然后重新运行上述实验以查看 GCC 的效果
    2. 添加您的 DMA 补丁并重新运行上述实验。

    此致

    Ashwani

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

    嗨、Rasty、

    1. 我们将数据包处理移动到了一个函数中、该函数从具有以太网活动的任务中调用。
    2. void txpacket_processing (void)添加到"C:\ti\mcu_plus_sdk_am64x_09_00_00_35\source\networking\enet\core\dma\udma>.\enet_udma_priv.c src "
    3. 在 app_main.c 中更新了 int ethernet_main (void * args)
    请按如下所示查找补丁
    完成上述更改后、任务抖动得到改善。
    下面显示了在 jitter_task()中测量的时间戳的屏幕截图。
    抖动将为(Vaue - 125us)
    例如145 - 125

    您能否更改设置并提供更新的结果?

    此致

    Ashwani

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

    你好、 Ashwani

    使用我的补丁我存档低得多的抖动- 5-7 uSecs

    20us 的抖动并不是我们所期望的。

    我看到您仅通过标志和轮询来处理 TX 路径、RX 是什么?

    生锈

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

    我们在 Rx 端也添加了与此补丁相同的功能。

    /cfs-file/__key/communityserver-discussions-components-files/81/enet_5F00_udma_5F00_priv_5F00_tx_5F00_rx.patch

    驱动程序构建成功。
    C:\ti\mcu_plus_sdk_am64x_09_00_00_35\source\networking\enet>gmake -s -f .\makefile.cpsw.am64x.r5f.ti-arm-clang profile=debug

    我们看到任务抖动~15us。

    以下是应用端的更改:

    注释


    在我们的设置中、未禁用全局中断。

    此致

    Ashwani