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.

[参考译文] AM2434:AM2434:INDUSTRIAL-COMMUNICATIONS-SDK - AM243X v11.x、EthertNet/IP、drv_uart.c 中的错误

Guru**** 2551110 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1570528/am2434-am2434-industrial-communications-sdk-am243x-v11-x-ethertnet-ip-bug-in-drv_uart-c

器件型号:AM2434


工具/软件:

您好:

我看到函数中有一个错误
void DRV_UART_printf (void * pContext、const char* pFormat、va_list arg);“
存在于中
“C:\ti\ind_comms_sdk_am243x_11_00_00_13\examples\industrial_comms\EtherNetIP_adapter_demo\drivers\uart\drv_uart.c“

临时缓冲区
“static char localString[256]={0};“
不能是静态的、因为许多 FreeRTOS 任务可以记录消息并重新写入此缓冲区中的数据!

它只是一个临时字符串输出缓冲区、因此在每次调用此函数时、应将其放置在堆栈(无静态)上:
“char localString[256];“ //建议
Profinet 示例。
但在 EtherNet/IP 预编译库 (FreeRTOS 任务名称“数据包“)中会出现堆栈问题。

请更正您的库和示例、以不重写记录的数据。

EtherNet/IP 解决方案错误、但连接了正确的 Profinet 解决方案。

此致、
维特·特里斯卡

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

    你好、Vit Triska、

    感谢您的反馈。 我们将在下一个版本中更正该变量声明。
    请详细说明您所说的话的含义:

    [引述 userid=“672045" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1570528/am2434-am2434-industrial-communications-sdk-am243x-v11-x-ethertnet-ip-bug-in-drv_uart-c

    但在 EtherNet/IP 预编译库 (FreeRTOS 任务名称“数据包“)中会出现堆栈问题。

    请更正您的库和示例、以不重写记录的数据。

    [/报价]

    由于此更改位于应用层、因此与预编译的库无关。

    此致、
    Pourya

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

    您好:

    „…μ s 由于这种更改是在应用层进行的、因此与预编译的库…无关。“

    不是真理。 应用非静态变量(应用层)。

    并对其进行测试–尝试通信(任何 EtherNet/IP PLC)、您将看到  μWink

     

    请注意 EtherNet/IP 预编译库 (FreeRTOS 任务名称“数据包“)中发生的堆栈问题。

     

    已记录的问题:
    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1570506/am2434-industrial-communications-sdk-am243x-v11-x-ethertnet-ip-unsufficient-stack-size

    此致、
    维特

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

    尊敬的 Vit:

    [引述 userid=“672045" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1570528/am2434-am2434-industrial-communications-sdk-am243x-v11-x-ethertnet-ip-bug-in-drv_uart-c/6047747

    不是真理。 应用非静态变量(应用层)。

    并对其进行测试–尝试通信(任何 EtherNet/IP PLC)、您将看到 

    [/报价]

    如前所述、预编译库对应用层没有任何依赖关系。 我最近测试过更正后的 UART 驱动程序、它能够正常工作、包括在与 PLC 通信以及交换 I/O 和显式消息时。 您能否提供有关您最终遇到的问题的具体详细信息?

    此致、
    Pourya

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

    drivers\uart\drv_uart.c
    在函数 DRV_UART_printf (...) 中

    /*static*/ char localString[256]={0}; //删除 static

    ——

    然后、任务“数据包“中的 FreeRTOS 堆栈溢出(由 EtherNet/IP 通信...创建)

    这是溢出之前的屏幕截图、剩余的 16 个字节非常少...

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

    好的、这是因为  OSAL_printf 的调用方没有足够的栈大小(在本例中为“数据包“任务)。  
    这与您的另一个问题有关、如果调用方任务的栈大小足够大、您就不会在 OSAL_printf 方面遇到问题。
    这意味着、printf 与预编译的栈无关、问题的根本原因是调用方没有足够的栈大小。

    此致、
    Pourya

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

    应用程序问题是从临时缓冲区中删除静态。

    没错、“数据包“任务需要具有更大的栈、但它的创建隐藏在 EtherNet/IP 预编译库中!

    因此、请解决这两个问题。

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

    尊敬的 Vit:  

    澄清了 UART 驱动程序问题后、我将关闭该问题、我们可以跟进另一个线程上的“数据包“任务问题。

    此致、
    Pourya