doom13 0 Posted January 15, 2020 · Report post Приветствую. Есть ли какое-то событие/семафор/др. при срабатывании link up/down? Хочу сделать, чтобы задача спала, пока нет линка или засыпала, когда пропал. Quote Ответить с цитированием Share this post Link to post Share on other sites
haker_fox 0 Posted January 15, 2020 · Report post 1 hour ago, doom13 said: Хочу сделать, чтобы задача спала, пока нет линка или засыпала, когда пропал. Плохо, помню, но в LwIP 1.4.x делал низкоприоритетную задачу с поллингом в 500 мс. Она стучалась к фитеру, и запрашивала статус кабеля. Раз так сделал, то, видимо, не нашёл событя. Хотя, стоп! А стэк, вроде и не должен такое событие давать. Ведь о кабеле только PHY может сказать. А у неё прерываний нет... Или вы не о включенном/отключенном кабеле? Quote Ответить с цитированием Share this post Link to post Share on other sites
doom13 0 Posted January 15, 2020 · Report post 7 minutes ago, haker_fox said: Плохо, помню, но в LwIP 1.4.x делал низкоприоритетную задачу с поллингом в 500 мс. Она стучалась к фитеру, и запрашивала статус кабеля. Раз так сделал, то, видимо, не нашёл событя. Спасибо, с этим понятно. Думал так делать, но пока пытаюсь понять. есть ли стандартная опция/возможность. 8 minutes ago, haker_fox said: Хотя, стоп! А стэк, вроде и не должен такое событие давать. Ведь о кабеле только PHY может сказать. А у неё прерываний нет... Или вы не о включенном/отключенном кабеле? Если кабель дёргать то сообщения в stdout кидает (если не ошибаюсь), поэтому решил, что оно само мониторит состояние сети и возможно есть какая-то возможность привязаться к данному событию. //netif.h #if LWIP_NETIF_LINK_CALLBACK /** This function is called when the netif link is set to up or down */ netif_status_callback_fn link_callback; #endif /* LWIP_NETIF_LINK_CALLBACK */ #if LWIP_NETIF_LINK_CALLBACK void netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback); #endif /* LWIP_NETIF_LINK_CALLBACK */ Такое вот нахожу Quote Ответить с цитированием Share this post Link to post Share on other sites
ksv198 0 Posted January 16, 2020 · Report post 22 hours ago, haker_fox said: Ведь о кабеле только PHY может сказать. А у неё прерываний нет... Вот как раз у PHY обычно есть прерывания для события изменения состояния линка (например у KSZ8091 это регистр 0x1B). Заводите выход прерывания от PHY на ногу контроллера, ловите прерыание, шлёте семафор и отрабатываете callback функцию LwIP. Quote Ответить с цитированием Share this post Link to post Share on other sites
haker_fox 0 Posted January 16, 2020 · Report post 1 hour ago, ksv198 said: Вот как раз у PHY обычно есть прерывания для события изменения состояния линка Возможно. Видимо просмотрел. Хотя мы использовали LAN8720, возможно у неё тоже есть. Quote Ответить с цитированием Share this post Link to post Share on other sites
kolobok0 0 Posted January 16, 2020 · Report post 7 hours ago, haker_fox said: Возможно. Встречается косяк на платах с сетевыми сэмплами в инете - нет проводка с выхода прерывания физики на мк. посему в примерах крутят поллинг так-же... не у всех хватает терпения перерыть регистры физики в ДШ. Quote Ответить с цитированием Share this post Link to post Share on other sites
haker_fox 0 Posted January 17, 2020 · Report post 2 hours ago, kolobok0 said: не у всех хватает терпения перерыть регистры физики в ДШ. Точно, хотя в моём случае мне дали готовое железо, и, как всегда, торопили со сроками. Сейчас посмотрел на даташит Lan8720, действительно увидел прерывания. Quote Ответить с цитированием Share this post Link to post Share on other sites