Полная версия этой страницы:
Lwip
Kot_Schrodingera
Mar 30 2018, 11:14
Всем привет обывателям форума
Имеется stm32f7, прикручен lwip
Идет постоянный обмен с железкой(на железке поднят linux)
При подключении через хаб, всё работает более или менее, но когда подключено "точка-точка" начинают сыпаться сообщения об retransmission.(Если кому понадобиться могу скинуть dump)
Из dump видно, что теряется пакет, отсюда вопрос, как его можно отследить на stm32?
При включении debug сыпется много сообщений, так как на сообщения тратиться время, retransmission пропадает, то есть по моим выводам lwip или драйвер eth не успевает что-либо делать
И ещё один вопрос, для получения оптимальной скорости был впилен костыль в виде уменьшения времени вызова timer tmr до 1 ms(TCP_TMR_INTERVAL 1) - как это может повлиять на систему и LWIP, кроме как загрузки цп?
Кажется, здесь где-то сообщали, что драйвер Ethernet от STM кривой - не учитывает кеши у Cortex-M7.
Kot_Schrodingera
Mar 30 2018, 13:13
это конечно "приятная новость"
а есть где-нибудь информация, как добавить учитывание кеша?
Kabdim
Mar 30 2018, 13:31
тыкЗабавно что в моем гугле это не искалось. Но на
будущее поисковики великая сила.
Кто-то по недоразумению закинул топик в раздел Linux. Модераторы, не тормозите
Kot_Schrodingera
Mar 30 2018, 14:59
Вообще, видимо увидели слово Linux
Scifi, Вы были правы, убрал cache заработало, но то что скинул Kabdim, я использовал в ethernet драйвере, единственное я использовал функцию SCB_CleanInvalidateDCache()
Kot_Schrodingera
Apr 4 2018, 13:09
Но retransmission всё равно возникает
И почему SCB_CleanInvalidateDCache() не помог?
Перенес буферы приёма и передачи, дескрипторы в область DTCM, значительного улучшения не увидел
BioWolf2000
Apr 6 2018, 07:01
Я правил файл stm32f7xx_hal_eth.c добавляя инструкцию __DSB();
CODE
heth->TxDesc = (ETH_DMADescTypeDef *)(heth->TxDesc->Buffer2NextDescAddr);
}
}
//////////////////////
__DSB();
/////////////////////
/* When Tx Buffer unavailable flag is set: clear it and resume transmission */
if (((heth->Instance)->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET)
{
/* Clear TBUS ETHERNET DMA flag */
(heth->Instance)->DMASR = ETH_DMASR_TBUS;
/* Resume DMA transmission*/
(heth->Instance)->DMATPDR = 0;
}
Kot_Schrodingera
Apr 9 2018, 11:31
Цитата
Я правил файл stm32f7xx_hal_eth.c добавляя инструкцию __DSB();
Не помогает
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.