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.

[参考译文] TM4C1294NCPDT:串口转以太网转换器的竞态条件示例

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/614594/tm4c1294ncpdt-race-condition-with-serial-to-ethernet-converter-example

器件型号:TM4C1294NCPDT

您好!

这与使用 Tiva TM4C129控制器的串行转以太网转换器演示有关: http://www.ti.com/lit/ug/tidu951/tidu951.pdf

FreeRTOS 所使用软件架构的概述告诉我、串行任务和 TCP/IP 线程之间可能存在数据竞争条件/并发问题。 通过串行接收的数据正排队到 Ring 缓冲区中(使用'RingBuf'实用程序库)。 此 API 不支持线程安全、并且未使用 FreeRTOS API 来确保其周围的线程安全。  

这是问题吗? 例如、当以太网任务在使用 Ring 缓冲区 API 时被同时使用 Ring 缓冲区 API 的串行任务抢占时、是否会有未定义的行为?

我使用 EK-TM4C129XL 进行评估。

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

    问得非常好。

    在填充和清空环形缓冲区时、S2E 示例使用函数"RingBufWriteOne"和"RingBufReadOne"。 这些函数在更新索引时禁用中断。 因此抢占不应导致数据损坏。 可以通过使用 FreeRTOS API 来改进此实用程序、但我认为它可以满足您的需求。

    如果循环缓冲区的填充速度快于清空速度、则仍可能导致数据损坏。 这可以通过拥有足够大的环形缓冲器和更新任务释放缓冲器的频率来处理。

    谢谢、
    SAI