Mucit23
Yeni Üye
- Katılım
- 7 Ekim 2022
- Mesajlar
- 33
Selamlar
Yazılımla uğraşan arkadaşlara bir sorum olacak.
Bir sistem geliştiriyorum. Değişken periyotlarla gelen ADC verisini Kayıp olmadan STM32'de USB CDC üzerinden PC ye göndermem gerekiyor. Veri gelme sıklığı Min 50ms Max 1ms.
50ms aralıklarla gelen veriyi kayıpsız olarak göndermek kolay. Ama 1ms aralıklara gelen veriyi tampon bellek olmadan bufferlamadan göndermek çok zor. Ben bunun için ilk başta 100 elemandan oluşan bir buffer belirledim. Her 100ms de bir Gelen veriyi biriktirip paket olarak gönderiyordum. 1ms de bir gelen veri için 100ms boyunca gelen örnekleri toplayınca zaten 100 elemanlı buffer dolmuş oluyor. Bunu çapraz bir tampon bellek ile gönderiyorum. Eğer 50ms aralıklarla yeni veri geliyorsa teorik olarak 100ms'de en fazla 2 adet ADC datası gönderirim. Gönderdiğim verinin 2 olduğunu bildiğim için burada da sorun yok. Paket başunda gelen örnek sayısınıda gönderiyorum.
Bu yöntemi pek verimli çalıştıramadım. Daha oturaklı bir sistem kurmam gerekiyor kafam durdu.
Temel ihtiyaçlarım şunlar.
Sorularım şunlar.
C# da PC ye veri aktarırken veri boyutunun sabit olduğunu düşünürsek en sağlıklı veri aktarım yöntemi hangisidir? Yada serialport sınıfını daha sağlıklı bir şekilde kullanmanın yolu varmıdır?
Ek olarak USB CDC de veri aktarım hızı baudrateden bağımsız olarak 1Mbitlerin üstünde. Dolayısıyla belki Seri porttan 1ms aralıklarla veri göndermem de sorun olmayacak ama PC tarafında sürekli serialportDataRecieved olayı tetiklendiği için program kasılacak. Bunu istemiyorum. Burada nasıl bir algoritma nasıl bir yapı kurmam gerektiği hakkında önerilere ihtiyacım var.
Donanım ile PC arasında yüksek hızlı veri transferinde kullanılan algoritmaları öğrenmek istiyorum.
Yazılımla uğraşan arkadaşlara bir sorum olacak.
Bir sistem geliştiriyorum. Değişken periyotlarla gelen ADC verisini Kayıp olmadan STM32'de USB CDC üzerinden PC ye göndermem gerekiyor. Veri gelme sıklığı Min 50ms Max 1ms.
50ms aralıklarla gelen veriyi kayıpsız olarak göndermek kolay. Ama 1ms aralıklara gelen veriyi tampon bellek olmadan bufferlamadan göndermek çok zor. Ben bunun için ilk başta 100 elemandan oluşan bir buffer belirledim. Her 100ms de bir Gelen veriyi biriktirip paket olarak gönderiyordum. 1ms de bir gelen veri için 100ms boyunca gelen örnekleri toplayınca zaten 100 elemanlı buffer dolmuş oluyor. Bunu çapraz bir tampon bellek ile gönderiyorum. Eğer 50ms aralıklarla yeni veri geliyorsa teorik olarak 100ms'de en fazla 2 adet ADC datası gönderirim. Gönderdiğim verinin 2 olduğunu bildiğim için burada da sorun yok. Paket başunda gelen örnek sayısınıda gönderiyorum.
Bu yöntemi pek verimli çalıştıramadım. Daha oturaklı bir sistem kurmam gerekiyor kafam durdu.
Temel ihtiyaçlarım şunlar.
- Gelen ADC hızından bağımsız olarak Gecikme yaşanmaması için 100ms aralıklarla veri göndermem gerek.
- ADC den okuduğum verilerin kayıpsız bir şekilde göndermem gerekiyor.
- 100mS aralıklarla Seri port üzerinden yada USB CDC ile gönderirken verinin kayıpsız bir şekilde gönderilmesi gerekiyor.
Sorularım şunlar.
C# da PC ye veri aktarırken veri boyutunun sabit olduğunu düşünürsek en sağlıklı veri aktarım yöntemi hangisidir? Yada serialport sınıfını daha sağlıklı bir şekilde kullanmanın yolu varmıdır?
Ek olarak USB CDC de veri aktarım hızı baudrateden bağımsız olarak 1Mbitlerin üstünde. Dolayısıyla belki Seri porttan 1ms aralıklarla veri göndermem de sorun olmayacak ama PC tarafında sürekli serialportDataRecieved olayı tetiklendiği için program kasılacak. Bunu istemiyorum. Burada nasıl bir algoritma nasıl bir yapı kurmam gerektiği hakkında önerilere ihtiyacım var.
Donanım ile PC arasında yüksek hızlı veri transferinde kullanılan algoritmaları öğrenmek istiyorum.