关于TC387移植FreeRTOS后,以太网接口发不出报文

Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

tianxiny816_0-1705652896749.png

 

调试以太网接口时加FreeRTOS时,出现若是在HighTEC点击运行程序能够周期性的发出以太网报文,但下电再上电全速运行后以太网报文一直发不出来,停留在IfxGeth_Eth_waitTransmitBuffer函数中, 是什么原因导致出现这个情况?(建立任何操作系统的任务,只是单纯的移植到TC387的工程中)

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/%E5%85%B3%E4%BA%8ETC387%E7%A7%BB%E6%A4%8DFreeRTOS%E5%90%8E-%E4%BB%A5%E5%A4%AA%E7%BD%91%E6%8E%A5%E5%8F%A3%E5%8F%91%E4%B8%8D%E5%87%BA%E6%8A%A5%E6%96%87/td-p/679825

0 件の賞賛
10 返答(返信)
Translation_Bot
Community Manager
Community Manager
Community Manager

你好,

请提供下你的示例程序,帮助我们分析,谢谢

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/%E5%85%B3%E4%BA%8ETC387%E7%A7%BB%E6%A4%8DFreeRTOS%E5%90%8E-%E4%BB%A5%E5%A4%AA%E7%BD%91%E6%8E%A5%E5%8F%A3%E5%8F%91%E4%B8%8D%E5%87%BA%E6%8A%A5%E6%96%87/m-p/679848

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

这个函数的意思是发送缓冲为空,函数 IfxGeth_Eth_getTransmitBuffer 用于获取与特定 DMA 通道 (channelId) 关联的传输缓冲区。它检查传输描述符中的所有权位 (OWN),以确定缓冲区是否可用。如果 OWN 位已设置(即 descr->TDES3.R.OWN == 1),则表示 DMA 引擎当前拥有描述符和缓冲区。在这种情况下,缓冲区对 CPU 不可用,直到 DMA 引擎释放拥有权。因为不了解你的系统,你可以尝试精简你的代码,先不使用FreeRTOS,仅使用Eth,然后逐步增加你需要的代码,确认是哪部分代码影响到了OWN位。

 

IFX_INLINE void *IfxGeth_Eth_waitTransmitBuffer(IfxGeth_Eth *geth, IfxGeth_TxDmaChannel channelId)
{
    void *tx;

    do
    {
        tx = IfxGeth_Eth_getTransmitBuffer(geth, channelId);
    } while (tx == NULL_PTR);

    return tx;
}

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/%E5%85%B3%E4%BA%8ETC387%E7%A7%BB%E6%A4%8DFreeRTOS%E5%90%8E-%E4%BB%A5%E5%A4%AA%E7%BD%91%E6%8E%A5%E5%8F%A3%E5%8F%91%E4%B8%8D%E5%87%BA%E6%8A%A5%E6%96%87/m-p/679883

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

不使用FreeRTOS,TC387掉电重启是能够发出以太网报文的,我根据github上下载的TC397例程中的FreeRTOS移植到TC387的,同时我也有尝试将ADS中TC375的例程里的FreeRTOS移植到TC387中,效果都是一样的,即单步调试时能够发出以太网报文,一旦不是单步运行就不能发出以太网报文了。PHY芯片使用的是DP83TC811。代码因公司电脑加密无法外发。

tianxiny816_0-1705911149411.png

tianxiny816_1-1705911494394.png

 

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/%E5%85%B3%E4%BA%8ETC387%E7%A7%BB%E6%A4%8DFreeRTOS%E5%90%8E-%E4%BB%A5%E5%A4%AA%E7%BD%91%E6%8E%A5%E5%8F%A3%E5%8F%91%E4%B8%8D%E5%87%BA%E6%8A%A5%E6%96%87/m-p/680583

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

请问您有TC397的TRIBOARD吗?可以在这个上面测试一下,看是否是移植的问题。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/%E5%85%B3%E4%BA%8ETC387%E7%A7%BB%E6%A4%8DFreeRTOS%E5%90%8E-%E4%BB%A5%E5%A4%AA%E7%BD%91%E6%8E%A5%E5%8F%A3%E5%8F%91%E4%B8%8D%E5%87%BA%E6%8A%A5%E6%96%87/m-p/680591

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

我没有TC397的板子。目前监测是一直卡在这个OWN的地方。如果是移植的问题,为什么用HighTEC的Start Pragram就能够发出报文,只要下电再上电就检测到OWN不为0。

tianxiny816_1-1705911816186.png

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/%E5%85%B3%E4%BA%8ETC387%E7%A7%BB%E6%A4%8DFreeRTOS%E5%90%8E-%E4%BB%A5%E5%A4%AA%E7%BD%91%E6%8E%A5%E5%8F%A3%E5%8F%91%E4%B8%8D%E5%87%BA%E6%8A%A5%E6%96%87/m-p/680597

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

如果一个任务获取了传输缓冲区并且 OWN 位被设置,这可能意味着缓冲区当前由 DMA 引擎拥有,对于 CPU 不可用。可以试着把"初始化ETH,发送FRAME"都在一个TASK中,避免多个TASK互相干扰。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/%E5%85%B3%E4%BA%8ETC387%E7%A7%BB%E6%A4%8DFreeRTOS%E5%90%8E-%E4%BB%A5%E5%A4%AA%E7%BD%91%E6%8E%A5%E5%8F%A3%E5%8F%91%E4%B8%8D%E5%87%BA%E6%8A%A5%E6%96%87/m-p/680757

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

tianxiny816_0-1705997378265.png

我尝试将ETH的初始化当地任务当中后,程序直接报内存异常。我的程序还发现一个问题,裸机的情况下不使能看门狗的话也是不能发出报文

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/%E5%85%B3%E4%BA%8ETC387%E7%A7%BB%E6%A4%8DFreeRTOS%E5%90%8E-%E4%BB%A5%E5%A4%AA%E7%BD%91%E6%8E%A5%E5%8F%A3%E5%8F%91%E4%B8%8D%E5%87%BA%E6%8A%A5%E6%96%87/m-p/681477

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

看门狗的问题可以看下这个デモ:https://github.com/Infineon/AURIX_code_examples/blob/master/code_examples/Ethernet_1_KIT_TC397_TFT/C...

    IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
    IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/%E5%85%B3%E4%BA%8ETC387%E7%A7%BB%E6%A4%8DFreeRTOS%E5%90%8E-%E4%BB%A5%E5%A4%AA%E7%BD%91%E6%8E%A5%E5%8F%A3%E5%8F%91%E4%B8%8D%E5%87%BA%E6%8A%A5%E6%96%87/m-p/681504

0 件の賞賛
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

您好,

       KIT_A2G_TC387_MOTORCTR

tianxiny816_0-1706006211369.png

tianxiny816_1-1706006361017.png

 

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/%E5%85%B3%E4%BA%8ETC387%E7%A7%BB%E6%A4%8DFreeRTOS%E5%90%8E-%E4%BB%A5%E5%A4%AA%E7%BD%91%E6%8E%A5%E5%8F%A3%E5%8F%91%E4%B8%8D%E5%87%BA%E6%8A%A5%E6%96%87/m-p/681618

0 件の賞賛
Translation_Bot
Community Manager
Community Manager
Community Manager

如果不使用ETH, FREERTOS冷复位可以正常工作吗?可以用LED的任务来验证。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/%E5%85%B3%E4%BA%8ETC387%E7%A7%BB%E6%A4%8DFreeRTOS%E5%90%8E-%E4%BB%A5%E5%A4%AA%E7%BD%91%E6%8E%A5%E5%8F%A3%E5%8F%91%E4%B8%8D%E5%87%BA%E6%8A%A5%E6%96%87/m-p/680725

0 件の賞賛