Raspberry Pi’ye İşletim Sistemi Yazmak Ders 5

Bu ders bir önceki ders temel alınarak yazılacaktır.

Veri

Bilgisayar için verilerin önemi büyüktür. Değişik tipte özelleşmiş şekillerini kullanıyor olabilirsiniz. Örneğin text dosyaları yazı içeren dosyalardır, resim dosyaları resim içerir. Gerçekte bunlar sadece sunum şeklidir. Bilgisayardaki tüm bilgiler 1 ve 0 şeklinde binary olarak algılanır öyle işlenir.

main.s dosyasının sonuna aşağıdaki kodu ekleyin.

[code]
.section .data
.align 2
pattern:
.int 0b11111111101010100010001000101010
[/code]

Verileri ve kodları ayırmak için .data bölmesi oluşturuyoruz.
.align kendinden sonra gelen sayının ikinin kuvveti olmasını garanti altına alır. Biz .align 2 kullandık yani iki üzeri ikiden 4’ün katı olan adreslerde tanımlanacak dataları kastediyoruz. Bunu yapmak gerçekten çok önemlidir, çünkü ldr talimatı 4’ün çarpanı olan adresler üzerinde okuma yapabilir.
.int komutu sabiti kendi içine doğrudan çıkış olarak kopyalar. Siz ne istiyorsanız data olarak onu kullanabilirsiniz. Burada pek bilinilmeyen …—… şeklinde bir mors kodu kodlandı. Kullanılan 0’lar kapalı LED’i ve 1 ise açık LED’i temsil eder.
Aşağıdak kodu ‘main.s’ içinde loop$ etiketinden önce ekleyin.

[code]
ptrn .req r4
ldr ptrn,=pattern
ldr ptrn,[ptrn]
seq .req r5
mov seq,0
[/code]

Bu kod r4’ün içine patterni yükler ve r5’in içine ise 0’ı atar. r5 bizim aralık pozisyonumuz olacak, bu yüzden pattern’in ne kadar gösterildiğini takip etmeyi sürdürebiliriz.
Aşağıdaki kod 0 olmayan değerleri bulmaya yarar.

[code]
mov r1,#1
lsl r1,seq
and r1,ptrn
[/code]

Şimdi main.s içindeki kodların hepsini her bir döngüde LED açık veya kapalı olacak şekilde değiştirebilirsiniz. Bekleme süresini 250000 mikrosaniye yapın. Bu sayı aralıklarındaki bekleme süresi olacaktır. Aralık sayısı 32’ye eriştiğinde tekrar 0’a dönmeniz gerekecek.

Uçuş Zamanı

Eğer yukarıda söylediğimiz şeyleri yaptıysanız veya dowload sayfasından indirip denediyseniz 3 kısa, 3 uzun olarak led’in yanıp söndüğünü göreceksiniz. Gecikmeden sonra pattern tekrarlanmalı.
Bu seriye kadar assembly kodu, GPIO kontrolcüsü ve sistem saati hakkında bir şeyler öğrendik. Ayrıca fonksiyonlar ABI ve bazı temel işletim sistemi konseptleri ile veriler konusunu da işledik.

Bu bölümün çözümü için tıklayınız.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.