Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Arm reset sorusu?

Başlatan mir_as82, 29 Temmuz 2013, 22:19:29

mir_as82

Dediğiniz z hocanın derslerine bakıyorum. Ama şu kısmı anlayamadım. Yardımcı olursanız memnun olurum.

Reset anında olan olaylar ile ilgili olarak. "Stack pointere 0x0000.0000....0x0000.0003 adreslerindeki 32 bitlik veri donanımsal olarak yüklenir."
Buradan benim anladığım şu: 0x0000.0000->a olsun , 0x0000.0001->bolsun, 0x0000.0002->c olsun , 0x0000.0003->d olsun.Bu adreslerdeki 8 bitlik veriler birleştirilerek 32 bit oluşturuluyor ve stack pointer a atanıyor. Bu cümleden kasıt bu mu?

z

#1
Stack pointer 32 bitlik deger saklar.

ARM 32 bit islemcidir verilere, isterse 32 bit, isterse 16 bit, isterse 8 bit, isterse 1 bit ulasir.

0 adresindeki 32 bitlik deger, stack pointere yuklenecekse bir sonraki 32 bitlik veri 4 adresindedir.

Eger byte olarak konusacaksak

32 bitlik deger 0 adresinden okunacaksa

ornegin bu deger 0x12345678 ise

0 adresinde 0x12
1 adresinde 0x34
2 adresinde 0x56
3 adresinde 0x78 var demektir.

Yada 32 bit konusacaksak 0 adresinde 0x12345678 var demektir.

Bunlarin hepsi ayni sey.

0 adresindeki deger donanimsal olarak, yani kullanicinin yazazacagi komuta gerek olmaksizin SP icine atilir.
Romda 4 adresindeki deger de Reset rutininin basladigi adresi gosterir. Bu da gene donanimsal olarak PC (program counter) icine atilir.

Boylece resetlenen islemci Ramdaki Stack alanini ve reset rutinini bilerek kod calistirmaya hazir demektir.

Startup dosyasinda stack alani tanimlidir. Ayni sekilde reset programinin yeri de bellidir.

Derleme asamasinda 0 adresine SP, 4 adresine de Reset adres yerlesmesi icin 0 ve 4 adresine sahte asm komutlarla
bu degerlerin dogrudan yerlesmesi saglanir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mir_as82

"0 adresindeki 32 bitlik deger, stack pointere yuklenecekse bir sonraki 32 bitlik veri 4 adresindedir." Yazılandan şunu anladım. 0 adresindeki veri 32 bit, bu veriyi aldı stack e yazdı. Peki 1. adres, 2. adres ve 3. adresdeki 32 bitlik veriler kullanılmıyor mu?

z

#3
Yukaridaki yazimda bu sorunun cevabi var zaten.

Tekrar yazayim.  0..7 adreslerinde byte cinsinden asagidaki veriler var.

0x00000000: 0x12
0x00000001: 0x34
0x00000002: 0x56
0x00000003: 0x78
0x00000004: 0x90
0x00000005: 0xAB
0x00000006: 0xCD
0x00000007: 0xEF

Yukaridaki gosterim ile asagidaki gosterim tamamen ayni. Asagidaki adresler 32 bit veri tutuyor.

0x00000000: 0x12345678
0x00000004: 0x90ABCDEF

Eger 0x00000001 adresinde ne var dersen 0x34 verisi var diyebiliriz. Hos olmamakla birlikte 0x3456 verisi var da diyebiliriz. 0x34567890 verisi de var diyebiliriz.


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

mir_as82

peki hocam saçmalamıyorum umarım :).
işlemci 0. adresindeki verinin 0x12 (00010010)olduğunu nereden anlıyor? o veri aslında şu da olamaz mı? 0x0000 0012 ? O zaman 0. adresine kayıt yaparken byte değişken tanımını kullanmamızın amacı işlemcinin 0. adrese erişeceği zaman oradan alacağı verinin 0x12 (yani:00010010 binary) olduğunu anlaması mıdır?

ErsinErce

adresler standart byte olarak ayrılmıştır.
0. adresten byte okursanız sadece 0
word okursanız 0 ve 1 ,
long okursanız 0,1,2,3. adresi okursunuz.

Veli B.

Adreslemede ki her bir birimi, 1 byte lık gözler olarak düşünün.
0. çekmecede 0x12 var.
1. çekmecede 0x34 ...

Siz 32 bitlik data dediğinizde aslında 4* 1 bytelık dolabı kast ediyorsunuz. 
Birinci 32 bitlik data aslında 0. Byte + 1.Byte+2.Byte+3.Byte
İkinci 32 bitlik data doğal olarak 4.Byte+5.Byte+6.Byte+7.Byte gözlerinde.

z

Islemcinin komut kumesinde 8 bit okumak icin ayri, 16 bit okumak icin ayri, 32 bit okumak icin ayri komutlar var.

Siz islemciye 0 adresindeki veriyi oku diye komut vermiyorsunuz. Siz 0 adresinden 8 bit oku yada 32 bit oku gibi komut veriyorsunuz.

Donanim, reset asamasinda 0 adresinden SP degerini okurken otomatik olarak 32 bit okuyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mir_as82

Tamam hocam kafamdaki pürüz netleşti. Adres 1 byte lık veri alabiliyor doğal olarak 32 bit veri okumak için 4 tane adresten peşpeşe okuması lazım. Peki bütün adres hücreleri hep 8 bit mi veri alır? Bu standart mıdır?