STM32 serisi ile çalışanlar hangi kütüphaneleri tercih ediyor ?

Başlatan ex_machina, 28 Mart 2020, 14:26:15

ex_machina

    Evet arkadaşlar merak ettiğim bir soruyu sizlere sorayım diye düşündüm. Baştan söyleyeyim bu bir "hangi kütüphane veya yöntem daha iyi?" sorusu değil. Burada amaç, özellikle "profesyonel anlamda iş yapan arkadaşlarımız neyi tercih ediyor ve sebebi nedir?" sorusuna cevap bulmak.

    Mesela ben C dilinde Register tabanlı programlamayı tercih ediyorum. HAL kütüphanesine karşı hep ön yargılı oldum. Ama şimdi pes etmek üzereyim. Çünkü Register tabanlı programlamada kodu yeniden düzenlemek ve değiştirmek çok zaman alıyor. Diğer taraftan şuna bir bakın hele:

Fonksiyon:
void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

Karşılığı:
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_PIN_ACTION(PinState));

  if(PinState != GPIO_PIN_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
  }
}

Altı üstü bir pini set/reset ederken bile, işi kolaylaştıracam diye bir fonksiyon içerisine dallanıp gereksiz bir sürü şey yapıyor. İşte bundan dolayı kullanasım gelmiyor. Öte yandan kod geliştirme zamanını kısaltıp kolaylaştırdığı da bir gerçek.

Evet söz sizde. Sizin tercihleriniz nasıl?

tekosis

Profesyonelim diyemem, register düzeyinde iş yapacak vaktim de bilgim de yok. İşime hangisi gelirse, hangisi beni daha hızlı çözüme ulaştırırsa öyle devam ediyorum. Ya Cubeid ya da mikroC kullanıyorum. Şu zamana kadar sıkıntı yaşamadım. Aslında yeni tasarımlarımda mikroc tercih etmiyorum ancak eskiden başladığım, çalışan cihazlar mikroc üzerine kurulu olduğundan onlarda aynen devam ediyorum.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

apsis

HAL lib'e ben bir türlü alışamadım.

STM'nin başlarındayken bir çok donanımı register ile configure edip programlıyordum. Bu hem asm gibi olmasada mimariye hakim olmak açısından etkili oldu hem de kütüphane kullanımında rahatlık sağladı.

Anlaşılacağı gibi daha donanımcı bir yazılımcıyım ve bu yüzden LL(Low Layer) lib bana her zaman daha yakın ve anlaşılır gelmiştir. LL, STL'nin güncel versiyonudur.

HAL kütüphanesi çok katmanlı yapısından fonksiyonlarını inceleyip anlamak bana zor geliyor. Anlayamadığım şeye de güvenemiyorum.

Register ile yazdığından LL sana daha yakın gelebilir.

Ayrıca gereksiz dediğin şey "assert_param" ifadesi ise bu yazdığın parametrelerini kontrol eder. Bu işlemcide işlem yükü oluşturmaz, fazladan işlem değildir. #define ile yazılmış bir preprocessor'dur.
"Makineye Beyin" MEKATRONİK

marecrisium

İlk projelerimde standart library kullanıyordum ve çok memnundum. Ama ST uzun süredir bu libe destek vermiyor. Halen birçok işi halletmek için yeterli fakat daha kapsamlı projeleri kısa sürede çıkarmak için hal lib kaçınılmaz görünüyor. Artık yeni projelerimi CubeMX 'de konfigüre edip hal library ile yazıyorum.

mylord92

İlk başlarda standart peripheral library ile başlamıştım. Sene 2014 filandı yanılmıyorsam :) Öğrenene kadar bayağı kurcaladım gerek register gerek std peripheral ile. İlerleyen zamanlarda USB'ye ihtiyacım oldu ve ayağa kaldıramadığım için HAL'a geçtim, CubeMX ile generate ederek kullandım ve bu tool ile tanışmış oldum.

STM32 kullancağım zaman ise artık şöyle çalışıyorum; proje clock ayarlarını cubemx ile ayarlıyorum. Geri kalan herşeyi gerekliyse LL kullanarak gerekliyse HAL kullanarak elle ayarlıyorum. Tam kontrol istediğim noktalarda LL kullanıyorum. LL kullandığım noktalarda ise her seferinde Amerika'yı baştan keşfetmemek için ve tüm mcularda kullanmak için port dosyası ve sürücüsü olmak üzere kütüphane haline getirdim.

HAL kütüphanesinden örnek vermişsiniz. Açıkçası aşırı zaman kritik işler yapmıyorsanız emin olun anlamayacaksınız bile :) Örnek vermem gerekirse bir PMSM motorun sensörsüz FOC kontrolünü yaptığımız bir uygulamada (16kHz ile akım kontrolcüsü, 1kHz ile hız kontrolcüsü koşuyor ve zaman kritik bir iş. 62.5uS'de akım kontrolcüsü çevriminin tamamlanması gerekiyor. Basit bir hesapla her 62.5uS için elimizde 11250 tick var.) yazılımsal uart kullanmak durumunda kaldık. 180Mhz bir mcu bunun altından rahatlıkla kalkabildi ki hala bazı özellikler ekliyoruz gelen talepler doğrultusunda.

Endişe duyduğunuz şeyler(kodun bakımı ve değiştirilmesi)bahsettiğim şeyler ile paralel olarak hayatınızı kolaylaştırır. Özellikle öğrenmekten ziyade bir iş olarak yapıyorsanız bunu, işi kolaylaştırmaya çalışmanızı şiddetle tavsiye ederim. Servis süreniz kısalır ve yaptığınız işin kalitesi artar.

emiter

#5
Şahsen ben standart peripheral library kullanıyorum.