STM32 hakkında yardım

Başlatan trinity, 12 Eylül 2014, 23:30:32

trinity

STM32 programlama konusunda örnek programları inceliyorum,

kimi böyle, direk hex değeri atayarak
GPIOC->BSRR = 0x00000100;


baziları böyle, bit kaydırarak
GPIOC->BSRR = (1<<8);


bazene gpio.h kütüphanesi kullanarak böyle,
GPIO_SetBits(GPIOC, 0xFF);


çıkış yapmışlar, sizce hangi yöntem daha sağlıklı, ve hangisini öğrenmek ileride daha iyi olur?


Mucit23

#1
GPIO_SetBits bir fonksiyon. İçeride yine GPIOx->BSRR registerini kullanıyor.

Çalışmaları açısından bir fark yok.

Farzet bir program açtın alt alta üç satır var ve ne yapıldığını anlamaya çalışıyorsun

GPIOC->BSRR = 0x00000100;
GPIOC->BSRR = (1<<8 );
GPIO_SetBits(GPIOC, 0xFF);

Sence hangisi daha anlaşılır?

bu yüzden std lib felan kullanılıyorya..

kimlenbu

ARM'a ilk başladığımda amacım bir led yakıp söndürmekti. Bu syntax karmaşası beni de oldukça zorlamıştı ve ilk ledimi anlayarak değil ezbere yakıp sönürmüştüm.

@Mucit23 zaten açıklamış ben de bir adım daha ötesini yazayım :

GPIO_SetBits(GPIOC,GPIO_Pin_0);


görüldüğü gibi standart library kullanıldığında yapılan iş aynı olmasına rağmen kod okunurluğu iyice arttı.

X-Fi

#3
GPIO_SetBits(GPIOC, 0xFF); bir fonksiyon olduğu için eğer optimizasyonu düşük ya da debug ayarında tutarsanız stack yedeğini alıp fonksiyona dallanır buda birkaç clock gecikme oluşacak demektir. Aynı yerde GPIOC->BSRR = (1<<8 ); kullanılır, okunulurluk  ve düzen için değişkenleri define yardımıyla tanımlanırsa. tek clock ile pin değişimi gerçekleştirilmiş olur.


I2C,SPI gibi haberleşme protekollerini software yazmak istediğinizde bu stdlibrary fonksiyonları sizi yavaşlatacaktır.
 
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

minicihazlar

CMSIS tabanlı kod yazmak bazı açık kaynak kodlu kütüphaneleri kullanabilmek açısından avantajlı olabiliyor bazı durumlarda ama genel olarak arkadaşların da dediği gibi ST'nin kütüphanelerini kullanmak daha kolay geliyor genelde, en azından bana öyle deliyor :)