25 Eylül 2018, 02:02:45

Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME


STM32 Lwip DHCP server gecikmesi

Başlatan quarko, 17 Ekim 2017, 02: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."


ErsinErce

17 Ekim 2017, 14:44:30 #4 Son düzenlenme: 17 Ekim 2017, 14:46:01 ErsinErce
LWIP 2.0.3

Kablo bağlı mı diye kontrol etmek için;
Kod Seç
bool link false;
PHY_GetLinkStatus(ENETENET_PHY_ADDRESS, &link);
if (
link)


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

quarko

Alıntı yapılan: OptimusPrime - 17 Ekim 2017, 12: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, 14:44:30
LWIP 2.0.3

Kablo bağlı mı diye kontrol etmek için;
Kod Seç
bool link false;
PHY_GetLinkStatus(ENETENET_PHY_ADDRESS, &link);
if (
link)


IP alındı mı diye kontrol etmek için;
Kod Seç
struct dhcp *dhcp = (struct dhcp *)netif_get_client_data(&fsl_netif0LWIP_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

11 Ocak 2018, 12:59:04 #8 Son düzenlenme: 11 Ocak 2018, 13:29:45 CPU
Alıntı yapılan: quarko - 17 Ekim 2017, 17: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..