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.

[参考译文] LP-AM263:DNS 断言

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1240483/lp-am263-dns-assertion

器件型号:LP-AM263

您好!
我正使用以太网和 LWIP 与电路板进行通信、并尝试以32次(1us - 30ms)的频率测量 ADC。 我正在使用 RTI 计时器来触发转换开始、并在转换结束时触发的 ISR 中读取结果。 并得到了 DNS 问题(请参阅附件)



1.从 RTI 计时器触发 ADC SoC 的好方法吗?
2. 如何检查任务饥饿? 我假设 RTI 和 ISR 不执行 DNS 任务、此时会触发软件计时器、进而导致断言。
3.如果您有其他建议,请告诉。



此致!

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

    尊敬的 Oleg:

    首先、回答您的问题:

    可以、从 RTI 计时器触发 ADC SoC 是完全正常的。

    2. DNS 任务可能因为低优先级而无法执行,我们可以在澄清后再讨论。

    您能 回答几个问题以进一步澄清吗、它将帮助我们为您提供更好的支持。

    问题1: 您能否共享中断配置、即转换完成后生成的中断?

    问题2. 您能否简单解释一下测量 ADC 频率32次是什么意思?

     此处的配置可能导致高延迟、并且不断发出中断、这将剥夺 DNS 任务。

    此外、如果可能、您能否共享您的源代码/项目、我们可以在最后用于调试。

    此致、
    Shaunak

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

    尊敬的 Oleg:

    我还想了解传递给 DNS 函数的确切参数是什么。 我想你在打电话  dns_gethostbyname()  停止。

    此致、
    Shaunak

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

    实际上、我不会调用 dns_gethostbyname() 传递函数、至少是直接传递。

    调用堆栈:

    在函数 DNS_CHECK_ENTRY 中生效:

    生效时间  默认值 分支(未知项->状态):  

    函数中的变量:

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

    问题1: 您能否共享中断配置、即转换完成后生成的中断?

    [/报价]

    a. RTI 计时器配置:

    //setup SoC by RTI trigger
    
        /* ADC Interrupt Configuration */
        /* Enables an ADC interrupt source. */
        ADC_enableInterrupt(ADC_baseAddr, ADC_INT_NUMBER2);
        /* Sets the source EOC for an analog-to-digital converter interrupt. */
        ADC_setInterruptSource(ADC_baseAddr, ADC_INT_NUMBER2, ADC_SOCNumber);
        /* Enables continuous mode for an ADC interrupt. */
        ADC_disableContinuousMode(ADC_baseAddr, ADC_INT_NUMBER2);
    
        /* use RTI as trigger of start of conversion */
        ADC_setupSOC(ADC_baseAddr, ADC_SOCNumber, ADC_TRIGGER_RTI1, ADC_channel, 16);
        /* Configures the interrupt SOC trigger of an SOC. */
    
    
    //////////////////////////////////////////////
    
    
        TimerP_Params_init(&timerParams);
        timerParams.periodInUsec   = 0;
        timerParams.periodInNsec   = interval_ns; // 30 ms - 1.1 us
    
        TimerP_setup(gTimerBaseAddr[CONFIG_TIMER_AI_MON], &timerParams);

    b.将会生成 EOC 的寄存器中断

        /* Register & enable interrupt */
        HwiP_Params_init(&hwiPrms);
        hwiPrms.intNum   = CSLR_R5FSS0_CORE0_CONTROLSS_INTRXBAR0_OUT_0;
        hwiPrms.callback = &AI_mon_ISR;
        hwiPrms.isPulse  = 1;
        status = HwiP_construct(&gAI_mon.obj, &hwiPrms);
        DebugP_assert(status == SystemP_SUCCESS);
    
        status = SemaphoreP_constructBinary(&gAI_mon.BinSem, 0);
        DebugP_assert(SystemP_SUCCESS == status);

    ISR:

    static void AI_mon_ISR(void *args)
    {
        if (gAI_mon.i < 32)
        {
            /* Store result */
            gAI_mon.ADC_result_buf[gAI_mon.i] = ADC_readResult(ADC_resultBase, ADC_SOCNumber);
            ++(gAI_mon.i);
    
            ADC_clearInterruptStatus(ADC_baseAddr, ADC_INT_NUMBER2);
            if(ADC_getInterruptOverflowStatus(ADC_baseAddr, ADC_INT_NUMBER2))
            {
                ADC_clearInterruptOverflowStatus(ADC_baseAddr, ADC_INT_NUMBER2);
            }
        }
        else if (gAI_mon.i == 32)
        {
            TimerP_stop(gTimerBaseAddr[CONFIG_TIMER_AI_MON]);
            
            /* buffer filled, stop */
            SemaphoreP_post(&gAI_mon.BinSem);
            ++(gAI_mon.i);
        }
    }

    问题2. 您能否简单解释一下测量 ADC 频率32次是什么意思?

    [/报价]

    我需要连续32次严格周期性测量 ADC 值。 当第32个周期完成后、停止计时器、并等待下一条命令处理再次开始测量 ADC 的请求。


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

    尊敬的 Oleg:

    您是否能够共享您的项目(以 ZIP 文件的形式)? 这将使我们更容易进行调试并找出问题的根源。 我想详细了解以太网通信端及其确切用途。

    此致、
    Shaunak

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

    很遗憾、我无权共享该代码。 我们可以启动调试会话吗?

    此致!

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

    尊敬的 Oleg:

    具体而言、您的用例需要哪些 DNS 功能?

    此致、

    Shaunak

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

    具体而言、您的用例需要哪些 DNS 功能?

    [/报价]

    你好,Shaunak!
    实际上、我不需要 DNS 的任何功能、如果存在正确的方式来禁用它而不产生任何后果、请告诉我。

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

    尊敬的 Oleg:

    问题1: 您在 SDK 中使用/开发项目的示例是什么? 基于此、我可以帮助您禁用 DNS

    问题2. 您是否在项目中使用 LwIP 功能?

    如果您使用任何基于 LwIP 的示例、将有一个名为"lwipcfg.h"的文件、您可以通过将宏设置为0来禁用 DNS 功能

    此致、

    Shaunak

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

    请您写一封电子邮件、我会将代码部分发送给

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

    1. mcu_plus_sdk_am263x_08_05_00_24
    2.是

    我将检查您的解决方案。

    谢谢!

    UPD:文件`lwipcfg.h`在 MCU_PLUS_SDK_am263x_08_05_00_24中不存在

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

    尊敬的 Oleg:

    什么 示例  您正在使用 MCU_PLUS_SDK_am263x_08_05_00_24中的哪些器件? 您可以在 LwIP 库中进行以下更改并重新编译 LwIP 库、重新编译示例

    第1步:在  文件:  MCU_PLUS_SDK_08_05_00_24/source/networking/lwip/am263x/ lwipopts.h

    第2步:  在 行:87处、设置宏 LWIP_DNS 设为0

    第3步:  重新编译 LwIP 库。

    gmake -sj -f makefile.am263x lwip-freertos_r5f.ti-arm-clang
    gmake -sj -f makefile.am263x lwip-contrib-freertos_r5f.ti-arm-clang
    gmake -sj -f makefile.am263x lwipif-cpsw-freertos_r5f.ti-arm-clang

    第4步:  重新编译代码(您正在处理的示例)

    此致、
    Shaunak

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

    你好,Shaunak!
    很遗憾、修复没有帮助。
    我得到另一个断言失败:
    source/networking/lwip/lwip-stack/src/core/udp.c:1185:

    此致!

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

    您好、请分享应用的调用堆栈。

    请在上面放置一个断点  udp_删除  函数时、此处的问题是将 NULL PCB 传递到 udp_remove 函数、PCB 基本上已经为 NULL、无法删除。 此外、如果您能解释您想要具体使用哪些 LwIP 功能、会有所帮助。

    此致、

    Shaunak

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

    大家好、Shaunak!
    随调用堆栈提供了屏幕截图。


    此致!

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

    尊敬的 Oleg:

    为 DNS 进行的函数调用来自 Lwip-stack 中的 dns.c 文件。 仅当我们启用 DNS 功能时、才会编译这些函数。

    在我的上述答复中,我们已将 LWIP_dnos 设为0,禁用了 DNS 功能。 因此、nsds_tmr 不应被调用。

    1.您能否重新检查您的  lwipopts.h  文件、确保它已

    #定义 LWIP_DNS 0

    2.然后重新编译 Lwip 库和应用程序。

    您能完成上述操作吗?如果您仍遇到任何问题、请联系我。

    此致、

    Shaunak

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

    大家好、Shaunak!
    我使用调试库、需要在编译中添加"profile=debug"。

    PROFILE=debug gmake -sj -f makefile.am263x lwip-freertos_r5f.ti-arm-clang
    PROFILE=debug gmake -sj -f makefile.am263x lwip-contrib-freertos_r5f.ti-arm-clang
    PROFILE=debug gmake -sj -f makefile.am263x lwipif-cpsw-freertos_r5f.ti-arm-clang

    乍一看、DNS 已成功禁用、我看不到 DNS 断言问题。

    我将更深入地重新测试它、并解决票证。

    感谢您的帮助!