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**** 1825110 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 均被缓存。

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

有什么想法吗?

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

    您是否 从这2个函数中删除了 Hwip_disable

    uDMA_eventAllocResource
    uDMA_eventFreeResource

    谢谢

    Raste.

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

    Rasty、您好!

    据我所知。 我们未在测试应用程序中控制全局中断、这意味着这并未在我们的测试代码中删除 Hwip_disable 和 Hwip_enable。 正如 Ashwani 所说、我们减少了 TX ISR 和 RX ISR 例程的工作负载、并在任务中添加了这些功能。

    此致、

    S.Anil。

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

    你(们)好  

    我确定了 四 (4)个延迟来源

    1. isr 本身禁忌30-50 usec.

    2. udma_eventAllocResource 将中断锁定为8-9 μ s

    3.  uDMA_eventFreeResource  将中断锁定 7-8 us  

    4.缓存无效创建额外的 uncertanty 和我想使用非缓存内存的所有 DMA 缓冲区,描述符,帧等,并摆脱缓存无效。

    同时、我得到了  #1的某种解决方案建议。  

    2、3、4仍然开放、我们需要全部立即使用。

    是否有可能在验证为单个软件包/补丁后获得完整的解决方案?

    此致

    Raste.

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

    这意味着  

    • 使用 enet_lwip_cpsw_tcpserver 启动
    • 打开 SysConfig
    • 添加具有回调函数且 tick_period = 125us 的计时器实例

    在 main.c 文件中添加了以下回调函数:

    void timerTickIsr(void *args)
    {
        //2 From timer ISR give a semaphore to high priority task
        static uint32_t count =0;
        BaseType_t doTaskSwitch = 0;
        uint32_t current_count =0;
        static uint32_t end_count =0;
    
    
        static uint32_t StartCounter = 0;
    
        uint32_t IsrCurrTime_us = 0;
        uint32_t min_pos[LOOP_COUNT] = {0};
        static uint32_t max_pos[LOOP_COUNT] = {0};
        static uint32_t loop = 0;
    
        static uint32_t min_jitter[LOOP_COUNT] = {0};
        static uint32_t max_jitter[LOOP_COUNT]= {0};
    
        //SemaphoreP_post(&gBinarySem);
        current_count = CycleCounterP_getCount32();
        xSemaphoreGiveFromISR( gSem, &doTaskSwitch); /* wake up task */
        portYIELD_FROM_ISR( doTaskSwitch );
    
    
        IsrCurrTime_us =( (current_count - end_count) / 800U );
    
        if( IsrCurrTime_us < min_jitter[loop])
        {
            min_jitter[loop] = IsrCurrTime_us;
            min_pos[loop] = count;
            //MinJitter[count] = Jitter_CurrTime_us[count];
    
        }
    
        if( IsrCurrTime_us > max_jitter[loop])
        {
            max_jitter[loop] = IsrCurrTime_us;
            max_pos[loop] = count;
            //MaxJitter[count] = Jitter_CurrTime_us[count];
    
        }
    
        count++;
    
        if(count >= SAMPLE_COUNT)
        {
            count = 0;
        }
    
        if(loop > LOOP_COUNT)
        {
            loop = 0;
            count = 0;
        }
    
        end_count = current_count;
    
    }

    我的观察结果是、我们在125us 的间隔内收到了该回叫。

    但是,我的情况是大约125us + 30us ?

    此致

    Ashwani

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

    你好、 Ashwani

    我厌倦了 反复回答同一个问题。

    我们发现系统存在抖动。

    通过 由循环高优先级任务对 CPU 时间戳计数器进行采样、并由从计时器中断发出的信号量触发、可以测量抖动。  

    我们搜索 最短和最长的周期时间(最小值/最大值)、这反映了最坏的情况、而不是统计信息。

    您是否清楚这种衡量方法(是/否)?

    您是否同意此方法(是/否)?

     我在前面已经说明过4种延迟来源(之前任意多次)。

    您是否同意每4个(是/否)?

    我们需要任务抖动低于5us。 该归档是否可用于以太网流量(是/否)?

    谢谢

    Raste.

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

    我懂了。

    请忽略我最后的回复、因为我与 FreeRTOS ISR 抖动= 30-50us 相混淆。

    您是否清楚这一衡量方法(是/否)?

    我们有类似的设置、我们在此处输入的任何结果/观察结果都将显示在设置中。

    4. 高速缓存无效会创建其他无效、我希望为所有 DMA 缓冲区、描述符、帧等使用非缓存内存、并消除高速缓存无效。

    我们怀疑完全摆脱高速缓存无效,因为它是在驱动程序代码中处理。

    您是否清楚这一衡量方法(是/否)?

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

    *(* ENET_DMA_PKT_MEMPOL)

    数据包数据可以在非缓存存储器中移动。

    因为除了第4点之外、我们的结果相似。

    现在、我们仅致力于优化存储器放置。

    您的帖子。

    此致

    Ashwani

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

    因为除了第4点之外、我们的结果相似。

    现在、我们仅致力于优化存储器放置。

    [报价]

    我们将尝试将源缓冲区和目标缓冲区保持在非缓存模式。

    将这些缓冲存储器添加到 MPU 区设置中的非缓存存储器中。

    此致

    Ashwani

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

    是和否

    我们仍然不确定缓存、因为我们的分析表明、网络用例支持缓存。 这意味着、我们大多数时候都会看到缓存命中率。

    此致

    Ashwani

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们需要低于5微秒的任务抖动。 该归档是否可用于以太网流量(是/否)?

    在我们当前的 SDK 示例中、我们尚未看到该性能。

    但这并不意味着不可能。 客户需要根据其用例优化内存使用情况以获得性能。 我们有128K 的 TCM。

    您是否已尝试使用此内存来优化性能?

    如果是、您能提供详细信息吗?

    此致

    Ashwani

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

    你(们)好

    我们的用例:

    1.片上 RAM (~2MB)、支持实时、低抖动代码、最大延迟为5us

    2. DDR 适用于其他一切,比如 lwip,网络

    3.没有使用 TCM ,因为我们没有任何东西可以适应它。

    要点:

    当系统处于网络负载下时、从内部存储器运行的任务需要小于5us 的周期抖动、并使用内部存储器进行数据处理。

    我们没有达到它,因为(已经解释了很多次)

    a) DMA ISR 中的重处理(50-60usec)

    b)两个位置、禁用中断的时间为8-9微秒

    c)高速缓存无效、对抖动的贡献未知  

    谢谢

    生锈

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

    Rasty、您好!

    仅供参考,我们正在与开发团队密切合作 ,以解决您的所有问题。

    以下是当前状态更新:  

    1. ISR 本身贡献30-50 usec 和应用程序团队(Ashwani 给出了临时修复),同一补丁正在由开发团队审查,之后我们将 需要 额外的长期来测量网络统计的性能。

    2.我们已经确定了一些与 lwip 相关的服务/定期任务正在增加,导致更大的差异。 我们将对此进行研究、并尝试优化特定于 Servtronics 要求的示例。

    3.我们将审查整个代码,并列出关键部分的所有位置(不包括代码的 init seq 部分,而是代码的稳定状态)。

    我们将回顾这一点,并决定哪一个首先解决的伺服电子.

    4.不集中于缓存无效。  目前已取消优先级。

    我们 将  在3到4天内提出第2点和第3点的建议和解决方案

    此致、

    S.Anil。

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

    Rasty、您好!

    我们一直在进行不同的实现和测试以减少抖动。 下面汇总了我们在不同的@10Mbps 至20Mbps 以太网速度(在释放模式下的 O3优化应用中)下测试的内容。


    测试情况1 :在当前的 MCU+SDK 中,不应在轮询方法的 cpsw_enent_example 中调用 TX 和 RX ISR ,但这些函数仍在轮询实现中被调用。 一旦这个问题被解决、TX 和 RX ISR 函数就不再被调用、从而减少了中断和运行环境切换的数量。
    下面是补丁。 因此、Tx 和 Rx 处理问题已经得到修复。

    测试情况2: 我们已经确定了禁用全局中断的位置。 请查看以下详细信息:
    在第一组重点功能中、我们实现了互斥量、然后以不同的速度对其进行验证。 我们注意到我们仍然有~10个使用的抖动。

    我们禁用全局中断的 Total API:  

      我们 禁用 全局中断的第一组 API:  


    测试情况3: 我们也为下面的第二组函数实现了互斥量、但我们会看到因此而导致的以太网功能中断。 我们目前正在努力解决此问题、这应该会改善抖动。

    我们禁用全局中断的第二组 API:  


    实施问题:您提到、使用补丁可以获得5-7us 的抖动。
    1.您测试的以太网数据包速率是多少?
    2.您测试过此补丁多少小时? 我们可以在夜间测试中看到一些异常值。

    3.释放模式还是调试模式?

    修补程序详细信息:  

    e2e.ti.com/.../0001_2D00_remove_2D00_udma_2D00_tx_2D00_ISR_2D00_add_2D00_sem_2D00_protection_2D00_for_2D00_pbufQ.patch

    此致、

    Anil。

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

    你(们)好

    感谢您的更新

    1.非常慢的速率,交互式回端子(Putty)。 通过终端打印一些数据、文本屏幕很少。

    2.执行/不执行测试。 几分钟。

    3.所有驱动程序/TCPIP/DMA 均处于调试模式、仅 FreeRTOS 处于发布模式。 因为在发行时,如果我们用 gcc 编译,我们有非常奇怪的一面。

    谢谢

    Raste.

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

    我短暂 检查了这个补丁。 它将中断锁定替换为信标。 但不会减轻 ISR 的工作负载。

    对吗? 我该怎么做?

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

    Rasty、您好!

    我理解您的担忧。

    实际上、 如果您在释放模式下进行相同的测试、则与调试模式相比、您获得的抖动值可能更少、因为发布模式是优化的代码。

    目前、我们已对  TI Clang 编译器在发布模式下进行了测试。

    该补丁中有两个修复程序。 一种方法是使用信标替换全局中断。  

    另一个在 轮询模式下运行以太网。 在这种情况下、您的 TX ISR 和 RX ISR 将不会命中。

    在驱动程序中,我们已经禁用了 RX 和 TX ISR ,但不幸的是, TX ISR 正在进入当前的示例.

    我们添加了以下补丁来禁用 TX ISR、这也需要在 MCU+SDK 中修复、也需要在 未来版本中进行修复。  

    因为在发行版中、如果使用 gcc
    进行编译、我们就会遇到非常奇怪的副作用

    是否可以分享您在发布模式中遇到的问题、因为这些问题也应该在 GCC 编译器中解决?

    此致、

    Anil。

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

    您好!

    是否可以重新发布所有补丁?

    谢谢

    Raste.

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

    Rasty、您好!

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

    0001-remove-uDMA-TX-ISR-add-sem-protection-for-pbufQ.patch

    [报价]

    我已在上述消息中添加了补丁详细信息。

    您能否检查并确认您在访问时是否遇到任何问题?

    因为在发行版中,如果使用 gcc 编译,我们就会产生非常奇怪的副作用。

    我记得之前您遇到了 uDMA API 问题、该 API 应该返回64位值、但返回到32位。 因此、您遇到了 SCI 客户端错误。 由于该错误、您无法运行 以太网 示例。 因此、我假设由于此问题、您移至 GCC 的调试模式而不是发布模式。  

    除了上述问题之外、GCC 在发布模式下是否存在任何问题?

    此致、

    Anil。

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

    你(们)好

    我看到只有一(1)个路径用信标替换中断锁定、是否有另一个补丁可以减轻 ISR 的工作负担?

    如果我们使用版本编译、我们会看到奇怪/无法解释的崩溃。 最可能的情况是、这与外设存储器的无序访问(由于动态优化)有关。  

    Thansks

    Raste.

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

    Rasty、您好!

    我们没有卸载 ISR 工作、相反、我们已 更改为  在轮询模式下运行以太网示例。

    要在轮询模式下运行以太网、我们已在以下提交中添加了补丁。

    有关轮询模式的更多详细信息,请查看下面的提交和注释。

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

    我看到只有一(1)个路径用信标替换中断锁定、是否有另一个补丁可以减轻 ISR 的工作负担?

    [报价]

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

    目前、我们已对  TI Clang 编译器在发布模式下进行了测试。

    该补丁中有两个修复程序。 一种方法是使用信标替换全局中断。  

    另一个在 轮询模式下运行以太网。 在这种情况下、您的 TX ISR 和 RX ISR 将不会命中。

    在驱动程序中,我们已经禁用了 RX 和 TX ISR ,但不幸的是, TX ISR 正在进入当前的示例.

    我们添加了以下补丁来禁用 TX ISR、这也需要在 MCU+SDK 中修复、也需要在 未来版本中进行修复。  

    [报价]

    如果使用版本编译、我们会看到奇怪/无法解释的崩溃。 最可能的情况是、这与外设存储器的无序访问(由于动态优化)有关。  [报价]

    是的,这也需要在我们的一方检查,我们目前给予优先减少抖动一旦我们得到预期的抖动值,然后我们最终可以在 GCC 编译器中工作。

    此致、

    Anil。

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

    Rasty、

    仅供参考、我本周正在接受培训、您可能会在 IST 下午7点后收到我的回复。

    此致、

    Anil。

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

    你(们)好

    问题

    1. RX 路径是否也有类似的处理方法  (如 EnetDma_disableTxEvent(pInterface->HTX[txChIdIndex]->HCH)

    2.您所使用的 SDK 版本是什么?

    3.真正的投票在哪里? 我是否需要添加轮询代码/任务?  

    谢谢

    Raste.  

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

    嗨、Rasty、

    感谢您耐心的陪伴。 我们已经尝试并测试了流量和轮询/中断方法的多种组合。

    消息

    AM243x <=>TI-Network <=>Windows-PC

    同步

    iperf-2.1.5-win.exe -c 10.24.72.188 -b 10M -I 2 -t 0 -r

    iperf-2.1.5-win.exe -c 10.24.72.188 -b 20M -I 2 -t 0 -r

    测试用例   饱和最大值(5分钟测试持续时间) 全局最大值(30分钟测试持续时间) TCP 流量速率
    中断+ Tx、Rx ISR 卸载功能(类似于 RAST 补丁) 8us 以上 200us 以上 10k
    中断+ Tx、Rx ISR 卸载功能(类似于 RAST 补丁) 12us 以上 200us 以上 10米
    中断+ Tx、Rx ISR 卸载功能(类似于 RAST 补丁) 14us 以上 200us 以上 20米
    中断+ Tx、Rx ISR 卸载功能(类似于 RAST 补丁) 5-6 us 持续更新 无泵流量、但连接了网络电缆
    轮询+ Tx、Rx ISR 卸载函数+ Anil 的 DMA 优化 12US+ 200US+ 10米
    轮询+ Tx、Rx ISR 卸载功能+ Anil 的 DMA 工作区 15US+ 200US+ 20米
    开发团队的异常移除补丁 11us+ 155us+ 10米

    • 为了去除异常值、我们已经尝试了对我们这边的一些改变。 OUTLER 未延迟(现在将在1小时的测试中进行)、但未完全删除。

    后续步骤

    • 我们已经看到任务抖动随流量速率而变化。
      • 您能否提供您所需的流量的准确量化值。 我们将只使用它来运行和优化测试?
    • 我们将进行 Enet 性能分析- Anil 将对此进行更新。

    此致

    Ashwani

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

    Rasty、您好!

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

    1. RX 路径是否也有类似的处理方法  (如 EnetDma_disableTxEvent(pInterface->HTX[txChIdIndex]->HCH)

    [报价]

    在 MCU+SDK 中、该 RX 路径 已禁用。 它是从变量下的变量控制,再次,我们不需要单独为 RX  

    outArgs->disableEvent = true . 所以、我们没有禁用 Rx 路径。

    请查看下面的补丁。

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

    2.您所使用的 SDK 版本是什么?

    [报价]

    我们还使用 MCU+SDK 09.00版本。

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

    3.真正的投票在哪里? 我是否需要添加轮询代码/任务?  

    [报价]

    不需要、它已添加到示例中。

    以下任务用于轮询模式、您不需要创建新任务。

    LwipifEnetApp_rxPacketTask

    LwipifEnetApp_txPacketTask

    Ashwani 提到,类似于 Rasty Patch 意味着,我们已经添加了下面的更改。

    1.卸载 TX 和 RX ISR 在任务中根据标志工作。

    2.为4个 UDMA API 实现信号量锁定

    udma_queraw、udma_dequeraw、udma_eventAllocResource 和 udma_eventFreeResource  

    此致、

    Anil

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

    您好!

    没有特殊要求

    计算出来

    1.通过 TCP/IP 连接对状态进行定期轮询-每50 μ s 查询一次。   1 KB 左右的数据。

    2.通过 FTP 恢复几分钟检索文件(10 MB )。

    谢谢

    Raste.

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

    Rasty、您好!

    感谢您分享上述要求。

    我可以与内部团队核实您的要求、并告知您进一步的步骤。

    此致、

    Anil。

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

    嗨、Rasty、

    对于应用设计没有任何问题-

    1.

    1. 通过 TCP/IP 连接对状态进行 Peridic 轮询-每50 μ s 查询一次。  约 1 KB 的数据。

    这导致 TCP 数据吞吐量达到160+Mbps、每秒处理20000个数据包 在此数据包速率下、我们建议使用大得多的轮询间隔来启用批处理。

    您认为轮询间隔从50us 增加到毫秒级吗? 这将增加数据包延迟、但如果您的思想吞吐量较低(<10Mbps)、我们可以建议使用其他方法来尽可能减少延迟。 同时实现低延迟和高吞吐量是一项挑战。 请分享您的想法。 想法是-我们知道、高中断延迟仅在以太网流量中出现、因此我们正在尝试探索 LWIP 中影响这一点的选项。 因此、您的答案将有助于为以太网流量模式设置正确的预期。

    2.如何轮询 TCP 连接? 它是基于另一个计时器中断吗? 还是外部事件? 轮询连接的任务的相对优先级是多少?

    此致、

    Pradeep  

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

    您好!

    您问我的问题、但我希望实际上能够得到您的解答。

    我们可以 每1毫秒运行一次轮询(调用您建议的函数)以太网 RX/TX/DMA/ELSE 的线程。

    我们交换最多10 MB 的文件。 发送/接收时间不应超过几(2-3)秒、否则会刺激用户。

    我没有更多的补充。

    谢谢

    Raste.

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

    嗨、Rasty、

    这是我们的另一个更新.

    我们已经尝试并测试了将代码和数据放入不同存储器以及获取抖动值的多种组合。

    在我们的测试中、我们发现、当 SOC 在 DDR 上运行时、它会创建存储器存取 延迟、从而增加抖动。

    因此、我们尝试将整个代码放入 MSRAM 存储器中、在10Mbps 数据速率下且无通信时抖动几乎为5us。

    基于上述结果,我们需要处理以下两个任务。

    1. 我们应该在 MSRAM 中保留哪些 lwip 和 enet 函数,而不是保留整个代码。 我们知道、您的应用程序应该主要在 DDR 上运行。

    2.接下来,我们已经看到,在近1小时的运行,我们已经看到了一个峰值抖动值是近170usec 在10Mbps 数据速率.

    而且、我们正在努力解决上述两个问题。

    修补程序详细信息:  

    1.启用轮询模式,您已经  从上述回复中检查了此补丁。

    2.在 MSRAM 内存中保留代码。 请查看链接器文件以供参考。

    e2e.ti.com/.../3377.linker.cmd

    此致、

    Anil。

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

    你(们)好  

    我想您弄错了、或完全相反。

    实时应用、无论是代码还是数据、都转到 MSRAM (片上存储器)。 而 TCP/IP 堆栈、以太网驱动程序、DMA、缓冲区则进入 DDR。

    在这种情况下、我们预计 Network 不会显著减少实时通量。

    此致

    Raste.

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

    尊敬的  Anil:

       TI 是否可以尝试使用硬件计时器而不是 FreeRTOS 软件计时器来控制 ENET TX RX 的锁定?  

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

    可以从低优先级任务中执行 RX/TX 轮询。 无需中断和计时器。

    只是轮询和中间一些睡眠。

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

    Rasty、您好!

    下面是另一个更新。

    我们在测试中看到了两个问题。

    问题1. :  在轮询模式下、抖动值最大为10usec、数据速率为10Mbps。

    问题2. : 在轮询模式下、长期数据速率为10Mbps 时、抖动值最大为180usec。 (运行> 50 分钟)

    对于上述问题、 我们对每个任务以及 ISR 进入和退出时间进行了分析。

    我们发现、从任务到任务 切换 以及从 DDR 访问内存都造成了抖动。

    在我们的分析中、 ISR 结束到 T3 (抖动)任务开始时间之间的延迟从5usec 到10usec 不等。

    为降低延迟、我们已将 FreeRTOS 库添加到 MSRAM 中、并且在我们看到抖动差不多是平均值4.2use 后、将其添加到了一起

    6usec 为峰值,在50000 * 50个样本中,每个样本在125usec 数据(10Mbps)和输出数据。  

    我已按如下所示更新了链接器命令文件。  

    完成下面的软件更改后、我们修复了这个问题 问题1.  

    对于下面的更改、几乎占用~40KB 的 MSRAM 存储器。

    回答问题2 、我们已经看到任务3抖动任务缺失、实际上该任务应该达到大约125usec、但它没有达到125usec、并且我们没有找到该问题的根本原因、我们正在努力解决该问题。

    请查看 Excel 工作表文档以供参考。

    SECTIONS
    	{
    
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.text)
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.data)
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.bss)
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.rodata)
    	 } > MSRAM {} palign(8)
    
    

    e2e.ti.com/.../TestResults_5F00_withLoad.xlsx

    此致、

    Anil。

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

    感谢您的更新。

    下一步是什么?

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

    Rasty、您好!

    感谢您的帮助。

    1. 在您的用例中,可以使用~40KB MSRAM/TCM 消耗吗?

    2.是否可以在应用程序中集成上述更改、例如轮询模式和将 FreeRTOS 库移到 MSRAM、并查看应用程序中的抖动程度?

    3.正如我上面提到的,长期我们已经看到,由于我们正在获得峰值抖动值, T3任务缺失,我们将处理这个问题.

    此致、

    Anil。

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

    您好、Anil

    我们可以执行它(1和2)。

    您可以在一个帖子中摘要# 2的所有更改和链接吗?

    谢谢

    Raste.

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

    Rasty、您好!

    请参阅我已附加所有补丁详细信息。

    修补程序1:  将 FreeRTOS 库移至 MSRAM 内存。

    请仅在链接器 cmd 文件中集成以下更改、并且在我的测试设置中、我为不同的测试场景更新了链接器文件。

    修补程序详细信息:  

    SECTIONS
    	{
    
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.text)
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.data)
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.bss)
    
    	      -l "C:/ti/mcu_plus_sdk_am64x_09_00_00_35/source/kernel/freertos/lib/freertos.am64x.r5f.ti-arm-clang.release.lib" (.rodata)
    	 } > MSRAM {} palign(8)

    文件:  

    e2e.ti.com/.../5468.linker.cmd

    修补程序2: 在 pbuf 和 enet_queue.c 文件中用 mutex 替换 disable 和启用全局中断。

    已启用真轮询方法。

    文件:  

    e2e.ti.com/.../pbufQ.c

    e2e.ti.com/.../enet_5F00_udma_5F00_priv.c

    e2e.ti.com/.../enet_5F00_queue.c

     

    e2e.ti.com/.../lwip2enet.c

    e2e.ti.com/.../lwip2lwipif.c

    e2e.ti.com/.../enet_5F00_lwipif.c.xdt

    修补程序3:   在 udma_queraw 和 udma_dequeraw API 中使用 Mutex 替换禁用和启用全局中断  

    e2e.ti.com/.../udma.mutex.patch

    在我的测试设置中、我已通过 TI Clang 在发布模式下验证了它 。 如果您也在发布模式下执行此操作、这很好、因为实时我们仅使用发布版本。

    是的、我知道您在发布模式下遇到了一些优化级别的问题。

    下面是我从开发中获得的详细信息、我不确定您在测试设置中使用了哪些优化级别。

    这启用了 LTO、thumbmode、Oz 优化级别

     DEFINES_common := \
    -DSOC_AM243X \
    -DENET_ENABLE_PER_CPSW=1 \
    
    CFLAGS_common := \
    -mcpu=cortex-r5 \
    -mfloat-abi=hard \
    -mfpu=vfpv3-d16 \
    -mthumb \
    -Wall \
    -Werror \
    -g \
    -Wno-gnu-variable-sized-type-not-at-end \
    -Wno-unused-function \
    
    CFLAGS_release := \
    -Os \
    -Oz \
    -flto \
    
    
    CFLAGS_cpp_common := \
    -Wno-c99-designator \
    -Wno-extern-c-compat \
    -Wno-c++11-narrowing \
    -Wno-reorder-init-list \
    -Wno-deprecated-register \
    -Wno-writable-strings \
    -Wno-enum-compare \
    -Wno-reserved-user-defined-literal \
    -Wno-unused-const-variable \
    -x c++ \
    
    
    LFLAGS_common = \
    -Wl,--diag_suppress=10063 \
    -Wl,--ram_model \
    -Wl,--reread_libs \
    -Wl,--zero_init=on \
    -Wl,--use_memset=fast \
    -Wl,--use_memcpy=fast \
    
    LNKOPTFLAGS_release = \
    -mcpu=cortex-r5 \
    -mfloat-abi=hard \
    -mfpu=vfpv3-d16 \
    -mthumb \
    -Oz \
    -flto \

    此致、

    Anil。

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

    非常感谢。 我们将应用您的建议并告知结果。

    可能需要一些时间、这是由于团队需要承担的责任。

    此致

    Raste.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们将应用您的推荐并告知结果

    不用担心。 我们将等待您的结果。

    此致

    Ashwani

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

    嗨、Rasty、

    在您自行尝试时、我们是 AISO、正致力于深入解决该问题( 为什么我们从长期来看会获得 task_jitter 峰值 )

    总结

    1. 第一个疑问:
      1. 从长期来看、该问题可能与从 DMTIMER 生成中断有关。
        1. 为了确认这一点、我们 尝试使用 "PRU-IEP 计时器"来提供125us 的循环触发器。
        2. 但问题仍然存在(我们使用 PRU-IEP 触发器获得任务抖动的峰值)
    2. 第二个疑问:
      1. 我们可能错过了1个计时器中断、并且得到的值>(2 * interrupt_time_cycle)、即~250us
        1. 为确认这一点、我们在1次触发模式中尝试了 DMTIMER。
        2. 计算任务抖动后、我们将再次设置单触发计时器
        3. 因此、如果错过1个计时器触发器、那么抖动计算也应在之后停止
        4. 但问题仍然存在(我们正在单次触发模式下使用 DMTIMER 获取任务抖动的峰值)
    3. 以太网开发团队并行努力从根本上解决问题。

    此致

    Ashwani

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

    嗨、Rasty、

    [报价 userid="320995" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1326858/am243x-freertos-jitter/5326877 #5326877"]为什么我们长期获得 task_jitter 峰值

    我们根本造成 task_jitter 的峰值/异常值问题。

    1. 要使用的补丁
      1. cpsw_stats_interrupt_disable
      2. SYS_ARCH
    2. 然后构建库
      1. make -s -j4 makefile.am243x 库
    3. 然后构建并加载此示例、使其持续较长时间
    4. 启动 TCP 通信  
      1. Iperf -c -b 100m -t 2000
    5. 期望
      1. Task_jitter 现在不应有峰值/异常值。

    请告诉我您使用此补丁进行设置后得到的结果。

    此致

    Ashwani

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

     嗨、Rasty

    随附文档根据 TI 附带实验提供了建议。

    如果您有任何问题/疑虑/反馈、请告诉我?

    AM24 RTOS 抖动问题摘要

    此致

    Ashwani