Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: Yuunus - 07 Kasım 2013, 21:31:32

Başlık: C de bu islem baska nasil yazilir.
Gönderen: Yuunus - 07 Kasım 2013, 21:31:32
   Merhaba, C deki ozel operatorleri kullanmadan "&,| vs" asagidaki portu okumanin daha basit bir yolu var mi?
data=(GPIOB->IDR & 0x1);
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: camby - 07 Kasım 2013, 21:41:34
yok , zaten bit işlem yapılamıyor ( bit set reset dışında )



Düzeltme : bit set reset yazmışım parantez içi dalgınlıkla ama o bit banding olacaktı.
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: z - 07 Kasım 2013, 21:43:55
Bit banding ile dogrudan ilgili biti okursun. Maskeleme isleriyle ugrasmana gerek kalmaz.
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: Yuunus - 07 Kasım 2013, 22:18:12
hocam nasil, forumdaki bitbanding orneginize baktim baya uzun, amacim port'a daha hızlı erismek ama sanirim bitbanding de daha fazla islem yapiyor.
https://www.picproje.org/index.php/topic,36040.0.html (https://www.picproje.org/index.php/topic,36040.0.html)
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: z - 07 Kasım 2013, 22:21:30
Nasil bir kod yazacagina bagli. Hele hele isin icine asm sokulursa limitleri zorlarsin.
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: Yuunus - 07 Kasım 2013, 22:28:11
hocam yazacagim kod sadece bu data=(GPIOB->IDR & 0x1); asembler ile yapmak istedim ama bu arm in asm sinden hic bisey anlamadim isin kotusu ogretecek kaynakta bulamadim.
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: MC_Skywalker - 07 Kasım 2013, 22:49:36
Aşağıdaki linklerden birşe çıkarmı bilmem ama bu http://www.4shared.com/office/jnAb9UHY/Cortex_M3.html (http://www.4shared.com/office/jnAb9UHY/Cortex_M3.html) PDF te bitbanding ve ASM var

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/BABJIHGJ.html (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0473c/BABJIHGJ.html)
http://www.eng.auburn.edu/~nelson/courses/elec5260_6260/ARM_AssyLang.pdf (http://www.eng.auburn.edu/~nelson/courses/elec5260_6260/ARM_AssyLang.pdf)
http://www.shervinemami.info/armAssembly.html (http://www.shervinemami.info/armAssembly.html)
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: mufitsozen - 07 Kasım 2013, 23:17:04
Alıntı yapılan: digiman - 07 Kasım 2013, 21:31:32
   Merhaba, C deki ozel operatorleri kullanmadan "&,| vs" asagidaki portu okumanin daha basit bir yolu var mi?
data=(GPIOB->IDR & 0x1);

z hocam bana kizacak yine ama, asm'ye gerek yok.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka4203.html (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka4203.html)
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: z - 07 Kasım 2013, 23:23:56
Ben gene de yazayim.

PORT B nin B0 bitini Bit0 adindaki integer degiskenin icine yazmak icin

int __ASM BitBand(int Adr)
{
      LDR R0,[R0]
      BX   LR
}

int main()
{
int Bit0;
     
     Bit0=BitBand(0x42218100) ;
}

Alin iste mis gibi C.
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: mistek - 07 Kasım 2013, 23:29:24
Alıntı yapılan: z - 07 Kasım 2013, 23:23:56
Ben gene de yazayim.

PORT B nin B0 bitini Bit0 adindaki integer degiskenin icine yazmak icin

int __ASM BitBand(int Adr)
{
      LDR R0,[R0]
      BX   LR
}

int main()
{
int Bit0;
     
     Bit0=BitBand(0x42218100) ;
}

Alin iste mis gibi C.

Hocam sizin bu ASM C karışık örneklerinize bakınca ASM göz korkutmuyor. :)
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: Yuunus - 07 Kasım 2013, 23:44:37
 ;D sagol hocam bende ARM assembler pdf indirdim registerlara bakiyorum. Aslında ARM ogreniyoruz ornekleri gibi birde asm icin ogreniyoruz diye bolum acsaniz buyuk sevaba girersiniz. Gercekten ornekleriniz sade ve anlasilir. Tesekkur ederim.
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: CLR - 08 Kasım 2013, 02:54:35
Merhaba,

Ben size daha güzel bir yöntem vereyim, keil uzun zamandır compile ederken bitbanding'i destekliyor bu nedenle bit bazında asm ile uğraşmaya gerek yok, aşağıdaki örneği inceleyin, keil'in struct'ları bitbanding olarak kullanması için "__attribute__((bitband))" eklemeniz gerekir. Keil/arm sitesinde de örnekler görebilirsiniz anlatılıyor. Bir struct'ın bir bitlik değişkenlerine bitbanding olarak erişir bu nedenle en verimli yöntemdir.


struct GPIO_IDR_BITS{
  vu32  IDR0           : 1;
  vu32  IDR1           : 1;
  vu32  IDR2           : 1;
  vu32  IDR3           : 1;
  vu32  IDR4           : 1;
  vu32  IDR5           : 1;
  vu32  IDR6           : 1;
  vu32  IDR7           : 1;
  vu32  IDR8           : 1;
  vu32  IDR9           : 1;
  vu32  IDR10          : 1;
  vu32  IDR11          : 1;
  vu32  IDR12          : 1;
  vu32  IDR13          : 1;
  vu32  IDR14          : 1;
  vu32  IDR15          : 1;
  vu32  unused         :16;
}__attribute__((bitband));

union GPIO_IDR_REG {
vu32 b32;
struct GPIO_IDR_BITS bits;
struct b16_strct b16;
struct b8_strct b8;
};


Ben stm32 (ve stm8) için tüm hafıza struct/union yapısı oluşturdum tüm register ve bitlere aşağıdaki şekilde erişebiliyorum, yukarıdaki yapıyı tüm hafızaya dağıtırsanız programlama aşağıdaki şekilde kolaylaşır.
İsteyen arkadaşlar yukarıdaki gibi yapıyı tüm registerlere uygularlarsa yapabilirler.

(http://imageshack.us/a/img826/5431/7uqh.png) 

Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: camby - 08 Kasım 2013, 10:50:14
Z Hocam biraz STM32 ASM anlatsan bir başlıkta katılırım ben de.
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: CLR - 08 Kasım 2013, 11:55:31
Türkiye'de eğitim sorunu var, amerikada'ki gibi kolej tipi eğitimi uygulamak gerekiyor yani hoca konu başlığını verecek, öğrenci hem günlerce/haftalarca araştıracak hem de kendi kendine konuyu öğrenecek. Öğrenci ilk konuda epey zorlanır ama sonrakiler de artık kimsenin yardına ihtiyaç duymadan kendi işini görebilir. 

Mutlaka yardımlaşmalıyız, sormalıyız, öğrenmeliyiz ama başaramadığımız noktalarda, herşeyi sorarsak kolay bilgi olur, o zamanda bilginin kıymeti/değeri olmaz. Üniversitedeki en iyi hocalar bilgiyi yeterli temel düzeyde verip sınavda/uygulamada en çok zorlayanlardır.

Mesela ben bir işlemciye geçeceksem önce asm instuction setini ve donanımını incelerim, bu işlemcinin gücünü verir. Geçmişte  gerçekten asm program yazmışsanız, yani asm komut öğrenmekten bahsetmiyorum, yeni işlemci ile de yazabilirsiniz. Bunun için 1-2 ay çaba gerekiyor çünkü "kolay ulaşılan bilgi kolay kaybedilir".

Stm32 asm üzerinde biraz kafa patlattım çünkü bu donanıma hakim olmanıza yardımcı oluyor. Bunu yaparken kimseden yardım(öğrenme babında yoksa çok kod inceledim çünkü akıl akıldan üstündür) almadım, bu benim zorlanmamı ve bilgiye zor ulaşmamı sağladı ama pozitif olarak bilgininde kalıcı olmasını.

Aşağıdaki yapı full stm32 asm'dir, asm'de şöyle bir durum vardır sürekli belirli komut/komut dizisi tekrar eder, bunun için macrolar kullanılır ama bazı yerlerde, tek cycle'ın hesabını yapmanız gerekiyorsa, macro kullanılması fazla asm komut harcanmasına sebeb olur, orada doğrudan asm instructions kullanılır. Aşağıdaki yapı asm macrolar sayesinde kısmen C sadeliğindedir.   

stm32 Asm ile adc, spi, usart, tft , UK capture, timer vb.  uygulamaları aşağıdaki macro ve asm komutlarla gerçekleştirdim ama çoğu durumda asmye gerek olmuyor sadece bileyim ama gerektiği yerde kullanayım diye biliyorum. Biliyorum kelimesi iddalı bir kelime sürekli öğreniyorum demek daha mantıklı.


(http://imageshack.us/a/img27/4601/krq3.png)
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: camby - 08 Kasım 2013, 13:08:59
Ama gordugum kadariyla bulent hoca forumda amerkan kolej sisteminin tersine hareket etmis bir cok kisinn/firmanin da stm ve arm lara gecis yapmasina sebep olmus.

Farketmissinizdir , Ogrenci hoca iliskisi bir yana daha farkli formatlarda da bu meslekte calisanlar birbirleri ile yardmlasabiliyor,burada.

Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: CLR - 08 Kasım 2013, 13:31:40
@camby
Ben senin için söylemedim, genel olarak söyledim. Gerekliliğini ve sonuçlarını anlattım,  Kişisel olarak kimseyi eleştirmiyorum, isteyen istediğini yapabilir, özgürdür.


Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: camby - 08 Kasım 2013, 16:11:00
Problem yok , yanlış anlaşılmasın diye ben de yazayım dedim.

ek olarak dediklerinize de katılıyorum.

----

Yoğun çalıştığım için ASM'ye ayıracak vaktim yok ( C işimi görüyor ) , fakat beni iteleyecek bir şeyler bulursam da burada ASM bilgimi STM üzerinde de derinleştirmek isterim. Eminim ki , mimariyi tanıma başta olmak üzere bir çok konuda katkı sağlayacaktır yapılan işin kalitesine.
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: Yuunus - 08 Kasım 2013, 20:45:30
   sanırım laf bana geldi "CLR" bilgin o kadar degerliyse cevap vermezsin olur biter(soruyu ben sordugum icin), cevap ver diye kimsenin gırtlagini sıkmıyoruz, ustelik herkes herseyi bilmek zorunda da degil, forumun amaci ne  o zaman bilgi paylasilmayacaksa(gerci amacını da bilmiyorum ama!); kimsenin ahkam kesmeye hakkı yok. Bazen hazır kodda verilir, bence hicbir sakıncası yok kıymetini de yitirmez.(O zaman soyle de dusunebiliriz: okulda yillarca  hazir bilgilerle donatilirsiniz, bu bilgilerin hic kiymeti yok; hep hazir, hep hoca anlatiyor.)
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: CLR - 08 Kasım 2013, 21:12:42
Alıntı yapılan: digiman - 08 Kasım 2013, 20:45:30
   sanırım laf bana geldi "CLR" bilgin o kadar degerliyse cevap vermezsin olur biter(soruyu ben sordugum icin), cevap ver diye kimsenin gırtlagini sıkmıyoruz, ustelik herkes herseyi bilmek zorunda da değil, forumun amaci ne  o zaman bilgi paylasilmayacaksa(gerci amacını da bilmiyorum ama!); kimsenin ahkam kesmeye hakkı yok. Bazen hazır kodda verilir, bence hicbir sakıncası yok kıymetini de yitirmez.(O zaman soyle de dusunebiliriz: okulda yillarca  hazir bilgilerle donatilirsiniz, bu bilgilerin hic kiymeti yok; hep hazir, hep hoca anlatiyor.)


Birinci cevabımda soruna cevap verdikten sonra konu başka tarafa döndü ve o kadar iyi niyetli, öğretici, yardım amaçlı ve kimseyi hedef almayan yazılarımdan sonra çok güzel sözler söylemişsin hakkımda. İşte okumak ve anlamak ayrı bir fiiildir. 
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: Yuunus - 08 Kasım 2013, 21:34:45
...anlatamamissiniz demekki, bakin benim yazdiklarimi gayet guzel anlamissiniz; bence siz yazdiklarinizi tekrar okuyun. Ben orada bir kod ile ilgili soru sordum ve bekledigim cevap da kod ile ilgiliydi; egitim veya egitim sistemi hakkinda yazacaktiysaniz egitim konulu bir baslik acmaniz daha uygun olurdu.
Tekrar bunu belirtmek istedim.
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: CLR - 08 Kasım 2013, 22:04:38
Aslında senin dilinden bende yazarım ama yazmayacağım, Sen kod sordun bende kod ile cevap verdim zaten, bir biti kolayca okumak ve bite yazmak için C'de struct denilen bir yapı oluşturulur birinci cevabımda bunu nasıl oluşturacağını gösterdim hatta sadece onuda değil struct nasıl bitbanding yapılır onada gösterdim. Ve uygulamalı örnek verdim ama sen anlamadıysan ben ne yapabilirim.

Sonrasında @Camby stm32 asm ile ilgili bir soru sordu konu o tarafa döndü, bende yukarıda C'ye cevap verdim ama orada asm'ye gerek yok demiştim fakat bunu bilinçsiz yapmadığı göstermek için asm hakkında düşündüklerimi ve örnek kod yazdım yoksa bit test gibi dandik bir konu için eğitim konusuna girecek değilim.  @camby bende aynı fikirdeyim dedi konu kapandı ama sonra sen çıktın. Bu defa yeterince açık ve anlaşılır olmuştur sanırım.

Senin gibi insanlarıda anlamıyorum hem soru soruyorsun, yardım istiyorsun ve sonra saygısızlık yapıyorsun.           
Başlık: Ynt: C de bu islem baska nasil yazilir.
Gönderen: Yuunus - 08 Kasım 2013, 22:35:56
...konuyu uzatmayalim ben sana guzel bir uslupla neden cevap verdigimi anlattim; saygi konusu, tartisilir.