Kesme
  • Merhabalar,

    Kesmeler dış kesme veya zaman kesmesi şeklinde,

    Şöyle bi sorum olacak;

    Kodun belli kısmında bekleme yaparken , sensörden aldığım veriyi okuyup veri artışı sınırlandığımdan fazla ise direk kesmeye gitmesini istiyorum ;

    örn vermek gerekirse kodun delay(20000) satırında olduğunu varsayalım ,digital pine bağlı sensörden 100 verisini okuyorken ,veri 200 olduğundan kesmeye gitmesini istiyorum,

    Dış kesmede harici buton kullanılıp basıldı basılmadı bilgisi alınıyor , fakat burda da aynı işlemi yapabilir miyim ya da farklı bir yolu var mıdır.

    Teşekkür ederim .
  • dışarıdan kesme oluşturmak için bir pin in tetiklenmesi ve bu pin için kodun içinde oluşturulan bir rutinin çağırılması şeklinde olur. sizin istediğiniz ise kesme anında çağırdınız kodu kesme dışında da çağırmak olduğunu anlıyorum bu işleri karıştıracaktır. diyelim kesme olmadı ama siz kodunuzu yine de çağırdınız ve 5 satır ilerlediğinde bir anda dişarıdan yeni bir kesme geldiğinde kodunuz tekrar baştan başlatılacak ve kesmede kendi çağırdığınız kod durdurulacak yeniden baştan başlatılacak sonra bu kodun işi bittiğinde sizin kodunuz eski kaldığı yerden devam edecek ve her şey altüst olacaktır. hatta kodunuz kitlenecektir. bir çok compiler/derleyici bu şekilde kod yazmanıza izin vermez kendi kodunuzu çağırdığınızda kodu tetıkleyen kesmeyi durdurmanız gerekir ve rutinden çıkarken yeniden kurmanız gerekir.
    delay(20000) zaten kötü bir yöntem bu şekilde beklemek mantıklı değil bunun yerine millis() komutu ile geçen zamanı kontrol edin ve zaman dolmamışsa kodunuz diğer değerleri kontrol etsin.
    programınız sizin dünyanızdır algoritma tasarımı sizin hayat bakış ve işleri düzene koyma şeklinizi de gösterir ;)

  • hocam delay kısmı sadece örnekti delay kullanmıyorum yoksa:), aslında belli bir zamanı yok sonsuz döngüde sistem, bi veriyi sunucuya basarken belli sn ya da ms de gönderiyor ve o arada veri değişimi olduğunda post yaptığım için veriyi okuyamıyorum ,aslında sorunum bundan ibaret biraz karışık anlattım:)
  • veriyi attığınız rutinlerin beklemesiz olanlarını kullanın esp32 ve esp8266 da veri yolladığınızda aldığınızda fonksiyon çağıran evenethandler kullanın bunlar bekleme yamaz bir network işlemi gerektiğinde aktif olur.
  • hocam https ye bağlanmaya çalışıyorum 443 ile connect olurken ve verileri basarken 2-3 sn aralıgında gecikme oluyor kodları değiştim farklı metot kullandım fingerprint ile bastım fakat gecikmeyi indiremedim , korumalı olduğun için

    Serial print ile gecikmeleri konrtol ettim zaman damgasını göstererek,
    i.f(client.connect(host, 443)) burda bağlanırken gecikme oluyor , if den çıkardım direk bağlanmaya çalıştım aynı gecikme mevcut, böyle bi gecikme normal midir hocam
    String httpsPost(String url, String data) {
    client.setInsecure();
    //client.setTimeout(500);
    Serial.println("100");
    delay(20);
    i.f(client.connect(host, 443)){
    Serial.println("connected");
    client.println("POST " + url + " HTTP/1.1");
    Serial.println("1");
    client.println("Host: " + (String)host);
    Serial.println("2");
    client.println("User-Agent: ESP8266/1.0");
    Serial.println("3");
    client.println("Connection: close");
    Serial.println("4");
    client.println("Content-Type: application/json");
    Serial.println("5");
    client.print("Content-Length: ");
    Serial.println("6");
    client.println(data.length());
    Serial.println("7");
    client.println();
    Serial.println("8");
    client.println(data);
    Serial.println("9");
    return "OK" ;
    }
    else {
    return "ERROR";
    }
    }
  • gecikme olur ama karşı taraftaki sunucunun da durumu önemli 2-3 saniye biraz fazla.
  • post yaparken datayı göndereceğim string in boyutu büyük olunca sistemde yavaşlama oluyor hatta string 400 karakterin üstüne çıkınca patlıyor sistem kendini resetliyor,

    ctx: sys ve ya abort called hatası alıyorum yığılma fazla olduğundan dolayı,

    internette de araştırma yaptım bi kaç yol denedim fakat çözüme ulaşamadım hocam yardımcı olabilir misiniz.

  • client.setBufferSizes(512, 512); ile client e ayrılan byte aralığını değiştirince sorun çözüldü.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.