Bana biraz KEIL, Biraz C ve biraz ARM öğretenin 40 yıl kölesi olurum. :)

Başlatan EMG81, 23 Mart 2011, 22:49:17

MC_Skywalker

Portları çıkış olarak ayarlamıyı anlamış oldum.

şimdi girş ten bir butona basıp led yakmayı anlamaya çalışıyorum. Örnek kodlarda şöyle birşey gördüm.

LPC_GPIO2->FIODIR   |= ((1UL<< 0)|(1UL<< 1) |  (1UL<< 2)|(1UL<< 3) | (1UL<< 4)|(1UL<< 5) | (1UL<< 6)|(1UL<< 7)) ; /* P2.0..7  is output (LED) */


burada 1UL ile bahsedilen  FIOxDIRL (FIO1DIRL 0:15 bitleri) bit registerimi? bu kadar uzun bir işlem yapmasını anlamadım. aşağıdaki kısa kod aynı işi yapıyor.

LPC_GPIO2->FIODIR = 0x000000ff;               /* LEDs PORT2 are Output */



P2[0:7] çıkış P2.11 girşi yapıp, P2.11 deki butona basılınca led yakıp söndürme yapmak istiyorum bir bazında karşılaştırma örneği bulamadım. biraz tırmalayayım.  bana önce şu yukarıda ki olayı anlata bilecek biri var mı?

haydarpasamikro

İkisi aynı işi yapar. Ancak alttakinde LPC_FIODIR2 |= 0x000000FF; şeklinde yazarsak daha doğru olur. Çünkü diğer yüksek bitlere müdahele etmemiş oluruz. Çünkü "|" operatörü OR(veya) işlemi olduğu  için yüksek bitlerin seviyesini değiştirmemiş olur.
İlki evet biraz uzun yazım tarzı. Ancak orada hangi basamak bitilerine odaklanadığımızı daha iyi görürüz.
Yani, 1UL<<2 demek, 0x00000001 uzun tamsayısını 2 bit basamak sola ötele demektir. Böylece hedef basamak bitine bireysel ulaşmış oluruz. Her ulaşmak ve set-clear yapmak istediğimiz basamak bitleri için basamak hatasını en aza indirmek için bu yazım şeklini kullanabiliriz.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

MC_Skywalker

yani anladığım kadarıyla 1UL şeklinde yazmak demek 1UnsignedLong anlamına geliyor.


haydarpasamikro

1ul yazmasakta derleyici kaç bit ötelemek istediğiniz değere bakarak veya yükleneceği register genişliğine bakarak otomatik olarak bunu farzeder. yaksa 1 yazsakta zaten onu 1ul kabul edecekti.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

z

Neden bu sorunu derleyide çözmüyorlarda programcıyı böyle tanımlama yapmaya zorluyorlar.

Görünüşte derleyici hatası gibi.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

yamak

Mesela keil da 1<<31 deyince kod istenildiği gibi çalışmıyo 1UL<<31 deyince çalışıyor. Bunun nedeni nedir? 1<<30 düzgün çalışıyor ama 1<<31 çalışmıyo. Keil da 32 bitli bir platform değil mi? Ben bu işlem sonucunda 32 bitlik bir sayı elde ediyorum neticede.

MC_Skywalker

şu an iflas ettim. bir atır bile kod anlamıyorum. Şunu yapacak kodu bile yazamadım.

P2[0:7] çıkış P2.11 girşi yapıp, P2.11 deki butona basılınca led yakıp söndürme yapmak istiyorum bir bazında karşılaştırma.

aynı işi yapan birden fazla register olması biraz kafa karışıtırıyor.

haydarpasamikro

Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi


diot


analog06

başka bir şekilde ulaşabilirmiyiz acaba ? elinde olan birisi benzer bir siteye yüklese çok makbule geçecektir.

muhendisbey

Tahminen buradaki anlatımın çoğu HAL kütüphanesi ve CubeMX öncesiydi. HAL kütüphanesi öncesi olan az buçuk bilgim de yeni kütüphane ile birlikte yalan oldu.
Bir ara baştan bakmam lazım.

Yani diyeceğim o ki yeni bir anlatım üzerinden ilerlerseniz daha iyi olabilir.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

fide

Coşkun Taşdemir'in stm32  videoları var. Hal kütüphanesini konfigurasyon için anlatıyor. Yapılacak işleri de register seviyesinden ileri doğru anlatmış anlatım dili güzel.

https://youtube.com/playlist?list=PLmkV2uU8kdpLmB7QYE_3rGhwU1258xSbj
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

z

Alıntı yapılan: yamak - 14 Aralık 2011, 14:11:48Mesela keil da 1<<31 deyince kod istenildiği gibi çalışmıyo 1UL<<31 deyince çalışıyor. Bunun nedeni nedir? 1<<30 düzgün çalışıyor ama 1<<31 çalışmıyo. Keil da 32 bitli bir platform değil mi? Ben bu işlem sonucunda 32 bitlik bir sayı elde ediyorum neticede.

1<<31 negatif bir sayi, 1UL<<31 ise pozitif bir sayi.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com