Ana içeriğe git

Haberler

Konu: nRF24L01+ Kütüphanesi (STM32 HAL Lib. uyumlu ) (1047 Kez okunmuş) önceki konu - sonraki konu

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.
  • ashes
  • [*][*][*][*][*]
Ynt: nRF24L01+ Kütüphanesi (STM32 HAL Lib. uyumlu )
Yanıt #10
Kendi kullandığım kütüphanede atışı yapıp IRQ ucunu dinleme yolunu seçmişim. Yani şöyle bir paket atılıyor bu paketin sonucu state machine yardımıyla taranıyor. Eğer IRQ ucundan alınan uyarı da TX fail veya success dönmüşse tx izni boşa bırakılıyor. Bir sonraki paketin atışı gerçekleştiriliyor. Tabii bunun için atış isteklerini bir queue ya koymak gerekebilir.

Yani aslında buradaki while'ı kaldırıp tekrar gönderme yapacağım zaman Busy bayrağını kontrol etsem yeterli olur mu diyorsunuz?
Bence transmit için ayrı bir state tutsanız daha iyi olur göz ucuyla baktığımda rx,tx tüm durumlar busy flage bağlanmış durumda. Başka bir flag tutarak sonucu while ile beklememeniz yararlı olabilir. Sonuç olarak 2 duruma çıkacaksınız API ile paket atmadan önce TX izni var mı diye bakacaksanız veya gelen tüm istekleri queue ya yerleştirip tx flagi düşünce transmit edeceksiniz. 2. yöntem şu an libraryinizin geldiği noktada yapılamayabilir.

  • Cemre.
  • [*]
Ynt: nRF24L01+ Kütüphanesi (STM32 HAL Lib. uyumlu )
Yanıt #11
queue ya yerleştirip
Bunu biraz açmanız mümkün mü? Belki mini bir örnekle.
no border, no nation, stop deportation.

  • ashes
  • [*][*][*][*][*]
Ynt: nRF24L01+ Kütüphanesi (STM32 HAL Lib. uyumlu )
Yanıt #12
queue ya yerleştirip
Bunu biraz açmanız mümkün mü? Belki mini bir örnekle.
Yarın reel örnek vereyim gece kapanışı olarak sözlü anlatayım.
Diyelimki driver kodlarınızda son yapılan 20 isteği tutabiliyor olun. Yani en kötü durumda 5 byte hedef + 32 byte payload 37*20 boyunda bir bufferınız olsun. API'nizi kullananlar sizin send fonksiyonunuzu çağırıyor olsunlar. Her paketi kaydedin ve periyodik çalıştırılması gereken fonksiyonunuzda ata ata ilerleyin. Tx müsaitse sıradakini at değilse diğer işlere dön şeklinde. Literatür ismi queue, ring buffer, circular buffer vsvs.. birçok ismi var.
API'nizin yeteneği gördüğüm kadarı ile paketi atmasını iste donanımı bekle şeklinde. Dolayısı ile bahsettiğim değişiklik mentaliteyi etkiler ve bu da driverı baştan yazmaya kadar gider ve de API kullanıcısından periyodik olarak bir fonksiyonunuzu çağırmayı ister.

  • Cemre.
  • [*]
Ynt: nRF24L01+ Kütüphanesi (STM32 HAL Lib. uyumlu )
Yanıt #13
@ashes hocam, meseleyi aşağı yukarı anladığımı sanıyorum.

Kütüphane yapısına gelince, aslında Transfer ve Receive fonksiyonları dışındaki tüm fonksiyonlar çipe register düzeyinde erişim sağlayan ve enable/disable yapan fonksiyonlar diyebilirim. Yapının değişmemesi için bir neden yok açıkçası. Ancak enerjimi tamamen bu kütüphaneye kanalize etmem mümkün değil. Benim için aciliyeti olmayan bir çalışma. Belki el atmak isteyen birileri çıkarsa burada bulunsun yinede.

Teşekkürler ilginiz için.
no border, no nation, stop deportation.

  • FxDev
  • [*][*]
Ynt: nRF24L01+ Kütüphanesi (STM32 HAL Lib. uyumlu )
Yanıt #14
Ah be @Cemre. proje süper de bunun ANSI C şekli lazım bana (:
Oturup yazsam mı diyordum sen el atmışsın ama şu HAL'dan bir kurtulamıyoruz. Şunu yazılımsal layer ve fiziksel layer diye ayırsan tadından yenmez emin ol. Diğer türlü HAL'ı ayıklarken diğer işlemcilerle kullanamayacağız bunu. Örneğin STM8 için temizlemek mi yoksa sıfırsan ANSI C kütüphane yazmak mı arasında gitgeller yaşıyorum şu an (:

Ynt: nRF24L01+ Kütüphanesi (STM32 HAL Lib. uyumlu )
Yanıt #15
@FxDev Hocam ANSI C kütüphane yazsan tadından yenmez :)

  • Cemre.
  • [*]
Ynt: nRF24L01+ Kütüphanesi (STM32 HAL Lib. uyumlu )
Yanıt #16
Ah be @Cemre. proje süper de bunun ANSI C şekli lazım bana (:
Oturup yazsam mı diyordum sen el atmışsın ama şu HAL'dan bir kurtulamıyoruz. Şunu yazılımsal layer ve fiziksel layer diye ayırsan tadından yenmez emin ol. Diğer türlü HAL'ı ayıklarken diğer işlemcilerle kullanamayacağız bunu. Örneğin STM8 için temizlemek mi yoksa sıfırsan ANSI C kütüphane yazmak mı arasında gitgeller yaşıyorum şu an (:

Hocam, saniyeler içinde çevirmenin yolunu söyleyeyim. Editörünüzün Replace ekranına gelip HALStatusTypedef kelimesini kendi oluşturduğunuz OK ve ERROR değerlerini içeren bir typedef ile değiştiriyorsunuz. Yine HAL_OK ve HAL_ERROR kelimeleri için de bu düzeltmeyi yapıyorsunuz. Sonra HAL_nRF24L01P_SendCommand fonksiyonu içerisindeki SPI_TransmitReceive fonksiyonu yerine kendi platformunuzun full duplex spi fonksiyonunu geçiriyorsunuz. Beş dakika sürer sürmez.
Nur topu gibi bir platform bağımsız kütüphaneniz oldu...

Bu yetmez şunlar şunlar da lazım derseniz, asıl iş görecek şekli bu madem söyleyin yapalım :)

Not: Eğer bu düzeltmeyi yapacaksanız lütfen Fork edip işiniz bitince pull request oluşturun. Proje GNUGPLv3 ile lisanslanmış durumda ;)
  • Son Düzenleme: Şubat 28, 2017, 00:17:21 - Cemre.
no border, no nation, stop deportation.

  • FxDev
  • [*][*]
Ynt: nRF24L01+ Kütüphanesi (STM32 HAL Lib. uyumlu )
Yanıt #17
Bir proje karşıma çıkarda Bluetooth harici kullanmam gerekirse bakacağım o halde :)
Şimdiki işim biraz TCP/IP biraz Modbus TCP/IP.