STM32 Lwip DHCP server gecikmesi

Başlatan quarko, 16 Ekim 2017, 23:51:59

quarko

Merhabalar,

STM32F2 serisi ile free rtos üzerinde lwip ile uygulama geliştiriyorum.

DHCP açıkken bazen bağlı olduğum modemden ip almada gecikme yaşanırsa ve bu arada da client task ım çalışmaya başlayıp socket açmaya çalışırsa çakışma yaşanıyor. Bu durumu semaphore mekanizması ile çözmek mi mantıklıdır yoksa client task ta socket açma işlemlerine başlamadan bir süre gecikme vermek yeterli olur mu acaba ?
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

MrDarK

Cihazın Ip aldığını gösteren bir flag yok mu ? O flag set olana kadar client task'ının en başına return koyabilirsin.
Picproje Eğitim Gönüllüleri ~ MrDarK

quarko

O flag aslında semaphore mekanizması oluyor. DHCP taskından semaphore u alana kadar bekletebilirim. Doğru olanda bu gibi görünüyor galiba.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

OptimusPrime

https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

ErsinErce

#4
LWIP 2.0.3

Kablo bağlı mı diye kontrol etmek için;
bool link = false;
PHY_GetLinkStatus(ENET, ENET_PHY_ADDRESS, &link);
if (link)


IP alındı mı diye kontrol etmek için;
struct dhcp *dhcp = (struct dhcp *)netif_get_client_data(&fsl_netif0, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP);
        if (dhcp->state== DHCP_STATE_BOUND)

quarko

Alıntı yapılan: OptimusPrime - 17 Ekim 2017, 09:38:34
http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/API/FreeRTOS_IsNetworkUp.html

Bu api varmı sende

Bu api maalesef yok.


Alıntı yapılan: ErsinErce - 17 Ekim 2017, 11:44:30
LWIP 2.0.3

Kablo bağlı mı diye kontrol etmek için;
bool link = false;
PHY_GetLinkStatus(ENET, ENET_PHY_ADDRESS, &link);
if (link)


IP alındı mı diye kontrol etmek için;
struct dhcp *dhcp = (struct dhcp *)netif_get_client_data(&fsl_netif0, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP);
        if (dhcp->state== DHCP_STATE_BOUND)


Lwip versiyonu 1.3.2.  ST nin STM32F2 serisi için free rtos/lwip örneklerinden yola çıktım. Socket Api kullanıyorum.

"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

ErsinErce

STM32CubeMX ile en azından 2.0.0 a geçin.

TCP ve DHCP kısımlarında önemli düzeltmeler var.

quarko

Haklısınız hocam. En azından 2.0.0 a geçmek lazım ama yazılımın diğer kısımlarını hal kütüphanelerine uygun hale getirmek lazım. O da ayrı bir iş yükü, maalesef.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

CPU

#8
Alıntı yapılan: quarko - 17 Ekim 2017, 14:30:21
Haklısınız hocam. En azından 2.0.0 a geçmek lazım ama yazılımın diğer kısımlarını hal kütüphanelerine uygun hale getirmek lazım. O da ayrı bir iş yükü, maalesef.


Merhabalar, hocam bende sizinle aynı durumdayım.
İçinde bulunduğum bir projede SPL bağımlılığı bulunmakta dolayısı ile (dahili mac olduğundan) STMF107VC veya STMF207VC (henüz karar aşamasındayız) + Freertos + lwip 'yi STM'in bir örneği üzerinden yürüterek bitirmeye çalışacağım.
Temel olarak projede IP ye webserver olarak çıkacağım ve cihaz konfigürasyonlarının yapıldığı basit bir arayüz sağlayacağım, yani cihaz kurulumunda kullanılacak olan IP sonraki sürekli zaman çalışmada aslında hiç kullanılmayacak. Bir de ip üzerinden firmware upgrade yapılabilir olacak.
Projenin henüz başındayken aynı durumları yaşamış olan sizden tecrübelerinizi duymak isterim.
- Lwip versiyon olarak ST'nin SPL örneklerine göre baya ilerledi buna karşın bir geliştirme yaptınız mı?
- SPL bağımlılığı kaldırıp HAL 'e geçmeye çalıştınız mı?
- Lwip tarafında burada bahsi geçmeyen herhangi başka bir problemle karşılaştınız mı?
- Lwip harici bir stack (örneğin uIP) kullandınız mı?
Freertos 'ta da yeniyim, araştırma aşamasındayım henüz. Siz nasıl bir sistem kullandınız task yapısında (semaphores, mutex, queues vb) kısaca açıklayabilirseniz çok sevinirim.
Şimdiden teşekkürler..
C dili makineye oldukça yakındır.. Ama programcıya da bir o kadar uzak değildir..