Gönderen Konu: STM32 Lwip DHCP server gecikmesi  (Okunma sayısı 514 defa)

Çevrimdışı quarko

  • Kıdemli
  • ****
  • İleti: 254
STM32 Lwip DHCP server gecikmesi
« : 17 Ekim 2017, 14:51:59 »
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.”

Çevrimdışı MrDarK

  • Global Moderator
  • Profesyonel Üye
  • *****
  • İleti: 1561
  • Gelecekten geçmişe..
Ynt: STM32 Lwip DHCP server gecikmesi
« Yanıtla #1 : 18 Ekim 2017, 00:21:23 »
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

Çevrimdışı quarko

  • Kıdemli
  • ****
  • İleti: 254
Ynt: STM32 Lwip DHCP server gecikmesi
« Yanıtla #2 : 18 Ekim 2017, 00:33:34 »
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.”


Çevrimdışı ErsinErce

  • Profesyonel Üye
  • *****
  • İleti: 1802
Ynt: STM32 Lwip DHCP server gecikmesi
« Yanıtla #4 : 18 Ekim 2017, 02:44:30 »
LWIP 2.0.3

Kablo bağlı mı diye kontrol etmek için;
Kod: [Seç]
bool link = false;
PHY_GetLinkStatus(ENET, ENET_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_netif0, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP);
        if (dhcp->state== DHCP_STATE_BOUND)
« Son Düzenleme: 18 Ekim 2017, 02:46:01 Gönderen: ErsinErce »

Çevrimdışı quarko

  • Kıdemli
  • ****
  • İleti: 254
Ynt: STM32 Lwip DHCP server gecikmesi
« Yanıtla #5 : 18 Ekim 2017, 04:12:39 »
http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/API/FreeRTOS_IsNetworkUp.html

Bu api varmı sende

Bu api maalesef yok.


LWIP 2.0.3

Kablo bağlı mı diye kontrol etmek için;
Kod: [Seç]
bool link = false;
PHY_GetLinkStatus(ENET, ENET_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_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.”

Çevrimdışı ErsinErce

  • Profesyonel Üye
  • *****
  • İleti: 1802
Ynt: STM32 Lwip DHCP server gecikmesi
« Yanıtla #6 : 18 Ekim 2017, 05:07:13 »
STM32CubeMX ile en azından 2.0.0 a geçin.

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

Çevrimdışı quarko

  • Kıdemli
  • ****
  • İleti: 254
Ynt: STM32 Lwip DHCP server gecikmesi
« Yanıtla #7 : 18 Ekim 2017, 05: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.
“Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız.”

Çevrimdışı CPU

  • Yeni Üye
  • *
  • İleti: 3
  • Listen
Ynt: STM32 Lwip DHCP server gecikmesi
« Yanıtla #8 : 12 Ocak 2018, 00:59:04 »
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..
« Son Düzenleme: 12 Ocak 2018, 01:29:45 Gönderen: CPU »
C dili makineye oldukça yakındır.. Ama programcıya da bir o kadar uzak değildir..