Beruflich Dokumente
Kultur Dokumente
ARM Programlama
ARM Programlama
ARM konusunda oluturulan bu e-kitap size ARM Cortex-M4F tabanl ilemcilerin alma yaps, C
programlama ve Assembler konusunda gerekten hatr saylr bir kaynaktr. Eitimler Texas Instruments
firmasnn dk g tketimi ile alan ve olduka ucuz olan Stellaris Launchpad kiti kullanlarak
anlatlmtr. Yazlar Dr. Miro Samek'in yaynlad ve Eren BATRK'n evirdii eitimler temel alnarak
yazlmtr. Bu yazlar hazrlarken desteini grdm Ahmet Alpat'a ve tm izgi-TAGEM ailesine
teekkrlerimi sunuyorum. Faydal bir yaz olmas dilei ile, iyi almalar.
Arif Ahmet Balk
Yazar Hakknda
Bir teknik lisede web programcl dalnda okuyor. Gml sistemler ve FPGA merakls.
birkodyaz.blogspot.com.tr adl bloun kurucusu ve yazar. uan YT Teknoparkta bir ARGE irketi olan
KATIHAL Elektronik Yazlm ARGE A'de part-time olarak alyor. stanbul HackerSpace yesi.
letiim
arifbalik@outlook.com
Eren BATRK
1990 Kayseri doumlu. 2005 ylnda ilkokul eitimini tamamlayp Antalya Adem Tolunay Anadolu Lisesinde eitimine
devam etti. 2009 ylnda Sleyman Demirel niversitesi Elektronik ve Haberleme Mhendislii blmn kazand. Halen
ayn niversitede 3.snf rencisi olarak eitimine devam etmektedir. Gml Sistemler , Linux letim Sistemleri , Fpga ,
Yazlm Gelitirme ve Saysal Elektronik zerine almalarn srdrmektedir.
letiim
iletisim@erenbasturk.com
ARM Programlama
ARM Programlama
NDEKLER
1. Balang .........................................................................................................................4
2. Saym ..............................................................................................................................10
3. Kontrol Ak ..................................................................................................................42
4. Deikenler ve aretiler ..............................................................................................56
5. Led Yakp Sndrme.......................................................................................................75
6. nilemci ve Volatile.....................................................................................................101
7. C'de Bitsel Opreratrler ...............................................................................................114
8. Diziler ve areti Aritmetii.........................................................................................135
9. Fonksiyonlar ve Stack...................................................................................................155
10. Modller, zyineleme ve AAPCS169
ARM Programlama
ARM Programlama
ARM Programlama
ARM Programlama
Herkese Merhabalar, lk derste cretsiz gml gelitirme ara setini (IAR Embedded
Workbench) ykleyeceiz ve pahal olmayan bir gelitirme kart olan Stellaris
Launchpad'i nereden sipari edeceimizi gstereceim. Bu kart sayesinde kodlarnz
fiilen gerek bir mikrodenetleyici zerinde altrabilirisiniz. Ancak gelitirme
kart olmadan da bu eitim serisini takip edebilirsiniz nk komut seti
simlatrnn nasl kullanlacan reneceiz.
C Programlama Dili
reneceimiz yksek seviyeli olarak adlandrlan programlama dili
C'dir. Fakat sklkla dk seviyeli makine
koduna ineceiz ve size gml ilem srecinde neler olacan gstereceim. Siz'de
ilemcinizin kodunuzu nasl altrdn verileri nasl ilediini ve bir
bilgisayarn gerek dnyada yapabildii eyleri greceksiniz. Bir ledi yakp sndrmek
gibi. Bu kavrama gc sizin C dilini daha etkin ekilde ve daha fazla gven duygusu
ile kullanmanz salayacak. Programlama anlayn kazanacaksnz. Sadece
programnzn yapmas gerekenleri deil,
bunun yannda bu durumlarn nasl makine dolarna nasl evrildiini anlayn ve
ilemcinin kodlar ne kadar hzl altrabildii anlayn kazanacaksnz.
ARM Cortex-M4F
ARM Programlama
ARM Programlama
Bu Kursta Arm Cortex-M4F adndaki ilemciyi kullanacaz.
Ama bu rendiklerimizi btn Cortex-M ilemci ailesine CortexM0'dan M0+'a, Cortex-M3 ve M4'e uygulayabileceksiniz.
ARM Programlama
ARM Programlama
ARM Programlama
ARM Programlama
Dosya boyutu biraz byk olduu iin indirme biraz zaman alabilir.
Dosya indikten sonra ift tklayp an ve yklemenin tamamlanmasn
bekleyin.
ARM Programlama
ARM Programlama
10
ARM Programlama
"licence dongle yklensinmi" diye soruyor. buna hayr deyip
geiyoruz.
IAR ile ilk karlatnzda size bir kayr ilem kutusu ibraz
edilecek. "Register"a tklayn. Doldurmak zorunda olduunuz kayt
formu karnza kacak buradaki en nemli adm kod limiti lisans
trn semek geri kalan eyleri doldurup son olarak "submit
registration" butonuna tklayn. Mail adresinize eglen linki an ve
lisans numarasn IAR' atmzda karmza kan ekrandaki metin
kutusuna yazn.
Tebrikler! Artk gml yazlm gelitirmek iin bir ara setine
sahipsiniz.
Stellaris LM4F120 Launchpad
ARM Programlama
11
ARM Programlama
SAYIM
Tekrar merhaba. Gml sistem programlama derslerinin 2. serisine
ho geldiniz. Bu derste bilgisayarlarn nasl saym yaptn
greceiz. Bu ve bundan sonraki derslerde, ilk derste anlatlan IAR
ara setinin cretsiz srmn kullanacaz.
lk projemizi oluturalm, IAR EWARM' balatn ve Project > Create
New Project mensn sein.
ARM Programlama
12
ARM Programlama
ARM Programlama
13
ARM Programlama
ARM Programlama
14
ARM Programlama
Projenin konfigrasyonunu bitirmek iin birka parametreyi
ayarlamanz gerekiyor. Project > Options mensne tklatalm.
ARM Programlama
15
ARM Programlama
Hemen sonra C/C++ Complier kategorisini sein. Varsaylan dil olarak
C'yi ve varsaylan C diyalektini c99 olarak gryorsunuz.
ARM Programlama
16
ARM Programlama
ARM Programlama
17
ARM Programlama
Projenizi ilk derlediinizde IAR bir dosya gezgini ile size alma
alannz sorar, genel bir isim verip kaydedelim (calisma_alani)
Bu derleme 0 hata ve 0 uyar ile tamamlanyor. lk legal programnz
iin tebrikler.
ARM Programlama
18
ARM Programlama
ARM Programlama
19
ARM Programlama
ilk kme parantezini bir st satra aldk ve return 0; ve bundan
sonra gelecek ifadeleri 4 boluk girinti olacak ekilde ayarladk,
aslnda bu derleyici iin hibir nemi yoktur, derleyici btn
kodlar tek ve uzun bir satr olarak alglar, yaptmz bu
dzenlemeler kodun okunabilirliini arttrmak iindir.
Fakat C ile yaptmz her ilem legal deildir. rnein illegal bir
eyler yazp F7'ye basp tekrar derleyelim.
ARM Programlama
20
ARM Programlama
21
ARM Programlama
Hemen F7'ye basarak kodumuzun doru alp almadn
derleyiciye soralm.
ARM Programlama
22
ARM Programlama
ARM Programlama
23
ARM Programlama
F7'ye basp son bir kez daha derleyelim ve dzgn altndan emin
olalm.
imdi bu programn nasl altrlacan gstereceim. ncelikle
projenin simulatr iin yaplandrldndan emin olun, aslnda bunu
stteki simulatr mensnden anlayabilirsiniz fakat iki defa kontrol
edelim. Project > Options mensne tklayn. Debugger kategorisinde
Simulator seeneini grmelisiniz.
ARM Programlama
24
ARM Programlama
25
ARM Programlama
olun (Disassembly, Memory, Register ve Locals), bunlar amak iin
View mensnden ilgili alanlar seelim.
ARM Programlama
26
ARM Programlama
ARM Programlama
27
ARM Programlama
ARM Programlama
28
ARM Programlama
ARM Programlama
29
ARM Programlama
Bunlar sralar saylar, adresler olarak adlandrlanlar, bellek
grnm mensnn solunda say stunu boyunca gsteriliyor.
Bellekteki makine kodlarn daha iyi tanmak iin grnm 2xbirim
olarak deitirelim nk ARM Cortex komutlarnn byk ounluu
bellekte 2 bayt igal eder.
ARM Programlama
30
ARM Programlama
ARM Programlama
31
ARM Programlama
ARM Programlama
32
ARM Programlama
ARM Programlama
33
ARM Programlama
34
ARM Programlama
mensnde grebilirsiniz.
ARM Programlama
35
ARM Programlama
ARM Programlama
36
ARM Programlama
Bu kaydedicilerin nem durumu gerek u ki makine kodlar genel
olarak bir saat evriminde (clock cycle) dorudan kayedicileri
hnerli bir ekilde kullanabilirler.
ARM Programlama
37
ARM Programlama
ARM Programlama
38
ARM Programlama
Programclar 16'lk
say sistemini, almak iin 10'luk say sistemine gre daha uygun
buluyorlar nk 16'lk say sistemi ksusursuz bir ekilde tm
bilgisayarn temelini oluturan ikilik say sistemini haritalyor.
Yanda grdnz bu karlatrma 10'luk, 2'lik (BIN) ve 16'lk say
sistemleri arasnda tek bir 16'lk hane 4 bitlik bir grubu temsil
ediyor. Karlatrmada, 10'luk (DEC) sistem 9 zerindeki saylar
iin 2 haneye ihtiya duyuyor. Her 16'lk hanenin nende garip
grnml '0x' n eki, C dilindeki hexadecimal (16'lk say sistemi)
saylarn kodlanmasnn bir dzenidir.
Alttaki resim bir 32 bitlik saynn 16'lk sistemdeki karlnn
bir rneinin uygulamasn tablonun zerinden grebilirsiniz. Bitler
8 li drlk paketler halinde gruplanm. Her 8 bit bir Bayt olarak
adlandrlyor, her bayt iki adet 4 bit (yarm bayt - nibble)
ieriyor. Biraz nce akladm zere, yarm bayt'lar direkt olarak
16'lk sistemin hanelerini haritalyor. rnein '1010' yarm bayt'
hex hanesi olarak A'y haritalyor. '0101' yarm bayt' 5'i
haritalyor ve benzeri eyler. Sonunda tm 32 bit'lik ikilik say
sistemindeki dizi '0x260F3E5A' deerine denk geliyor.
ARM Programlama
39
ARM Programlama
Test iin
'0x7FFFFFFF' deerini yanmamz gerekiyor, bu say onluk sistemdeki
en byk saydr. Bu sayy yazp Enter tuuna basnca karmza
onluk sistemdeki say kyor.
imdi Step-Into butonuna tklayarak sayac deikenini bir
arttralm.
40
ARM Programlama
ARM Programlama
41
ARM Programlama
ARM Programlama
42
ARM Programlama
ARM Programlama
43
ARM Programlama
ARM Programlama
44
ARM Programlama
KONTROL AKII
ARM Programlama
45
ARM Programlama
ARM Programlama
46
ARM Programlama
ARM Programlama
47
ARM Programlama
ARM Programlama
48
ARM Programlama
ARM Programlama
49
ARM Programlama
C dilindeki en basit dng while dngsdr. Bunu "while" anahtar
kelimesini ekleyerek yapabiliriz (1), bunu takiben parantez iinde
bir art kodlayalm (2), son olarak dngnn gvde ksmn
kodlayalm (3).
int main(){
int sayac = 0;
while(sayac < 5){
sayac++;
}
return 0;
}
Bu kod art kontrol ederek balyor ve eer bu art doruysa, bu
dngnn gvde ksmndaki kodlar altryor ve art tekrar
kontrol etmek iin geri dnyor. Bu dngden sadece art
salanmadnda k yaplyor.
ARM Programlama
50
ARM Programlama
ARM Programlama
51
ARM Programlama
ARM Programlama
52
ARM Programlama
BLT komutu dallanma komutunun bir eididir. Siz zaten nceden bunu
grdnz fakat bu arta bal bir dallanmadr. zellikle sadece N
biti APSR'ye atand zaman BLT komutu PC zerinde deiiklik
yapyor. Aksi takdirde BLT komutu basit olarak bir sonraki komut
iin baarszla uruyor ve program sonlanyor.
Bu noktada u gzel bir soru : "Dallanma komutu nereye dallanacan
nasl biliyor ?". Gzel, bu bilgi komutta kodlanm olan bilgiden
dar kyor. Aada tm B komut trlerinin kodlanmasn
aklayan ARM mimarisi kullanma klavuzundan bir sayfa.
ARM Programlama
53
ARM Programlama
Komuttaki sonraki yarm bayt koul anlamna geliyor ve "0xB" LT
(Less Than) koulu anlamna geliyor. Sonunda, offset olarak
adlandrlan fc bayt PC kaydedicisinin ne kadar deimesi
gerektiini kodluyor. uan offset iaretli bir tamsaydr ve ilk
dersten, iaretli saylarn ikinin tmleyen gsterimini kullandn
hatrlamalsnz. Buna binayen fc bayt -4 temsil ediyor.
Bylelikle imdi, PC kaydedicisinin yeni deerini hesaplayabiliriz.
0x7E olarak verilen deerini uanki PCnin deeri 0x82 deerinden 4
eksilterek anlyorsunuz. Hesap makinesini programc modunda ap 82
deerinden 4 karrsak 7E deerini buluyoruz.
Bu dallanmann nereye gideceini beklediiniz yerdir. Bunu BLT
komutunu altrarak dorulayalm.
ARM Programlama
54
ARM Programlama
kincisi : derleyici olduka akll ve ilemcinin size gre daha iyi
olduunu biliyor ayrca dzgn olmayan kontrol ak ilemcinin
sizin kodlarnz ne kadar hzl altraca zerine nemli bir
etkiye sahip ve bir gml sistemler programcs olarak bunun
farknda olmanz gerekiyor. lk olarak burada bir dng ek yk var
nk sadece dngy ilemek iin uan ilaveten test ve dallanma
yapyorsunuz.
Fakat bir dakika! burada daha kt bir ey var. Dallanmalar ek
olarak iletiim hatt (Pipeline) gecikmelerinden dolay iletim
gecikmesi ekliyor.
Aklayalm ;
Btn modern ilemciler, ARM Cortex-M'de dahil olmak zere
verimlilii arttrmak iin bir iletiim hatt (Pipeline) kullanyor.
55
ARM Programlama
yapmanz gerektiini biliyorsunuz. Baz dngleri ya tamamen yada
ihtiyacnz olduu kadaryla aabilirsiniz. rnein while dngsn
uygun olarak deitirebilirsiniz : saya art miktarn dng
boyunca tek bir gei bana arttrabilirsiniz ve dngy
ayarlayabilirsiniz.
ARM Programlama
56
ARM Programlama
ARM Programlama
57
ARM Programlama
DEKENLER ve ARETLER
Merhaba. Gml sistemler programlama derslerine hogeldiniz. Bu
derste deikenler ve iaretiler hakknda konuacaz.
nceki ders2 projesinin bir kopyasn alalm ve bunu ders3 olarak
isimlendirelim. Eer ders2 dosyasna sahip deilseniz bu yazy
okuyabilirsiniz.
ders3 klasrnn iine girin ve IAR ara setini amak iin alma
dosyasnn zerine ift tklayn (.eww uzantl dosya). Eer IAR
ara setine sahip deilseniz bu yazy okuyabilirsiniz.
Ve burada ders2'de oluturduumuz C dosyas var. Bunu birazck
temizleyelim ve saya deikeninin nerede bulunduuna ve nasl
eriildiine hata ayklaycda hzlca bir gz atalm.
Kod boyunca gittiiniz ve Locals grnm mensn izlediiniz zere,
saya deikeninin R0 kaydedicisi iinde bulunduu ve dorudan
makine kodlaryla eriildiini gryorsunuz.
ARM Programlama
58
ARM Programlama
ARM Programlama
59
ARM Programlama
ARM Programlama
60
ARM Programlama
Artk saya yorumlanabilecek bir durumda.
Grnd zere, imdi 0x2 ile saya deikeninin konumu byk bir
sayyla balyor.
dorudan
bellek
grnm
ARM Programlama
61
ARM Programlama
ARM Programlama
62
ARM Programlama
Aslna bakarsak bu
kaydrabilirsiniz.
etikete ne
Hey,
yklediini grmek
bu
benzer
ARM Programlama
63
iin aaya
gzkyor.
ARM Programlama
Bir sonraki LDR komutu R0' tekrar yklyor, fakat bu sefer saya
deikeninin adresi iin olan deer R0'n u anki tutulan adresinden
geliyor. Bir adm gidelim ve R0'n uan 3 deerine sahip olduunu
dorulayalm.
ARM Programlama
64
ARM Programlama
ADDS komutu R0' bir arttrmada asl ii yapyor bylelikle R0 4
oluyor.
ARM Programlama
65
ARM Programlama
ARM Programlama
66
ARM Programlama
Tm bunlar ilgin bir soruya yol ayor. Eer CPU iin bunlarn
bellek adresleri olduka belirginse, bunlar C dilinde temsil
edilebilir mi?
Bunun cevab "Evet"'tir. C programlama dilinde adresler
deikenlerin iinde iaretiler(pointers) olarak adlandrlan
yapyla tutulabilir.
Burada C'de bir iareti deikeninin rnei var.
ARM Programlama
67
ARM Programlama
yer
ARM Programlama
68
ARM Programlama
69
ARM Programlama
Dersin son
istiyorum.
admnda,
iaretilerin
inanlmaz
gcn
gstermek
ARM Programlama
70
ARM Programlama
ARM Programlama
71
ARM Programlama
ARM Programlama
72
ARM Programlama
73
ARM Programlama
flash loader" seeneini semeyi unutmayn. Eer karta sahip
deilseniz, bu admlar gein ve simlatr ile birlikte takip edin.
Her iki durumda da, hata ayklaycya erimek iin "Download and
Debug" butonuna tklayn.
ARM Programlama
74
ARM Programlama
ARM Programlama
75
ARM Programlama
ARM Programlama
76
ARM Programlama
Bylelikle, siz imdi iaretileri bir etkili mekanizma olarak
gryorsunuz ayrca eer bunu dikkatsizce kullansaydm, bu ok
tehlikeli olabilirdi.
Kullanm
klavuzunu
(User
ARM Programlama
77
kablosu
ARM Programlama
ARM Programlama
78
ARM Programlama
ARM Programlama
79
ARM Programlama
ARM Programlama
80
ARM Programlama
ARM Programlama
81
ARM Programlama
ders4 klasrnn iine girin ve IAR ara setini amak iin alma
dosyasnn stne ift tklayn (.eww uzantl dosya). Eer IAR ara
setine sahip deilseniz bu yazy okuyabilirsiniz.
Eer Launcpad kartna sahipseniz, imdi bilgisayarnza
balamalsnz ve hata ayklayc (Debugger) mensnde TI Stellaris
ara yzn konfigre etmelisiniz ve ayrca Download sekmesinin "Use
flash loader" seeneinin iaretli olduuna emin olmalsnz.
ARM Programlama
82
ARM Programlama
ARM Programlama
83
ARM Programlama
84
ARM Programlama
iyi incelediimiz zaman, 0x2000,8000 adresinde RAMin sonlandn
grebilirsiniz bylelikle onluk sistemde 32KB olan bir island
0x8000 adresi iin bir uzatmadr. Bu mikro denetleyicinin 32KBlik
RAMe sahip olduu anlamna geliyor.
Bu noktada adresler hakknda bu kadar biliyorsunuz. Fakat bu dersin
hedefi olan led yakp sndrmek iin daha fazla renmeniz
gerekiyor. En iyi ekilde, tm eitli contient ve islandlarn
mapini bilmeniz gerekiyor, RAM island gibi.
Sizin mikro denetleyicinizin hafza haritasn data sheet olarak
adlandrlan ok daha detayl dokman aklyor. Bu url adresinden
sizin Launchpad kartnzn zerinde olan LM4F mikrodenetleyicisinin
spesifik data sheetini indirmenizi son derece tavsiye ediyorum.
Fakat data sheetlerin ok geni olma eiliminde olduunu hemen size
sylemeliyim. Yinede bu nispeten ksa, 1200 ksr sayfalk bir data
sheet. ansmza bu dkmanlar batan sona okumaya ynelik
tasarlanm. Dorusu bir gml sistemler mhendisi olmann byk
bir ksm datasheetlerde nasl yolunuzun bulunacandan oluuyor
bylelikle siz ihtiyacnz olan bilgiyi hzl bir ekilde
bulabilirsiniz. Bu eitim serisinde bu beceriyi aama aama elde
edeceimizi umuyorum. Bylelikle rnein, mikro denetleyicinizin
hafza haritasn (Memory Map) bulmak iin, memory map dizesini
basite datasheet iinde aratn.
Evet, bulduk. Tipik bir ARM Cortex-M mikro denetleyicisinin hafza
haritasnn bir ksm.
ARM Programlama
85
ARM Programlama
ARM Programlama
86
ARM Programlama
ARM Programlama
87
ARM Programlama
ARM Programlama
88
ARM Programlama
olarak adlandrlr ve modern modern mikro denetleyicilerde olduka
yaygndr.
Bylelikle, datasheete geri dnmeye ihtiya duyacanz anlamna
gelen GPIO-F blounun nasl tersine evrilmesi gerektiini
kefetmeniz gerekiyor.
Dkmann bana gidin ve clock gating dizesini aratn.
Evet, burada bireyler var, Sayfaya gidelim.
ARM Programlama
89
ARM Programlama
: Salt okunabilir
ARM Programlama
90
ARM Programlama
ARM Programlama
91
ARM Programlama
ARM Programlama
92
ARM Programlama
ARM Programlama
93
ARM Programlama
ARM Programlama
94
ARM Programlama
Hey! GPIO-Fin donanm engellemesi ortadan kalkyor.
becerisine
olduka
yaknsnz
fakat
daha
k Sinyali
Ek olarak , pinler iin fonksiyonu dijital k olarak ayarlayn
0x4002551C adresi iin GPIO-F blou iinde daha aaya inin ya da
aratn ve tekrar 1,2 ve 3 bitlerine 1i atayn.
ARM Programlama
95
ARM Programlama
Heyy! Bu ie
etmelisiniz.
yarad,
krmz
led
ARM Programlama
96
parlyor.
Kendinizi
takdir
ARM Programlama
Harika.
Hex 4 yazarak bit 2yi ayarlamaya ne dersiniz.
Evet, led bu sefer maviye dnd. Gerekten harika!
ARM Programlama
97
ARM Programlama
GPIO-F blounu tersine evirmek iin kullandnz saat geitleme
sistemi kaydedicisinin adresiyle 3. Dersten retilmi olan adresi
deitirin.
ARM Programlama
98
ARM Programlama
ARM Programlama
99
ARM Programlama
ARM Programlama
10
0
ARM Programlama
ARM Programlama
10
1
GPIO-F
blounu
ARM Programlama
Sonsuz dng gzel bir ekilde alyor gibi grnyor. Eer herey
doru alyorsa, "Go" butonuna basarak kodu gerek hznda
altralm.
O da ne! Led srekli alr durumda kalyor. Break butonuna basarak
kodu durduralm ve tekrar tek tek ilerleyelim.
Bu sefer herey iyi, yinede gerek hznda altrdmz zaman
yanp snme duruyor. Problemin nerede olduunu biliyor musunuz ?
Evet, program insan gznn Led'in hzl yanp snmesini grmek iin
yetersiz. Program sadece ok ok hzl alyor. Program
yavalatmanz gerekiyor.
Bunun iin 2. derste rendiiniz saym while loop dngsn
kullanabilirsiniz. Bir dng CPU evriminin ounu boa harcamaya
benzer fakat while dngsnn artnda bir st limit atlamasyla
gecikme kontrol edilebilir.
Led'i yaktktan ve sndrdkten sonra her ikisinde de tekrar bir
gecikmeye ihtiya duyduunuzu not edin.
ARM Programlama
10
2
ARM Programlama
Bu led yakp sndrme ile ilgi dersi sonlandralm. Bunun ok fazla
nemli olarak grnmemesine ramen, bu sizin gml programlama
kariyerinizde ok nemli bir dnm noktas.
Tebrikler!
N LEMC ve VOLATLE
Gml sistemler programlama derslerine ho geldiniz. Bu derste
sizlere C preprocessor (nilemci) ve Volatile (Uucu) anahtar
kelimeleri ile Led yak sndr nasl gelitireceinizi
gstereceim.
Her zamanki gibi, nceki ders4 projesini kopyalayp, ders5 olarak
yeniden adlandrarak balayalm. Eer ders4 dosyasna sahip
deilseniz bu yazy okuyabilirsiniz.
Yeni oluturulan ders5 dizinine girin ve almaalan (.eww uzantl
dosya) dosyasna ift tklayarak IAR balatalm. Eer IAR ara
setine sahip deilseniz bu yazy okuyabilirsiniz.
Aada ders4te oluturduumuz program gryoruz.
ARM Programlama
10
3
ARM Programlama
ARM Programlama
10
4
ARM Programlama
100
100
100
ARM Programlama
C preprocessor denmesinin nedeni, asl derleme ncesindeki metin
dzenleme ileminin ayr bir ilk basama oluudur. Preprocessor,
# iareti ile balayan tm satrlar kaldrr, bylece derleyici
bunlar grmez. rnein; Herhangi bir makro tanm yapn ama kod
ierisinde kullanlmasn. Hibir etkisi olmaz ve kod yine derlenir.
ARM Programlama
101
101
101
ARM Programlama
ARM Programlama
102
102
102
ARM Programlama
ARM Programlama
103
103
103
ARM Programlama
ARM Programlama
104
104
104
ARM Programlama
105
105
105
ARM Programlama
bu makrolar hali hazrda bir dosyada sunmaktadr. Hatta ders5
dizinine bu dosyay kopyalamtm. (buradan dosya ieriini
bulabilirsiniz. Tek yapmanz gereken bu ierii kopyalayp bir text
dosyasna yaptrmak ve dosya uzantsn '.h' olarak deitirmek.
http://users.ece.utexas.edu/~valvano/Volume1/lm4f120h5qr.h) Bu
dosyay, projenize sa tklayp, Add > Add Files seenei ile
ekleyebilirsiniz. Dosyann ad lm4f120h5qr.h eklindedir ve
Stellaris Launchpad kartnzdaki ilemci trne tekabl etmektedir.
.h dosya uzants, stbilgi (Header) dosyasdr ve .c
dosyalarna, rnein main.c, eklenmesi iin tasarlanmtr.
ARM Programlama
106
106
106
ARM Programlama
107
107
107
ARM Programlama
Registernn 2 biti, kullanc butonlarna baldr. Kullanc bu
butonlara basarsa ya da brakrsa, bu bitler deiir. Bu olay tabii
ki bir program komutu yznden meydana gelmez. Bu yzden, GPIOF
Register ve hatta ou dier Giri/k Registeri, Volatiledr.
Bu nemlidir, nk derleyici volatile olmayan nesnelerin deerini
CPU Registerna geirip, bir sre bu Register ile ilem yapp,
sonunda bu Registerdaki deeri nesneye geri yazacak ekilde bir
optimizasyon yapabilir. Volatile nesnelerde, derleyicinin bu tarz
bir optimizasyon yapma izni yoktur. Program, bir volatile nesneyle
yazma ya da okuma ilemi yapmak isterse, derleyici bunu yapmak
zorundadr. Aka grlyorki, volatile niteleyicisi GPIOF gibi
Giri/k Registerlar iin kullanldr. Ayrca normal
deikenlerde de, derleyicinin yapabilecei optimizasyonlar nlemek
iin kullanl olabilir.
rnein counter deikeni, sadece 2 gecikme dngsnde
kullanlmtr. Ancak bu dnglere, derleyicinin bak asndan
bakarsanz, ileme herhangi bir katklar yoktur. nk counter
deikeninin son deerinin ya zerine yazlmaktadr ya da bu deer
atlmaktadr. Bu durumda, derleyicinin gecikme dnglerini yok etmek
iin optimizasyon yapmaya izni vardr. Optimizasyon seviyesini
ykselterek bu durumu rahatlkla grebilirsiniz. Project > Otionsa
tklayn. C/C++ Complier ve ardndan Optimizations sekmesine gelin.
High optimizasyon seviyesini sein ve OKe tklayn.
ARM Programlama
108
108
108
ARM Programlama
ARM Programlama
109
109
109
ARM Programlama
Kodumuzu son bir kez test edelim, bakalm led hala yanp snecek mi
?
ARM Programlama
110
110
110
ARM Programlama
Artk herhangi bir optimizasyon seviyesinde, doru olarak alan
programlar yazabileceksiniz. Tebrikler!
BTSEL OPERATRLER
ARM Programlama
111
111
111
ARM Programlama
ARM Programlama
112
112
112
ARM Programlama
ARM Programlama
113
113
113
ARM Programlama
Bu bitsel AND.
Bu bitsel XOR.
ARM Programlama
114
114
114
ARM Programlama
ARM Programlama
nce,
115
115
115
optimizasyon
seviyesini
none
ARM Programlama
Debugger ksmnda Setup sekmesinde simulatr seeneini iaretleyin.
Bylece launchpad board kullanmanza gerek kalmayacak.
and
Debug
ARM Programlama
116
116
116
ARM Programlama
Bu
admda
bitsel
inceliyoruz.
OR
ifadesinin
deikenindeki
sonucunu
ARM Programlama
117
117
117
ARM Programlama
Eer okuldan hatrlarsanz 0n false yani yanl, 1in true yani
doru anlamna geldiini grebilirsiniz.
Doruluk tablosunu verecek olursak;
1 OR 0 = 1,
0 OR 1 = 1,
1 OR 1 = 1 ve
0 OR 0 = 0 dr.
Disassembly penceresinde, 32 bitlik OR ilemlerinin iki operand ile
tek bir makine evriminde ORRS komutu ile, olduka hzl ve etkili
yrtldn grrsnz.
ARM Programlama
118
118
118
ARM Programlama
ARM Programlama
119
119
119
ARM Programlama
Bitsel NOT ifadesi teklidir. Yani sadece tek bir operand var. Her
1i 0a, her 0 1e evirir.
Saa kaydrma oparetr her biti bir saa kaydrr. Saa kaydrma
ilemi bir nevi int trnde bir deikeni 2 ile blmektir. Bir hesap
makinesi ile kantlayalm (DEADBEEF / 2). Locals grnm mensndeki
deikenleri onluk sistemde grnmesi iin ayarlyoruz.
ARM Programlama
120
120
120
ARM Programlama
Disassembly penceresinde
salandn gryoruz.
ARM Programlama
saa
kaydrma
121
121
121
iinin
LSLS
komutu
ile
ARM Programlama
operatr
tamamiyle
farkl
mensnde
deikenleri
binary
formatnda
ARM Programlama
122
122
122
ARM Programlama
ARM Programlama
123
123
123
ARM Programlama
Unsigned integer ve signed integer arasndaki bu farkllk,
disassembly penceresine baktnzda ok aktr.
Grdnz gibi derleyici saa kaydrma ileminde signed saylar
iin ASRS komutunu (Aritmetik Saa Kaydrma), unsigned saylar iin
ise LSRS (Mantksal Saa Kaydrma) komutunu retir.
ARM Programlama
124
124
124
ARM Programlama
ARM Programlama
125
125
125
ARM Programlama
ise,
deiiklik
olmaz,
GPIO_PORTF_DATA_R
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
KIRMIZI_LED
00000000000000000000000000000010
--------------------------------------------------------GPIO_P.. | KIRMIZI_LED xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1x
NOT! : Bu durum sadece GPIOF register zerinden okuma ve yazma
ilemi yaptnzda geerli olur.
Yani byle bir durumda okuma/yazma izni olup olmadn veri
sayfalarndan kontrol edeceksiniz.
C dili, yazm kolayl salamak amacyla baz ksaltmalarn
yaplmasna izin vermektedir.
ARM Programlama
126
126
126
ARM Programlama
Eitliin sa veya sol tarafna OR iaretini tamak mmkndr ve
ayn sonucu verir.
Aada yazlm
almaktadr.
olan
bu
iki
kod
tam
olarak
ayn
ekilde
ARM Programlama
127
127
127
ARM Programlama
ARM Programlama
128
128
128
ARM Programlama
ARM Programlama
129
129
129
ARM Programlama
Grdnz gibi mavi led hep ak, snk olan krmz led, gz
krpar gibi alp kapanyor.
Kodlara, krmz ledin set/reset ayar iin blme noktalar
koyarsak, grld gibi, krmz ledin set olmas Load Modify
Store ilemlerinden oluan bir dngye gerekleiyor.
ARM Programlama
130
130
130
ARM Programlama
ARM Programlama
131
131
131
ARM Programlama
DZLER ve ARET
ARTMET
ARM Programlama
132
132
132
ARM Programlama
ARM Programlama
133
133
133
Biraz
dzenleyelim
ve
hata
ARM Programlama
134
134
134
ARM Programlama
lgin ksm ise; kesme rutini, ana programn GPIO deerlerini
okuduktan sonra ve deitirilmi deeri yazmadan nce, Read Modify
Write ileminin ortasnda alrsa (1), kesme rutininin GPIOda
yapt deiiklikler kaybolur. nk esas kodlarmz kullanmdadr
ve GPIOun eski deerini kullanyordur (2).
ARM Programlama
135
135
135
ARM Programlama
ARM Programlama
136
136
136
ARM Programlama
Gsterim iin, KIRMIZI_LEDe 1 dier bitlere de 0 deerini atayalm.
137
137
137
ARM Programlama
C dilinde, bir deikene keli parantez ierisine bir say yazp
ekleyerek dizi tanm yapabilirsiniz.
rnein; bu dizi, her biri geici tam say olan 2 saycdan oluur.
Hatta tm diziyi tanmlamak iin bu ekilde bir zm
uygulayabilirsiniz.
imdi
dizi
elemanlarn
kullanabilirsiniz.
normal
birer
deiken
olarak
ARM Programlama
138
138
138
ARM Programlama
Diziler ve iaretiler arasndaki haberleme ift ynldr nk her
bir iareti dizi olarak grntlenebilir. rnein, standart LM4F
header dosyas, iareti GPIO_PORTF_DATA_BITS_Ryi tanmlar.
ARM Programlama
139
139
139
ARM Programlama
ARM Programlama
140
140
140
ARM Programlama
ARM Programlama
141
141
141
ARM Programlama
kinci
olarak,
iareti
aritmetii
kullanrz
nk
GPIO_PORTF_DATA_BITS_R uzun iaretsiz iaretidir. areti
aritmetiinde elemann bykln kltmek zorunda deilsiniz, bu
otomatik olarak yaplr. Dizi indislemesi ve iareti aritmetii
denklii nedeniyle byle olmaldr.
ARM Programlama
142
142
142
ARM Programlama
ARM Programlama
143
143
143
ARM Programlama
Sonunda MAV_LED bit ayar iin tutarl bir ekilde dizi indislemeyi
kullanyoruz.
ARM Programlama
144
144
144
ARM Programlama
Fast
Interrupt
ARM Programlama
145
145
145
Safe
ARM Programlama
Programmz
daha
iyi
hale
geldi,
mikrodenetleyicisi daha iyisini yapabilir.
ARM Programlama
146
146
146
ancak
Stellaris
LM4F
ARM Programlama
ARM Programlama
147
147
147
ARM Programlama
ekilde grld
edilmektedir.
zere,
PORTF
(GPIOHBCTL)5.
Bit
ile
kontrol
ARM Programlama
148
148
148
ARM Programlama
ARM Programlama
149
149
149
ARM Programlama
ARM Programlama
150
150
150
ARM Programlama
En son ekli ile kodlar kitimizde test edelim.
ARM Programlama
151
151
151
ARM Programlama
FONKSYONLAR ve STACK
ARM Programlama
152
152
152
ARM Programlama
ARM Programlama
153
153
153
ARM Programlama
ARM Programlama
154
154
154
ARM Programlama
ARM Programlama
155
155
155
ARM Programlama
ARM Programlama
156
156
156
ARM Programlama
Derleyici,
tanmlarndan
nce
her
fonksiyonun
prototipini
grmelidir. Bu arada, beklet() fonksiyonunuz bir argman listesi
istememektedir. Eski C dili standartlarnda, bunu void yazmak
yerine sadece bo brakrak tanmlayabilirdiniz.
ARM Programlama
157
157
157
ARM Programlama
ARM Programlama
158
158
158
ARM Programlama
nceki kontrol ak konulu 2. dersimizden hatrlarsanz, bir
dallanma komutu, sadece program sayac (Program Counter PC)
yazmacnn deerini deitirir. BL komutu ise, fazladan bir etkisi
vardr ve sradaki komutun adresini R14 yazmacna, Link Register'a
(Balant yazmac) saklar.
ARM Programlama
159
159
159
ARM Programlama
Fonksiyon, SP yazmacn ayarlamakla balyor.
ARM Programlama
160
160
160
ARM Programlama
ARM ilemcilerde, yn, en alt adreslere doru (Hafza grnmnde
yukarda) byr ve yksek adreslere doru (Hafza grnmnde
aada) klr. Dier ilemcilerde, yn ters ynde byyebilir.
C ynlar iin iyi bir benzetme, bulak ynlardr. Tabaklar
sadece en tepeden alabilir ya da ekleyebilirsiniz. Yani artk
anlayacaksnz ki, SP'den 4 karmak, yn bu kadar bytr ve
ynn tepesinde counter yerel deikenine yer aar. Sonrasnda
bu deiken sfrlanr ve 1 milyon kere arttrlr.
ARM Programlama
161
161
161
ARM Programlama
162
162
162
ARM Programlama
seti deiim bit'i olarak kullanlr. Bu bit 1 ise, ilemci THUMB
komut setine, 0 ise ARM komut setine gei yapar. Ancak ARM Cortex-M
serisi, sadece THUMB2 komut setini destekler ve aslnda ARM setine
geemez. Yani, Cortex-M'de, BX komutunun bu davran sadece eskiden
kalan bir mirastr. imdi BX komutunu iletelim ve nereye
gideceimizi grelim.
ARM Programlama
163
163
163
dnecektir,
ama
ARM,
Cortex-M
ARM Programlama
ARM Programlama
164
164
164
ARM Programlama
ARM Programlama
165
165
165
ARM Programlama
ARM Programlama
166
166
166
ARM Programlama
Gerekten de greceksinizki
kalmakta.
Sonra, parametrelerin nasl
fonksiyonuna
yaplan
grmek iin
breakpoint
beklet()
koyun.
ARM Programlama
167
167
167
ARM Programlama
168
168
168
ARM Programlama
ARM Programlama
169
169
169
ARM Programlama
ARM Programlama
170
170
170
ARM Programlama
ARM Programlama
171
171
171
ARM Programlama
ARM Programlama
172
172
172
ARM Programlama
ARM Programlama
173
173
173
ARM Programlama
ARM Programlama
174
174
174
ARM Programlama
ARM Programlama
175
175
175
ARM Programlama
ARM Programlama
176
176
176
ARM Programlama
Son dokunu olarak birden fazla dahil edilmesine kar koruma iin
beklet.h dosyasna bir eyler ekleyebilirsiniz. Otomatik koruma
yararldr nk bir balk dosyas altnda baka balk dosyas
ierebilir. Balk dosyasnn birden fazla dahil edilmesi kolayca
byle bir duruma yol aabilir. Aslnda byle ou balk dosyas
eitli ktphanelerde salanr. Lm4f.h balk dosyas da birden ok
iermeye kar bir tr koruma bulundurur. Bu C nilemcisi ile
aadaki gibi salanr.
ARM Programlama
177
177
177
ARM Programlama
ARM Programlama
178
178
178
ARM Programlama
ARM Programlama
179
179
179
ARM Programlama
ARM Programlama
180
180
180
ARM Programlama
ARM Programlama
181
181
181
ARM Programlama
ARM Programlama
182
182
182
ARM Programlama
ARM Programlama
183
183
183
ARM Programlama
ARM Programlama
184
184
184
ARM Programlama
ARM Programlama
185
185
185
ARM Programlama
ARM Programlama
186
186
186
ARM Programlama
ARM Programlama
187
187
187
ARM Programlama
ARM Programlama
188
188
188
ARM Programlama
ARM Programlama
189
189
189
ARM Programlama
ARM Programlama
190
190
190
ARM Programlama
ARM Programlama
191
191
191
ARM Programlama
ARM Programlama
192
192
192
ARM Programlama
ARM Programlama
193
193
193
ARM Programlama
ARM Programlama
194
194
194
ARM Programlama
ARM Programlama
195
195
195
ARM Programlama
ARM Programlama
196
196
196
ARM Programlama
ARM Programlama
197
197
197
ARM Programlama
ARM Programlama
198
198
198
ARM Programlama
ARM Programlama
199
199
199
ARM Programlama
ARM Programlama
200
200
200
ARM Programlama
ARM Programlama
201
201
201
ARM Programlama
ARM Programlama
202
202
202