2012-04-19 23 views
12

Arduino'da soket iletişimi ile çalışıyorum ve uygun işlem için deneme/yakalama bloğuna ihtiyacım var, siz ne önerirsiniz? İnternetteki araştırmam başarılı değildi.Arduino'da deneme/yakalama bloğu

düzenleme:

ile çalışıyorum kodu bir mobil uygulama ile etkileşim Wifly modülünü kullanan, ben Android'i kullanan mobil uygulama üzerinde bazı kontrolleri ile robot modülü inşa ediyorum. Her şey gayet iyi çalışıyor, ancak bazen soketin bağlantısı kesiliyor, bu yüzden, bu gibi durumlarda, try/catch bloğuna benzer bir işlem yapmam gerekiyor, ancak Arduino için benzer bir blok bulamadım.

Kodum:

void loop() { 
    Client client = server.available(); 
    if (client) { 
     while (client.connected()) { 
      if (client.available()) { 
       // Serial.print("client connected \n"); 
       char c = client.read(); 

       if(c == 'L') 
        turnLeft(); 
       if(c == 'R') 
        turnRight(); 
       if(c == 'F') 
        goForward(); 
       if(c == 'B') 
        goBackward(); 
       if(c == 'S') 
        Stop(); 

       Serial.print(c); 
      } 
     } 

     // give the web browser time to receive the data 
     delay(100); 
     client.stop(); 
    } 
} 
+0

Bize denediğinizi ne gibi biraz daha bilgi ... vermek gerekir ne ... –

+0

Sadece yeni bir soru güncelledim – NZal

cevap

17

Arduino reference is (örneğin bakınız neden ayrıntıları için bu related answer) try catch listelemeyerek. Ve tahmin ediyorum ki, bir u-denetleyicide yakalamayı deneyin, zor/imkansız olabilir.

Çoğu dilde yakalamak oldukça pahalı bir işlemdir: Program bloğu, try bloğu ve her catch bloğu için bir kez kopyalanır. Denemenin yanlış yapılması durumunda, try-block yığını atılır ve catch bloğu yığınlarından biri çalıştırılır.
Ben bir cpu mimarisi uzmanı değilim, ancak bunun bir çok bellek takası ve benzeri işlemlere ihtiyaç duyduğunu hayal edebiliyorum - basit bir µ-controller ile elde edilmesi zor olmalıdır.

düzenlemek
Bu değer ne kadar C-Programmers do patterns similar to try/catch

+0

Bu cevaba bir göz attınız: http://stackoverflow.com/a/10586093/22470 – powtac

9

Arduino doesn't support exception handling bakmak olabilir. Bununla birlikte, kodunuzu sağlam hale getirmek için istisna işlemlerini kullanmanız gerekmez. Sadece başarısız olan fonksiyonların dönüş değerlerini kontrol ederek aynı sonucu elde edebilirsiniz. client.connected() yana

döngü etrafında her defasında kontrol edilir ve zaten client.read() dönüş olduğunu ele alınmadığını, sadece olası başarısızlık bağlı değilse client.available() beri 0 döndürecektir.

Örneğin, çizgi değiştirerek, bu düzeltebilirsiniz:

char c = client.read(); 

için:

int i = client.read(); 
if (i == -1) { 
    break; 
} 
char c = (char) i; 
+0

çok teşekkürler! Bu aydınlatıcı oldu! – NZal

+0

:(Bu hata işleme kullanılamıyor ... Belirtilen alternatif "sağlam dönüş değeri kontrolü" iki katına çıkar. Serial.print gibi birçok fonksiyon, başarılı olup olmadıklarına dair çok az bilgi verir. Serial.print verisini alamıyor çünkü skunk benim skech çökmesini önlemek için anlamaya nasıl hala sıkışmış! – humanityANDpeace

+0

SRAM dışında çalışan bir kaç kez karşılaştığım bir sorun ve haklısın Bu programatik olarak kontrol etmek için herhangi bir iyi bir yol değil.Çoğunlukla bunun en belirgin belirtisi bozuk Seri çıkış.Fakat kroki kullanarak nasıl bir duygu almak istiyorsanız, MemoryFree kütüphanesi kullanarak mevcut SRAM miktarını kontrol edebilirsiniz (En basit yol, http://playground.arduino.cc/Code/AvailableMemory adresinden MemoryFree.cpp kodunu kopyalamak ve 'freeMemory() ') olarak adlandırmaktır. –