Nasihat isteyen acemi bir ARM programcısına tavsiyesi olan ?

Başlatan GaGuLi, 26 Kasım 2016, 14:58:26

GaGuLi

Hayırlı günler değerli forum sakinleri. Sizden biraz nasihat almak istiyorum bana biraz nasihatte bulunun inşallah.

Hedeflediğim şey şuan ARM M serisi işlemciler (şuan kullandığım stm32f103) üzerinde elimden geldiği kadarıyla uzmanlaşmak. Bülent hocanın dersleriyle başladım C deki eksiklerimi gidermeye çalıştım,RCC,GPIO,ADC, USART, TIMER, PWM vs gibi uygulamaları anladım ve ilgili deneylerimi yaptım ama SPI, I2C, USB gibi konulara gelince tıkandım.

Datasheet vs. yabancı kaynakları okumakta zorlanıyordum biraz programlamaya ara verdim ve 9, 10 ay yoğun bir şekilde ingilizce çalıştım halende çalışıyorum.

Benim hedeflediğim şey hazır olan kodlara bakarak birşeyler devşirip kendi projeme eklemek değil, kullanacağım bir donanım veya başka bir çipin dökümanını alıp sadece ondan faydalanarak yapmak istediğim işlemleri gerçekleştirmek. Mesela siz bu dediğim şekilde bir çipi alıp dökümanına bakıp dışarıdan bir kütüphane yardımı olmadan kodlarınızı yazabiliyor musunuz ? Bunu yapabiliyorsanız benimde o seviyeye gelmem için izlemem gereken yol haritası nedir ? Bu konuda bir çıkmaz yaşıyorum şuan tavsiyelerinizi bekliyorum.

bit01

Takip.

Özellikle şu soruyu merak ediyorum.

"Mesela siz bu dediğim şekilde bir çipi alıp dökümanına bakıp dışarıdan bir kütüphane yardımı olmadan kodlarınızı yazabiliyor musunuz ?"

GaGuLi

Mesela bir donanım aldınız atıyorum nrf24l01, baktınız bu çip için kimse uğraşıp kütülhane yazmamış. Bunu kullanmanız da gerek projeniz için. Ne yapardınız ?

muhittin_kaplan

@GaGuLi
yeni başıma gelen bir olaydan yola çıkarak anlatayım, kendi payına çıkanı al.

BMP085 (barometre) ile alakalı bir iş yapmam gerekiyor. Bu sensör i2c ile iletişim sağlıyor. Kütüphanelere baktım, var ama yığınla extra koymuşlar zaten çalıştıramadım. Ozaman kendim yapayım dedim ve soyundum. (yanlış anlaşılmasın ;) )

Önce I2C yi hallettim. Lojik analizörle istediim veriyi gönderebiliyordum.
Sonra sensörü bağladım, vve datasını açtım. Hangi registerden ne okumam gerektiği yazıyordu. (Çok ing bilmeyede gerek yok aslında) Sıcaklık okumayı hallettim ilk etapta.
Basıçta devamlı yanlış hesap yapıyordum. Baktım olacak gibi değil, bir excel tablosu yaptım. datasındaki örneği yaptım ve sonucu sağladım. Sonra kendi verilerimi denedim, yanlışlığı buldum.

el cevap, Problemi çözmenin en kolay yolu onu bölmektir.

GaGuLi

Anladım Hocam bende soyunuk vaziyette bekliyorum şuan (yanlış anlaşılmasın :))

SPI çalışma mantığını anladım işlemci tarafında pek sıkıntım yok. Ama bağladığım donanımın datasheet'ini inceliyorum(nrf24l01 için) register ve command açıklama kısımlarından olayı anlayamıyorum pek.

Mesela STM datasheet'lerinde bir birimi çalıştırmak için "Follow the procedure below to configure the SPI in master mode:" .. Procedure ... gibi bilgiler arıyorum sanırım :)


muhittin_kaplan

Sample ve Uygulama Notları önemlidir, her nekadar "başka kodlara bakmadan" desende MCU kısmında bakman gerekir.

örnek, BMP085 için yazılan kütüphanede şu vardı, yapılması gereken 2^15 e bölmek. Kitap böyle demiş.
Kütüphanede
Sayı<<14 yaparak 14 kez sola döndürmüş
Bende sayı/32768 e böldüm (denedim hatamı bulmak için)

Sonra aklıma Acaba Hangisi işlemci için daha kolay sorusu geldi.



GaGuLi

Ben daha o seviyede değilim işlemci çiple bir alış veriş içinde olsa az da olsa o kısımlara gelinir de .. Derler ya başlamak bitirmenin yarısı diye :)

baran123

Alıntı yapılan: GaGuLi - 26 Kasım 2016, 16:33:59
Ben daha o seviyede değilim işlemci çiple bir alış veriş içinde olsa az da olsa o kısımlara gelinir de .. Derler ya başlamak bitirmenin yarısı diye :)
@GaGuLi  Logic Analyzer almanı öneririrm. Çok güzel bir alet. Tam uğraşacağın işlere göre.
Aliexpressde oldukça ucuz.

Unutmadan ST nin örnek kodları mevcut bunları bulup oradan nasıl çevre birimi çalıştırılıp iletişim sağlanır bunu öğrenebilirsin.

GaGuLi

Aldım hocam var. USART uygulamalarında epey kullandım. SPI için yapılmış örnekleri incelerken Analizör çıktılarından anlamaya çalışıyorum genelde zaten. O örnekleride inceledim hocam MCU tarafında eksiklerim olmasına rağmen yapılan işleri anlıyorum. Ama MCU ya bağladığım bir çip için tam bir fransızım :)

JOKERAS

Alıntı yapılan: muhittin_kaplan - 26 Kasım 2016, 16:10:57
Sample ve Uygulama Notları önemlidir, her nekadar "başka kodlara bakmadan" desende MCU kısmında bakman gerekir.

örnek, BMP085 için yazılan kütüphanede şu vardı, yapılması gereken 2^15 e bölmek. Kitap böyle demiş.
Kütüphanede
Sayı<<14 yaparak 14 kez sola döndürmüş
Bende sayı/32768 e böldüm (denedim hatamı bulmak için)

Sonra aklıma Acaba Hangisi işlemci için daha kolay sorusu geldi.

Muhittin usta,eğer bölme sonucunda elde etmek istediğiniz değer bölme sayısına denk geliyorsa Shift işlemi
hem daha az yer kaplar, hemde çok daha hızlı çalışır.

Aksi halde derleyici "Bölme Modulünü" koda dahil eder.
Bu shift işlemine göre hem yavaş kalır,hemde  Kodu büyütür.

Bunu anlamak içim her iki türlü derleme yapın,bölme yaparak derlediğiniz kod daha fazla alan kaplar.
Bölme modülü küsüratları da yuvarlarıyor sanırım,yapılan her iş zaman gecikmesi oluşturuyor.

Zoroaster

Akıllı derleyiciler zaten shift ile yapılacak bölmeleri optimizasyon açıksa siz böl deseniz de shift ile yapar.
Seytan deliginden kacti.

muhittin_kaplan

konu dağılmasında (yarın deneyeceğim hepsini)
sayı/2^15 (bu datasındaki)
sayı>>14 (bu 3.parti kütüphanedeki)
sayı/32768 (hatayı bulmak için benim yaptığım)

Bunları yarın deneyerek kaç cycle tuttuğuna bakacağım.
(ben eğer ikinin katlarında bölme çarpma varsa sağa sola döndürmeyi tercih ediyorum.)

JOKERAS

Evet ZorO usta,derleyiciler akıllı.
Acaba aynı durum sağa shift ( çarpma ) içinde geçerlimi?

mufitsozen

Alıntı yapılan: JOKERAS - 26 Kasım 2016, 19:08:54
Evet ZorO usta,derleyiciler akıllı.
Acaba aynı durum sağa shift ( çarpma ) içinde geçerlimi?

evet
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

muhittin_kaplan