HSERIN

Başlatan selhukuk, 06 Kasım 2016, 14:52:07

selhukuk

Merhaba Arkadaşlar

HSERIN komutu ile gsm modülden gelen bilgileri pic16f876'da  okumaya çalışıyorum.Ancak gelen bilginin uzunluğu değişebiliyor 40 ile 60 karakter arasında olabiliyor.

ben HSERIN [wait("+CMT:") , STR bilgi\60] şeklinde bilgiyi almaya çalıştığımda 60'dan az gelen bilgi sebebiyle program bu noktada takılıyor.

bana ne önerirsiniz.
yardımlarınız için teşekkür ederim.

ta3usl

Merhaba,

Dim bilgi[60] as byte

HSERIN [wait("+CMT:") , STR bilgi]

şeklinde denedin mi ?  Hserin ile bu şekilde belirsiz uzun bilgiler almıştım daha önce. Yanlış hatırlamıyorsam , 0 (sıfır ascii olarak değil)  geldiğinde alım işlemini durdurup sonraki satıra geçiyordu.

selhukuk

ta3usl arkadaş, cevabınız için çok teşekkür ederim.
Soruna şöyle bir çözüm buldum. önce BILGI değişkenin tüm değerlerini sıfırlıyorum.HSERIN 1000,ATLA,[WAIT ("+CMT:"),STR BILGI\60] satırında +CMT:'den sonra gelen bilgi 60'dan az olduğunda ATLA denilen noktaya gidiyor ve bu noktada BILGI değişkenlerinin 60'dan başa doğru değerlerini karşılaştırarak sıfırdan farklı değeri yakalıyorum.Biraz uzun bir işlem oluyor ama neticede programı kilitlemiyor.

Ama sizin önerinizi de en kısa zamanda deneyip neticeyi sizinle paylaşacağım.
Teşekkürler

ete

PBP da string şeklinde gelen bilgiler bir dizi değişkenine ister dizi sayısı vererek istersen vermeyerek aktarılabiliyor.
Ortaya çıkacak soruna bağlı olarak buna karar vermek gerek. Ancak dizisayısı vermeden alma işlemi genellikle karekter dizilerinin alımında kullanılan bir yöntem ve buraya pek uyacak gibi gözükmüyor.
Bu durumda en akıllıcası yine gelen miktar 60 dan az ise timeout oluşturmak ve verilen etikete yönlendirmek programı.
Zaten bunuda denemişsin ve sonucu almışsın. Bence en doğru sistem bu olmalı.
Senin kullandığın şekilde,
HSERIN 1000,ATLA,[WAIT ("+CMT:"),STR BILGI\60]
1000 ms lik bir timeout süresi esas almışsın ki bu süre aslında epeyce fazla. Timeout süresi bana göre 100 ms den fazla olmamalı. Hatta 10-20 ms ik süreleri denemelisin. Çünki dizi devam ettiği sürece timeout sıfırlanır. Sonuta dizi kesilince timeout artar ve belirlenen süreye ulaşınca program Timeout etiketine atlar. 1000 rakamını bence deneyerek düşürmeye çalış. Daha sağlıklı bir programın olur.

Ete


selhukuk

ete hocam verdiğiniz bilgiler çok yararlı çok teşekkür ederim.konuyu kapatmadan önce tüm önerilere ilişkin tespit ve sonuçları sizinle paylaşacağım.

selhukuk

ta3usl arkadaşın önerdiği HSERIN [wait("+CMT:") , STR bilgi] şeklindeki komut satırı için elimdeki derleyici hata mesajı verdi.ETE hocamın dediği gibi timeout süresini de kısaltınca sorun tamamen ortadan kalktı. Teşekkürler..

Powered by EzPortal