ASM kullanıcılarını C'ye alıştırma turları

Başlatan bunalmis, 31 Ekim 2011, 17:57:22

yamak

Hocam bu derleyiciyle alakalı bişey değil mi? Yani derleyiciyi kim yazdıysa onun belirlediği kurallar.

cooldoubtless

BUNALMIŞ HOCAMIZ DISCOVERY KİT HAKKINDA ÖRNEKLER VERİRKEN

//  FLASH->ACR = 0x00000705;           // Flash ROM icin 6 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55) Yazmamız gereken asıl kod bu fakat çipte bug var
   
    FLASH->ACR = 0x00000605;           // Flash ROM icin 6 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55) Mecburen bunu yazacağız.

gibi bir açıklama yapmış ancak burada neden 0x0605 değerini kullandığımızı ben anlayamadım çipte bug olması ne demek ve de neden bu değeri(PREFETCH bitini) etkiliyor? Diğer konular kilitli olduğundan buraya yazmak zorunda kaldım özür dilerim...

camby

#17
Alıntı yapılan: z - 02 Kasım 2011, 06:25:54

#include "STM32F4xx.h"
unsigned short A;

void SystemInit()
{
}

unsigned short* Bit_Adr(int Wadr,char BitNum)
{
      return((unsigned short*)(0x22000000 + ((Wadr - 0x20000000)<<5) + (BitNum<<2)));
}

int main()
{
unsigned short* P;
     A=0;
     P=Bit_Adr((int)&A,2);
    *P=1;
   
}


Hocam bu yapı ile istediğim portun bitine Bitband kullanarak yazabiliyorum ancak kafama takılan bir nokta var.

P pointer'ına sizin örneğinizde yüklenen değer 0x22000008 , benim örneğimde de 0x422201A0 gibi bir değer ( GPIOC->ODR, Bit8 ) ve sorunsuz çalışıyor gibi.

Ancak P pointerını unsigned short olarak tanımladık yani 16bit. Fakat 32 bitlik adresleri P pointer'ı ile kullanıyoruz , değeri hesapladığımız fonksiyondan 16 bit short bir değerle dönüyoruz.

Burada kaçırdığım bir şey mi var acaba diye sormak isterim size ?

mesaj birleştirme:: 04 Kasım 2012, 17:13:58

Alıntı yapılan: camby - 04 Kasım 2012, 17:13:32
Bu yapı ile istediğim portun bitine Bitband kullanarak yazabiliyorum ancak kafama takılan bir nokta var.

P pointer'ına sizin örneğinizde yüklenen değer 0x22000008 , benim örneğimde de 0x422201A0 gibi bir değer ( GPIOC->ODR, Bit8 ) ve sorunsuz çalışıyor gibi.

Ancak P pointerını unsigned short olarak tanımladık yani 16bit. Fakat 32 bitlik adresleri P pointer'ı ile kullanıyoruz , değeri hesapladığımız fonksiyondan 16 bit short bir değerle dönüyoruz.

Burada kaçırdığım bir şey mi var acaba diye sormak isterim size ?

mesaj birleştirme:: 04 Kasım 2012, 17:15:21

Burada düzenleme yapılamıyor sanırım bu sayede öğrenmiş oldum : )

z

Pointerin tipi ile point edilen yere yazılacak verinin uzunluğu anlaşılmalı.

ARM işlemcide memory 32 bit adreslenir. Dolayısı ile pointerler fiziksel olarak 32 bit deger saklar. Pointerin short int tanımlanması 32 bitlik ile adreslenen alana 16 bitlik veri yerleştirilmesine izin verir.

0x01
0x0001
0x00000001
0x0000000000000001

Yukarıda 1 sayısını görüyorsun. Bunların memorye yerleşimi 32 bitlik pointer ile yapılır fakat her biri memory de farklı uzunlukta alan kullanır.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com