Veri Formatı Oluşturma

Bowman

Aktif Üye
Katılım
7 Ekim 2022
Mesajlar
112
Atıyorum elimde iki tane mikroişlemci olsun. Bir tanesi master olan, slave olarak davranacak mikroişlemciye UART-RS232 üzerinden 100 mili saniyede bir veri atsın. Veri formatı da sallıyorum 20 byte olsun. Bunun içinde spesific header, data length, command type gibi bilgiler de bulunsun. Aynı zamanda bu veri formatı içerisinde sensörlerden alınacak verileri de barındıracak. Örnek olarak şöyle bir şey yazayım.

Header ABC olsun. Data length 20(byte), command type da 0xA0. Veri formatım şöyle bir şey olacak "ABC20A0(sensör verileri)checksum". 100 mili saniyede bir veri atma işini timer ile yapabilirim diye düşünüyorum. 100 mili saniyede bir kesme oluşturacak bir timer konfigüre edip kesmede uart ile verileri gönderebilirim diye düşündüm. Fakat o veri formatını nasıl oluşturabilirim konusu kafamda canlandıramadım. Sensör verisi hariç gerisi sabit olacak o veri formatında sensör verisi değişecek sadece.

Nasıl yapılabilir bu?
 
Protokol işin kolay tarafı. Asıl güvenilir, sağlam ve hatalar karşısında çalışmayı sürdürecek kodu yazmak zor olur.

Protokol tarafında <length1><data1><length2><data2> ... yapısı güzel. Ama data içerisinde ilk byte "version" olsun. Böylece ürünler geliştikçe daha gelişkin bir paket yapısı olursa, hem eski hem yeni paket versiyonlarını destekleyebilirsin.
 
Protokol işin kolay tarafı. Asıl güvenilir, sağlam ve hatalar karşısında çalışmayı sürdürecek kodu yazmak zor olur.

Protokol tarafında <length1><data1><length2><data2> ... yapısı güzel. Ama data içerisinde ilk byte "version" olsun. Böylece ürünler geliştikçe daha gelişkin bir paket yapısı olursa, hem eski hem yeni paket versiyonlarını destekleyebilirsin.
Ben protokolü yazılıma nasıl dökerim kısmında takıldım. İnternette de arıyorum fakat çok yararlı bir kaynak bulamadım. Bildiğiniz güzel bir kaynak varsa çok sevinirim.

Ben şöyle düşündüm.

C:
typedef struct{
    char* header;
    uint8_t data_length;
    uint8_t command_type;
    uint8_t sensor_data[16]
}data_frame;

Burada bir frame_init() fonksiyonu ile başlangıç değerlerini atayabilirim diye düşündüm. Sensör verilerini de bir şekilde ADC'den okudukça yazarım diye düşündüm. Protokolü oluşturmak için güzel bir kaynak kod bulamadım internette. Benim aklımdaki şey elimdeki farklı sayıları birleştirip UART üzerinden göndermek. Belki daha mantıklı bir yol da vardır.
 
Mesele protokolü oluşturmak değil. Oluşturmuşsun zaten. UART'a yazmak konusunda da bir sıkıntı yok. İlgili kütüphane fonksiyonunu kullanarak veya doğrudan hardware register'lerine erişerek yazarsın.

Asıl mesele verinin her şart altında karşı tarafa ulaştığını temin etmek, iki tarafın da senkron olmasını sağlamak. Şöyle bir örnek vereyim:

Normal çalışma şartlarında alıcı her zaman header byte'ını bekliyor olacak. Header gelince geri kalan byte'lar da gelecek, paket tamamlanacak, işlenecek ve alıcı tekrar header beklemeye başlayacak. Ama diyelim bir sorun çıktı ve alıcı header'i kaçırdı, ilk okuduğu byte data_length oldu. Hata vermeye devam edecek, ta ki bir header okuyana kadar. Ama orada da şu tehlike var: data length byte, header byte'a eşit olabilir. O zaman da alıcı yeni bir paket başladığını zanneder ve tekrar hatalı paket okur. Kötü senaryoda bu senkronizasyon kaybı çok uzun sürebilir ve gönderici ile alıcı arasında uzun süre paket transferi yapılamaz. Hatta en olumsuz durumda alıcı ve verici hiçbir zaman senkronizasyonu yakalayamayabilir. İşte böyle bir senaryonun olmamasını temin etmen lazım. Alıcı ve verici senkronizasyonu kaybederlerse, bu durum hem çok kısa zamanda algılanabilmeli, hem de tekrar senkronizasyona ulaşacak bir prosedür izleyebilmeli.

Bunların üzerinde kafa yorman lazım. Bunlar çok ayrıntılı konular, hazır kaynak bulmak kolay değil.
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,955
Mesajlar
118,794
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top