Picos + Pic18 İle Seri Porttan İletişim
-
Sayın Müridler
Başlıkta yazdığım gibi picOS18 kullanarak pic18 ile seri porttan iletişim yapmaya çalışıyorum. Herhangi bir handshaking veya başka protokol yok. Bilgisayar asenkron şekilde random sürelerde komut gönderiyor. Pic de 50ms 'de bir bilgisayara komut gönderiyor.
Receive ve Transmit için iki farklı task oluşturdum. Kendi başlarına çalışıyorlar fakat ikisini aynı anda çalıştırdığımda ya OERR oluyor ya da gelenler saçmalamaya başlıyor. Nasıl senkronize edebilirim. Receive taskı receive interruptı olunca set edilen event ile çalışıyor. Transmit taskı 50 ms'lik alarm ile.
-
böyle hatayı çözemezsin hocam, yapılmış örnekleri incele..
bak burda güzel bir örnek var
http://mrkrabs.googlecode.com/svn-history/r25/trunk/Source/mrKrabs/taskDrvRS.c
bir de bi kitap vardı ingilizcesi scribd e var, piyasada hep rusçası var o da güzel anlatıyor..
biraz uğraştırdı ama scribd den indirdim upload ettim. 8. başlıkta using drivers kısmına bak, orada seri iletişimi anlatıyor. interrupt ve eventleri ile iligili de bilgiler mevcut
-
Hocam burada tek bir task bütün işi hallediyor. Benim iki taskım var biri alıyor biri veriyor bilgiyi. Ama anladığım kadarıyla ikisi aynı anda gönderip almaya çalışırsa patlıyor.
-
hocam bu denetleyicilerde aynı anda tek işlem yapılıyor, önceliği belirtmek için de zaten kesmeler kullanılıyor. eğer veri gelirse seri porttan ilgili kesme çalışıp diğer işler durdurulup ona bakılır ve ondan sonra kalan iş yapılır. gerçi picOS ile ilgili bir tecrübem v.s. yok genel olarak bahsediyorum.
multicore programlamada shared nesne için peterson lock algoritmasında flaglar var. bu yapıyı burada kullanabilirsin.. mesela gönderim işlemi yapılırken bayrak kaldırılır, o an gelen bilginin eventini bir döngüyle durdurursun, gönderme işlemi tamamladıktan sonra bayrak indirilir, sonrasında o döngü event de devam eder.
gerçi kullandığın tek çekirdek olduğu için bu geçerli olmayabilir de yine de denemek istersen bakarsın..
senin dediğin şeyden yola çıkarsak tx in interrupt u ile rx in interrupt u çakışıyor. ama bunlar arasında bir üstlünlük olması gerekiyor yani çok istisnai durumlarda böyle kaynaklar çakışabilir.. hata içeriği yok mu oerr de bir log mesaj falan?
