|

楼主 |
发表于 2019-9-4 10:34:45
|
显示全部楼层
修改了MDK的驱动EMAC_STM32H7xx.c文件里的GetRxFrameSize函数
原来的代码是:
static uint32_t GetRxFrameSize (void) {
uint32_t len;
/* Clean and invalidate data cache */
SCB_CleanInvalidateDCache();
if (HAL_ETH_GetRxDataLength (Emac.h, &len) == HAL_OK) {
return (len);
}
/* No data available */
return (0);
}
修改后的代码是:
static uint32_t GetRxFrameSize (void) {
uint32_t len;
ETH_BufferTypeDef rx_buf;
if(HAL_ETH_GetRxDataBuffer(Emac.h, &rx_buf)== HAL_OK)//增加,先判断有没有收到数据,再取数据长度.//TODO:这样做会不会有别的问题呢???
{
if (HAL_ETH_GetRxDataLength (Emac.h, &len) == HAL_OK) {
SCB_CleanInvalidateDCache();
return (len);
}
}
/* No data available */
return (0);
}
修改后ping的速度明显加快,每次ping4次,有3次<1ms,但是总有一次是几百ms到两千多ms甚至超时,变化范围很大。修改之前每次都是30ms很一致。
这是什么问题啊? |
|